USER@.SERVICE(5) user@.service USER@.SERVICE(5)

user@.service, user-runtime-dir@.service, systemd-user-runtime-dir - واحدهای سیستمی برای راه‌اندازی مدیر کاربر

user@UID.service

user-runtime-dir@UID.service

/usr/lib/systemd/systemd-user-runtime-dir

user-UID.slice

مدیر سیستم systemd(1) (شناسه PID 1) نمونه‌های مدیر کاربر را به‌صورت user@UID.service راه‌اندازی می‌کند، که در آن UID عددی کاربر به‌عنوان شناسه نمونه استفاده می‌شود. این نمونه‌ها از همان فایل اجرایی مدیر سیستم استفاده می‌کنند، اما در حالتی اجرا می‌شوند که مجموعه متفاوتی از واحدها را راه‌اندازی می‌کند. هر نمونه systemd --user سلسله‌مراتبی از واحدهای مختص آن کاربر را مدیریت می‌کند. برای بررسی واحدها به systemd(1) و برای فهرستی از واحدهایی که اساس سلسله‌مراتب واحدهای سیستمی و کاربری را تشکیل می‌دهند به systemd.special(7) مراجعه کنید.

واحد user@UID.service همراه با واحد سیستمی user-runtime-dir@UID.service ارائه می‌شود، که دایرکتوری زمان اجرای کاربر /run/user/UID را هنگام شروع ایجاد کرده و هنگام توقف آن را حذف می‌کند. همچنین ممکن است تنظیمات سهمیه زمان اجرا را روی /tmp/ و/یا /dev/shm/ برای کاربر اعمال کند. واحد user-runtime-dir@UID.service فایل اجرایی systemd-user-runtime-dir را برای انجام کار واقعی اجرا می‌کند.

فرایندهای کاربر ممکن است توسط نمونه user@.service راه‌اندازی شوند، که در این صورت بخشی از آن واحد در سلسله‌مراتب سیستم خواهند بود. آن‌ها همچنین ممکن است در جای دیگری راه‌اندازی شوند، برای مثال توسط sshd(8) یا یک مدیر نمایش مانند gdm، که در این صورت یک واحد .scope را تشکیل می‌دهند (ببینید systemd.scope(5)). هم user@UID.service و هم واحدهای اسکوپ (scope) زیر user-UID.slice جمع‌آوری می‌شوند.

برش‌های فردی user-UID.slice در زیر user.slice جمع‌آوری می‌شوند، ببینید systemd.special(7).

گزینه‌هایی که منابع در دسترس کاربران وارد شده به سیستم را کنترل می‌کنند را می‌توان در چند سطح مختلف پیکربندی کرد. همان‌طور که در بخش قبل توضیح داده شد، user.slice شامل فرایندهای همه کاربران است، بنابراین هرگونه محدودیت منابع روی آن برش به همه کاربران با هم اعمال می‌شود. روش معمول برای پیکربندی آن‌ها از طریق دراپ‌این‌ها (drop-ins) خواهد بود، برای مثال /etc/systemd/system/user.slice.d/resources.conf.

فرایندهای یک کاربر منفرد زیر user-UID.slice جمع‌آوری می‌شوند. محدودیت‌های منابع برای آن کاربر را می‌توان از طریق دراپ‌این‌ها برای آن واحد پیکربندی کرد، برای مثال /etc/systemd/system/user-1000.slice.d/resources.conf. اگر در عوض محدودیت‌ها باید برای همه کاربران اعمال شوند، می‌توان آن‌ها را از طریق دراپ‌این‌ها برای نام واحد کوتاه‌شده، یعنی user-.slice پیکربندی کرد. برای مثال، پیکربندی در /etc/systemd/system/user-.slice.d/resources.conf در تمام واحدهای user-UID.slice گنجانده می‌شود؛ برای بررسی سازوکار دراپ‌این به systemd.unit(5) مراجعه کنید.

