あるユーザー(またはルート)が別のユーザーのユーザーレベルのシステムサービスを制御できますか?
私はこれを試しましたが、sudo -u <some user> systemctl --user restart <some service>
dbus:について文句を言いますFailed to get D-Bus connection: Connection refused
。
ベストアンサー1
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