Administrar las unidades systemd de otro usuario

10

¿Puede un usuario, o quizás root, controlar los servicios systemd de nivel de usuario de otro usuario?

Lo he intentado sudo -u <some user> systemctl --user restart <some service>, pero se queja dbus sobre: Failed to get D-Bus connection: Connection refused.

mkaito
fuente

Respuestas:

4

Tuve el mismo problema cuando inicié sesión de forma remota en mi caja de gentoo a través de ssh. En mi caso esto se debía a que los XDG_RUNTIME_DIRy DBUS_SESSION_BUS_ADDRESSvariables de entorno faltaban. Ejecute los siguientes comandos e intente nuevamente:

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

Si esto ayuda, puede poner esos comandos en su .bashrc. Supongo que debe haber una solución más elegante que .bashrc, pero eso depende de su distribución.

Aquí es donde encontré esa solución.

Editar:

conectado como root, logré ejecutarme con éxito systemctl --usercomo otro usuario usando sulo siguiente:

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, tuve que agregar explícitamente el UID de usuario respectivo (1000) a la ruta '/ run / user /', pero si lo está ejecutando desde un script bash, puede usar $ SUDO_UID en su lugar):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status
Descongelar
fuente
1
Tengo exactamente eso adentro /etc/profile.d/dbus.sh. Supongo que sudonecesita esas listas blancas, porque borra el entorno de forma predeterminada. Sin embargo, no estoy seguro de si solo transferirá el directorio de tiempo de ejecución del usuario actual.
mkaito