linux - logs - ¿Puedo controlar un usuario systemd usando ''systemctl--user'' después de sudo su-myuser?
systemctl linux (1)
Encontré la respuesta en otro sitio con más búsquedas usando diferentes términos.
Las soluciones necesarias fueron proporcionar al shell información para alcanzar el DBUS correcto para el usuario.
Al agregar las siguientes variables de entorno al shell antes de ejecutar systemctl --user
, se elimina el problema DBUS y systemctl funciona correctamente.
export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
Para garantizar que DBUS_SESSION_BUS_ADDRESS esté disponible en el shell sudo, agregué las variables de entorno a ~ / .bash_profile del userid de destino. Esto requiere que se sudo su - myuser
un shell de inicio de sesión ( sudo su - myuser
o sudo -l myuser
) para crear el entorno correcto.
Alternativamente, agregue la creación de las variables de entorno a ~ / .bashrc (o equivalente para otros shells). El entorno se establecerá de nuevo para todas las creaciones de shell.
Tengo un servicio que quiero comenzar con el inicio del sistema. He creado una definición ap @ .service como plantilla, porque puede haber muchos casos.
Definido en la raíz systemd, esto funciona bien, e inicia y detiene el servicio con el sistema. La instancia de servicio se instala con systemctl enable ap@inst1
como se esperaría. Root también puede iniciar y detener el servicio sin problemas. El servicio se ejecuta en su propia cuenta (myuser), no root, controlada por User = myuser en la plantilla ap @ .service.
Pero quiero que el usuario ''myuser'' pueda iniciar y detener su propio servicio, sin comprometer la seguridad del sistema.
Cambié a usar un sistema de usuario y habilité la persistencia con loginctl enable-linger myuser
. Entonces habilito el servicio definido en el directorio ~ myuser / .config / systemd / user. El servicio ahora comienza y se detiene limpiamente con el sistema, tal como fue diseñado. Si inicio sesión en un terminal como ''myuser'', systemctl --user start ap@inst1
y systemctl --user stop ap@inst1
funcionarán perfectamente.
Sin embargo, si inicio sesión como un usuario diferente (usuario2) y sudo su - myuser
en un terminal, entonces los comandos systemctl --user
ahora fallan con el mensaje de error "Error al obtener la conexión D-Bus: no existe tal archivo o directorio".
¿Cómo systemctl --user
para que funcione después de un comando sudo su - myuser
para cambiar de usuario?