Raspbian-systemd 用户实例不起作用

Raspbian-systemd 用户实例不起作用

我正在 RaspberryPi 3 上设置一个小型服务器,并为无根 ​​docker 实例添加了一个新用户(“服务器”)。但我面临的问题是,我无法让 systemd 的用户实例正常工作。它失败并出现以下错误:

systemctl --user status :
   Failed to connect to bus: no permission
systemd --user --test :
   [...] failed to open directory /home/pi/.config [...]
systemd --user :
   Failed to create /user.slice/user-1000.slice/session-1.scope/init.scope control group: Permission denied
   Failed to allocate manager object: Permission denied

如您所见,即使我(通过 su)以“服务器”身份登录,其中一个错误中也会提到用户“pi”。

所以我的问题是:如何让 systemd 正常工作以便我可以设置 docker?

uname -a: Linux Pi-Server 5.10.17-v7+ #1421 SMP 2021 年 5 月 27 日星期四 13:59:01 BST armv7l GNU/Linux
创建用户的命令:sudo useradd -m -d /home/server server

答案1

它比你想象的要棘手得多。

首先,su它不会真正“将您作为其他用户登录”。即使您使用-,它仍然只是Start the shell as a login shell with an environment similar to a real login。例如,如果您运行loginctl,则在执行时不会看到正在创建的会话su

话虽如此,您想要实现的目标还是有可能的。您可以运行loginctl enable-linger server以使用户实例在启动时启动。

然后,为了systemctl --user工作su server,你需要设置两个环境变量(如果你使用的话,将它们列入白名单-):

XDG_RUNTIME_DIR=/run/user/$(id -u server) DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u server)/bus su server

XDG_RUNTIME_DIR=/run/user/$(id -u server) DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u server)/bus su -w XDG_RUNTIME_DIR,DBUS_SESSION_BUS_ADDRESS - server

答案2

正如 Tom Yan 所说,su不会创建新会话。他的解决方案足以解决我的问题,但我想提一下我在搜索 Docker 文档后发现的另一种方法:
如果您使用,您应该能够启动新会话ssh server@localhost

相关内容