如何使用 CLI 从 GUI 注销?

Ank*_*kit 52 command-line logout

我在登录时选择了 Openbox DE,系统加载 DE 需要很长时间。所以我切换到 CLI ( Ctrl+ Alt+ F1) 并重新启动了我的系统(但我想从 GUI 注销而不是重新启动整个系统)。

我的问题是,我可以在 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
Run Code Online (Sandbox Code Playgroud)

mbl*_*sco 55

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

kill -9 -1
Run Code Online (Sandbox Code Playgroud)

但是不要以 root 身份运行它,原因在这里讨论。

  • 效果很好,但为什么呢?特别是,为什么除了 init 之外的所有东西都被杀死后 LightDM 会重新启动? (3认同)
  • @CiroSantilli 功巴拿马文件六四事件法轮因为它强行杀死 (9) 任何事情都被允许。这意味着您拥有的每个流程。绝对不推荐使用 SIGKILL 来终止应用程序!使用 SIGTERM (15)。应用程序可以对这个信号做出反应并进行清理。 (2认同)

小智 28

这可以使用gnome-session-quit命令来完成。它需要一个--force选项来抑制在没有它的情况下会出现的确认对话框。

与从 X 终端仿真器运行的应用程序不同,从 TTY 结束会话需要您附加DISPLAY变量以指示哪个 X 显示器正在运行会话。因此:

DISPLAY=:0 gnome-session-quit --force
Run Code Online (Sandbox Code Playgroud)

假设您在 :0 上运行 GNOME,这是正常情况下的情况。

  • 在运行 GNOME 的 Ubuntu 12.04LTS 中,命令

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    
    Run Code Online (Sandbox Code Playgroud)

    作品。当前更新级别中不存在“--force”参数]


ter*_*don 10

请遵循takkat 的建议。该标准是Ctrl+ Alt+ Backspace

您还可以运行:

$ sudo service lightdm restart
Run Code Online (Sandbox Code Playgroud)

  • gdm 已被 lightdm 取代。此外,默认情况下禁用 ctrl+alt+backspace。 (2认同)

rug*_*ugk 8

在现代 systemd Linux 发行版中,答案都有些过于复杂。解决方案是一种工具:loginctl.

在一个好的 shell 中,您甚至可以自动完成,因此可以使用Tab来查看选项和参数,它非常直观。要搜索的命令是kill-session

如果您按 Tab 键,您会注意到每个会话都有一个 ID,但在我的情况下,它还显示了用户名和 TTY(即您键入的Ctrl+ Alt+ number)和座位。

这是它在我看来的样子,例如:

$ loginctl kill-session 10  
10  -- 1000 rugk seat0 tty2
Run Code Online (Sandbox Code Playgroud)

您可以浏览会话以找到正确的会话。

否则,如果这不起作用,您可以通过运行loginctl list-sessions或仅找到会话 ID loginctl。你会得到这样的东西:

$ loginctl list-sessions                            
SESSION  UID USER SEAT  TTY 
    10 1000 rugk seat0 tty2
Run Code Online (Sandbox Code Playgroud)

我想很明显第一列包含您需要传递给的会话 ID loginctl kill-session

如果 GUI 挂起并且您需要强制终止它,这将非常有效,这似乎是您的用例。

如果您希望以更详细的方式解释这一点,这里是如果 GUI 没有响应或您无法使用键盘,您可以如何终止自己的会话

  • 这是最有用的答案,因为`loginctl` 的工作独立于桌面环境,并且允许您终止甚至其他用户会话,如果需要,询问 sudo 密码。 (2认同)

小智 5

作为替代方案,您可以使用以下方法终止用户会话,这可以很好地注销除 root 用户之外的用户 - 例如在进行维护时。

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session
Run Code Online (Sandbox Code Playgroud)