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.