如何使用 CLI 从 GUI 注销?

如何使用 CLI 从 GUI 注销?

我在登录时选择了 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

要结束所有用户进程并返回到登录屏幕,您可以使用:

kill -9 -1

但是不要以 root 身份运行,原因已讨论过这里

答案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

相关内容