我为系统上的另一个用户启动了一个 shell。但是该用户没有 systemd 用户实例:
helloer@host $ sudo -u testusr bash
testusr@host $ systemctl --user status
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)
如何为 testusr 启动 dbus 或 systemd 用户实例?
我正在运行 Arch Linux、linux 5.11.8.arch1-1、dbus 1.12.20-1、systemd 247.4-2。
答案1
如果您想为另一个用户执行 systemd 操作,最简单的方法是以该用户身份登录,例如使用ssh user@localhost
,但这里是让用户切片运行当前 shell 的最小设置替代方案:
otheruser=testusr
id=$(id -u $otheruser)
sudo systemctl start user@$id
sudo -u $otheruser \
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus \
systemd-run --user --scope --shell
答案2
根据系统开发人员:
“su” 是一种临时更改用户身份和极少数其他进程凭据的工具。它不是用于打开全新登录会话的工具。新登录会话具有定义非常明确、原始的设置,不会从任何其他会话继承任何内容,但“su”uid 更改实际上并非如此:大多数执行环境都是以众多且不明显的方式继承的,例如 MAC 上下文、审计上下文、cgroup 上下文、命名空间上下文、调度、计时器粒度,
您需要通过 TTY、显示管理器以您的用户身份登录,machinectl login
或者ssh
获得一个足够干净的会话来运行 systemd 用户总线。
如果这些对您的用户都没有意义,那么您的用户可能是系统用户(不用于登录)。在这种情况下,请考虑在您的服务中使用User=
,而不是尝试在用户总线上运行它。