هنگامی که کاربری وارد سیستم می‌شود و یک واحد .scope برای نشست ایجاد می‌گردد (به بخش قبل مراجعه کنید)، ایجاد اسکوپ ممکن است از طریق pam_systemd(8) مدیریت شود. این ماژول PAM با systemd-logind(8) ارتباط برقرار می‌کند تا اسکوپ نشست را ایجاد کرده و دسترسی به منابع سخت‌افزاری را فراهم سازد. محدودیت‌های منابع برای اسکوپ را می‌توان از طریق پیکربندی ماژول PAM تنظیم کرد، ببینید pam_systemd(8). پیکربندی آن‌ها از طریق پیکربندی عادی واحد نیز امکان‌پذیر است، اما از آنجا که نام واحد اسلایس عموماً غیرقابل پیش‌بینی است، این روش کاربرد کمتری دارد.

به‌طور کلی هر منبعی که برای واحدها اعمال می‌شود را می‌توان برای user@UID.service و واحدهای برش بحث‌شده در بالا تنظیم کرد؛ برای یک نمای کلی به systemd.resource-control(5) مراجعه کنید.

مثال 1. سلسله‌مراتب گروه‌های کنترل با دو کاربر وارد شده به سیستم

$ systemd-cgls
Control group /:
-.slice
├─user.slice
│ ├─user-1000.slice
│ │ ├─user@1000.service
│ │ │ ├─pulseaudio.service
│ │ │ │ └─2386 /usr/bin/pulseaudio --daemonize=no
│ │ │ └─gnome-terminal-server.service
│ │ │   └─init.scope
│ │ │     ├─ 4127 /usr/libexec/gnome-terminal-server
│ │ │     └─ 4198 zsh
│ │ ...
│ │ └─session-4.scope
│ │   ├─ 1264 gdm-session-worker [pam/gdm-password]
│ │   ├─ 2339 /usr/bin/gnome-shell
│ │   ...
│ │ ├─session-19.scope
│ │   ├─6497 sshd: zbyszek [priv]
│ │   ├─6502 sshd: zbyszek@pts/6
│ │   ├─6509 -zsh
│ │   └─6602 systemd-cgls --no-pager
│ ...
│ └─user-1001.slice
│   ├─session-20.scope
│   │ ├─6675 sshd: guest [priv]
│   │ ├─6708 sshd: guest@pts/6
│   │ └─6717 -bash
│   └─user@1001.service
│     ├─init.scope
│     │ ├─6680 /usr/lib/systemd/systemd --user
│     │ └─6688 (sd-pam)
│     └─sleep.service
│       └─6706 /usr/bin/sleep 30
...

کاربر با UID برابر با 1000 با استفاده از gdm (session-4.scope) و ssh(1) (session-19.scope) وارد سیستم شده است، و همچنین یک نمونه از مدیر کاربر در حال اجرا دارد (user@1000.service). کاربر با UID برابر با 1001 با استفاده از ssh (session-20.scope) وارد سیستم شده است و همچنین یک نمونه از مدیر کاربر در حال اجرا دارد (user@1001.service). این‌ها همگی واحدهای سیستمی (برگ / leaf) هستند و بخشی از سلسله‌مراتب برش را تشکیل می‌دهند، با user-1000.slice و user-1001.slice در زیر user.slice. واحدهای کاربری در زیر نمونه‌های user@.service قابل مشاهده هستند (pulseaudio.service، gnome-terminal-server.service، init.scope، sleep.service).

مثال 2. محدودیت‌های پیش‌فرض منابع کاربر

$ systemctl cat user-1000.slice
# /usr/lib/systemd/system/user-.slice.d/10-defaults.conf
# ...
[Unit]
Description=User Slice of UID %j
After=systemd-user-sessions.service
[Slice]
TasksMax=33%

واحدهای user-UID.slice به‌طور پیش‌فرض فایل واحد ندارند. محدودیت‌های منابع از طریق یک دراپ‌این تنظیم می‌شوند، که با پیروی از سازوکارهای استاندارد دراپ‌این که در بخش اول مورد بحث قرار گرفت، به‌راحتی قابل جایگزینی یا گسترش است.

systemd(1), systemd.service(5), systemd.slice(5), systemd.resource-control(5), systemd.exec(5), systemd.special(7), capsule@.service(5), pam(8)

systemd 261.2