Sudo
管理另一個使用者的 systemd 單元
一個使用者,或者可能是 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