Gestione delle unità di sistema di un altro utente


10

Un utente, o forse il root, può controllare i servizi di sistema a livello di utente di un altro utente?

Ho provato sudo -u <some user> systemctl --user restart <some service>, ma si lamenta dbus su: Failed to get D-Bus connection: Connection refused.

Risposte:


4

Ho avuto lo stesso problema quando ho effettuato l'accesso remoto alla mia casella di Gentoo tramite SSH. Nel mio caso ciò è dovuto alla mancanza delle variabili di ambiente XDG_RUNTIME_DIRe DBUS_SESSION_BUS_ADDRESS. Esegui i seguenti comandi e riprova:

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

Se questo aiuta, puoi inserire questi comandi nel tuo .bashrc. Immagino che ci debba essere una soluzione più elegante di .bashrc, ma dipende dalla tua distribuzione.

Qui è dove ho trovato quella soluzione.

Modificare:

loggato come root, sono riuscito a funzionare correttamente systemctl --usercome un altro utente usando sucome segue:

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

o usando sudo(nota, ho dovuto aggiungere esplicitamente l'UID (1000) dei rispettivi utenti al percorso '/ run / user /', ma se lo stai eseguendo da uno script bash puoi usare invece $ SUDO_UID):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
Ho esattamente questo dentro /etc/profile.d/dbus.sh. Immagino abbia sudobisogno di quelli autorizzati, perché cancella l'ambiente per impostazione predefinita. Non sono sicuro, tuttavia, se trasferirà solo la dir runtime dell'utente corrente.
— mkaito,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.