web-dev-qa-db-ja.com

他のユーザーのsystemdユニットを管理する

あるユーザー、またはrootは、別のユーザーのユーザーレベルのシステムサービスを制御できますか?

私はもう試した Sudo -u <some user> systemctl --user restart <some service>、しかしそれはdbusについて不平を言う:Failed to get D-Bus connection: Connection refused

10
mkaito

私のgentooボックスにssh経由でリモートでログインしたときにも同じ問題が発生しました。私の場合、これは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としてログインすると、次のようにsuを使用して別のユーザーとしてsystemctl --userを正常に実行できました。

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
4
Thawn