我使用 systemd 服务单元启动窗口管理器(如下本教程)。登录后,tty1
执行以下命令.zlogin
(我使用 ZSH 作为登录 shell):
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
- 这对我来说没有任何这样的需要。
另请注意,获取会话 ID 的方法有多种。在这个例子中,我只是直接从loginctl
它本身获取它。还有$XDG_SESSION_ID
(正如你所写的)和/proc/self/sessionid
.