管理另一个用户的系统单位


10

一个用户,或者可能是root用户,可以控制另一用户的用户级别的系统服务吗?

我试过sudo -u <some user> systemctl --user restart <some service>,但它抱怨DBUS: Failed to get D-Bus connection: Connection refused

Answers:


4

我通过ssh远程登录gentoo时遇到了同样的问题。在我的情况下,这是因为缺少XDG_RUNTIME_DIRDBUS_SESSION_BUS_ADDRESS环境变量。运行以下命令,然后重试:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

如果有帮助,您可以将这些命令放入.bashrc中。我想肯定有一个比.bashrc更优雅的解决方案,但这取决于您的发行版。

这是我找到解决方案的地方。

编辑:

以root systemctl --user用户su身份登录后,我成功使用以下用户身份成功运行:

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

或使用sudo(请注意,我必须将相应的用户UID(1000)明确添加到路径'/ run / user /',但是如果从bash脚本运行它,则可以使用$ SUDO_UID代替):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
我完全有那个/etc/profile.d/dbus.sh。我猜sudo需要白名单,因为默认情况下它会清除环境。我不确定它是否只会传输当前用户的运行时目录。
mkaito 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.