
Я запускаю свой оконный менеджер с помощью сервисных модулей 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
.