Gérer les unités systemd d'un autre utilisateur

10

Un utilisateur, ou peut-être root, peut-il contrôler les services systemd d'un autre utilisateur?

Je l' ai essayé sudo -u <some user> systemctl --user restart <some service>, mais il se plaint dbus sur: Failed to get D-Bus connection: Connection refused.

mkaito
la source

Réponses:

4

J'ai eu le même problème lorsque je me suis connecté à distance à ma gentoo box via ssh. Dans mon cas, c'était parce que les variables XDG_RUNTIME_DIRet l' DBUS_SESSION_BUS_ADDRESSenvironnement étaient manquantes. Exécutez les commandes suivantes et réessayez:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

Si cela vous aide, vous pouvez mettre ces commandes dans votre .bashrc. Je suppose qu'il doit y avoir une solution plus élégante que .bashrc mais cela dépend de votre distribution.

Voici où j'ai trouvé cette solution.

Éditer:

connecté en tant que root, j'ai réussi à exécuter avec succès un systemctl --userautre utilisateur en utilisant sucomme suit:

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

ou en utilisant sudo(remarque, j'ai dû ajouter explicitement l'UID des utilisateurs respectifs (1000) au chemin '/ run / user /', mais si vous l'exécutez à partir d'un script bash, vous pouvez utiliser $ SUDO_UID à la place):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status
Dégel
la source
1
J'ai exactement ça /etc/profile.d/dbus.sh. J'imagine qu'il a sudobesoin de ces listes blanches, car il efface l'environnement par défaut. Je ne sais pas si cela transférera simplement le répertoire d'exécution de l'utilisateur actuel.
mkaito