pam _systemd задокументирован как запуск systemd --user
с помощью user@.service
.
user@.service
использует PAMName=
, поэтому он работает внутри выделенного сеанса PAM. pam_systemd
имеет специальный -случай для PAMName=systemd-user
, так что запуск user@.service
не приводит к бесконечной рекурсии или тупиковой ситуации. (Также этот процесс не помещается в новую единицу области сеанса ).
$ systemctl cat user@
# /usr/lib/systemd/system/user@.service
[Unit]
Description=User Manager for UID %i
After=systemd-user-sessions.service
[Service]
User=%i
PAMName=systemd-user
Type=notify
ExecStart=-/usr/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=yes
TasksMax=infinity
TimeoutStopSec=120s
pam _systemd на самом деле не работает с функциями, привязанными к сеансу PAM, которые различаются в зависимости от отдельного TTY. Вместо этого logind
использует ACL для предоставления вошедшим в систему пользователям доступа к определенным устройствам. Пока сеанс PAM открыт, любой процесс с этим UID сможет получить к ним доступ.
logind также имеет интерфейс DBus, который позволяет одному процессу этого пользователя открывать определенные устройства, предназначенные для сервера отображения, например. Х Windows. В нем есть код для управления переключением ТН и несколькими «местами» (группами устройств ).