Logout user with systemd

logoutsystemd

I start my window manager with systemd service units (following this tutorial).
After I log in at tty1 the following gets executed in .zlogin (I'm using ZSH as a login shell):

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

Systemd starts a X server, a window manager, … through service units.

The problem starts when I want to logout.
Should I simply execute kill $MANAGERPID to kill the systemd daemon ?
It seems much cleaner to do a loginctl terminate-session $XDG_SESSION_ID but this command requires further privileges.

Here's the question: What is the preferred way to log out with the setup described above ?

Best Answer

This is what I use to log out from using xmonad (after using wmctrl to close all open windows):

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

I'm not sure why you need further privileges for loginctl terminate-session - this works for me without any such need.

Also note that there are different ways to obtain the session ID. In this example I simply take it directly from loginctl itself. There's also $XDG_SESSION_ID (as you wrote) and /proc/self/sessionid.

Related Question