Cerrar sesión de usuario con systemd

Cerrar sesión de usuario con systemd

Inicio mi administrador de ventanas con unidades de servicio systemd (siguiendoeste tutorial). Después de iniciar sesión en tty1lo siguiente, se ejecuta .zlogin(estoy usando ZSH como shell de inicio de sesión):

if [[ -z "$DISPLAY" && $(tty) = /dev/tty1 ]]; then
  nohup systemd --user > ~/.xlog 2>&1 &
  disown %2
  logout
fi

Systemd inicia un servidor X, un administrador de ventanas,… a través de unidades de servicio.

El problema comienza cuando quiero cerrar sesión.
¿Debo simplemente ejecutar kill $MANAGERPIDpara matar el demonio systemd?
Parece mucho más limpio hacerlo, loginctl terminate-session $XDG_SESSION_IDpero este comando requiere más privilegios.

Aquí está la pregunta: ¿Cuál es la forma preferida de cerrar sesión con la configuración descrita anteriormente?

Respuesta1

Esto es lo que uso para cerrar sesión en xmonad (después de usarlo wmctrlpara cerrar todas las ventanas abiertas):

session=`loginctl session-status | head -n 1 | awk '{print $1}'`
loginctl terminate-session $session

No estoy seguro de por qué necesita más privilegios loginctl terminate-session; esto funciona para mí sin tal necesidad.

Tenga en cuenta también que existen diferentes formas de obtener el ID de sesión. En este ejemplo simplemente lo tomo directamente de loginctlsí mismo. También hay $XDG_SESSION_ID(como escribiste) y /proc/self/sessionid.

información relacionada