为什么在“su - user”之后没有创建 $XDG_RUNTIME_DIR (/run/user/$UID) 目录?:
administrateur@localhost:~$ su - test
Password:
test@localhost:~$ systemctl --user
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
test@localhost:~$ ls /run/user/$UID
ls: cannot access '/run/user/1004': No such file or directory
test@localhost:~$ groups
test
test@localhost:~$
logout
administrateur@localhost:~$
EDIT0:做 asudo loginctl enable-linger test
保留/run/user/$UID
目录,但XDG_RUNTIME_DIR
变量仍未定义:
administrateur@localhost:~$ sudo loginctl enable-linger test
administrateur@localhost:~$ sudo su - test
test@localhost:~$ ls /run/user/$UID/bus
/run/user/1004/bus
test@localhost:~$ echo $XDG_RUNTIME_DIR
test@localhost:~$
logout
administrateur@localhost:~$
因为它的存在(以及您尝试访问的实际“systemd --user”进程的存在)与至少一个 systemd-logind登录会话相关联,并且故意不允许直接从在现有会话中,无论是通过
su
还是其他工具。machinectl shell test@
将从服务生成一个 shell(类似于从“agetty”服务生成常规登录的方式),并且其 PAM 配置包括 pam_systemd,因此它将创建自己的会话。将用户标记为“逗留模式”
loginctl enable-linger test
将导致 systemd-logind 在启动时创建运行时目录(并启动用户的“systemd --user”实例)并永久保留它,无论会话计数如何。从 systemd v239 或更高版本开始,也可以通过以下方式手动启动用户的服务管理器
user@<uid>.service
——运行时目录将自动设置为依赖项(在早期版本中,它与 logind 的内部联系在一起)。