Выйти из системы с помощью systemd

Выйти из системы с помощью systemd

Я запускаю свой оконный менеджер с помощью сервисных модулей systemd (следуяэтот урок). После того, как я вхожу в систему, tty1выполняется следующее .zlogin(я использую ZSH в качестве оболочки входа):

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

Systemd запускает X-сервер, оконный менеджер, ... через сервисные модули.

Проблема начинается, когда я хочу выйти из системы.
Должен ли я просто выполнить команду kill $MANAGERPID, чтобы убить демон systemd?
Кажется, гораздо чище сделать a, loginctl terminate-session $XDG_SESSION_IDно эта команда требует дополнительных привилегий.

Вот вопрос: какой предпочтительный способ выхода из системы при описанной выше настройке?

решение1

Вот что я использую для выхода из системы с помощью xmonad (после wmctrlзакрытия всех открытых окон):

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

Я не совсем понимаю, зачем вам нужны дополнительные привилегии loginctl terminate-session— у меня все работает без такой необходимости.

Также обратите внимание, что есть разные способы получить идентификатор сеанса. В этом примере я просто беру его непосредственно из loginctlнего самого. Также есть $XDG_SESSION_ID(как вы написали) и /proc/self/sessionid.

Связанный контент