![如何使用 CLI 从 GUI 注销?](https://linux22.com/image/1039248/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20CLI%20%E4%BB%8E%20GUI%20%E6%B3%A8%E9%94%80%EF%BC%9F.png)
我在登录时选择了 Openbox DE,系统花了很长时间来加载 DE。所以我切换到 CLI ( ++ Ctrl)并重新启动系统(但我想从 GUI 注销而不是重新启动整个系统)。AltF1
我的问题是,我可以在 CLI 上发出一些命令来将我从 GUI 中注销,以便我可以选择不同的 DE。(我不想每次 DE 挂起时都重新启动系统。)
$ DISPLAY=:0 gnome-session-quit --force
** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
答案1
答案2
这可以使用命令来完成gnome-session-quit
。它需要一个--force
选项来隐藏在没有它的情况下会出现的确认对话框。
与从 X 终端仿真器运行的应用程序不同,从 TTY 结束会话需要您附加变量DISPLAY
以指示哪个 X 显示器正在运行该会话。因此:
DISPLAY=:0 gnome-session-quit --force
假设您在 :0 上运行 GNOME,这是正常情况下的情况。
在运行 GNOME 的 Ubuntu 12.04LTS 中,命令
"DISPLAY=:0 gnome-session-quit --logout --no-prompt"
有效。当前更新级别中不存在“--force”参数]
答案3
在现代 systemd Linux 发行版中,答案都有点太复杂了。解决方案是一工具:loginctl
。
在好的 shell 中,你甚至可以使用自动完成功能,因此可以利用它Tab来查看选项和参数,这非常直观。要搜索的命令是kill-session
。
如果您按标签,您会注意到每个会话都有一个 ID,但在我的情况下,它还显示用户名和 TTY(即您输入的Ctrl++ )和座位。Altnumber
在我看来情况如下,例如:
$ loginctl kill-session 10 10 -- 1000 rugk seat0 tty2
您可以通过会话选项卡来找到正确的会话。
否则,如果这不起作用loginctl list-sessions
你可以通过运行或 来找到会话 ID loginctl
。你将得到如下结果:
$ loginctl list-sessions SESSION UID USER SEAT TTY 10 1000 rugk seat0 tty2
我想很明显第一列包含您需要传递给的会话 ID loginctl kill-session
。
如果 GUI 挂起并且您需要强制终止它,则此方法非常有效,这似乎是您的用例。
如果你想用更详细的方式解释这一点如果 GUI 没有响应或者你无法使用键盘,你可以按照以下方法终止自己的会话。
答案4
另外,您可以使用以下命令终止用户会话,例如在进行维护时,可以很好地注销除 root 用户之外的用户。
loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session