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.

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.