一个用户或 root 用户可以控制另一个用户的用户级 systemd 服务吗?
我试过了sudo -u <some user> systemctl --user restart <some service>,但它抱怨 dbus: Failed to get D-Bus connection: Connection refused。
当我通过 ssh 远程登录到我的 gentoo box 时,我遇到了同样的问题。就我而言,这是因为缺少XDG_RUNTIME_DIR和DBUS_SESSION_BUS_ADDRESS环境变量。运行以下命令并重试:
export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
Run Code Online (Sandbox Code Playgroud)
如果这有帮助,您可以将这些命令放入 .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
Run Code Online (Sandbox Code Playgroud)
或使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2973 次 |
| 最近记录: |