Sudo

管理另一個使用者的 systemd 單元

  • January 4, 2022

一個使用者,或者可能是 root,可以控制另一個使用者的使用者級 systemd 服務嗎?

我試過sudo -u <some user> systemctl --user restart <some service>了,但它抱怨 dbus: Failed to get D-Bus connection: Connection refused

當我通過 ssh 遠端登錄到我的 gentoo 盒子時,我遇到了同樣的問題。就我而言,這是因為缺少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"

如果這有幫助,您可以將這些命令放入您的 .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

引用自:https://unix.stackexchange.com/questions/245768