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 身份运行它,原因在这里讨论。
小智 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)
在现代 systemd Linux 发行版中,答案都有些过于复杂。解决方案是一种工具:loginctl.
在一个好的 shell 中,您甚至可以自动完成,因此可以使用Tab来查看选项和参数,它非常直观。要搜索的命令是kill-session。
如果您按 Tab 键,您会注意到每个会话都有一个 ID,但在我的情况下,它还显示了用户名和 TTY(即您键入的Ctrl+ Alt+ number)和座位。
这是它在我看来的样子,例如:
Run Code Online (Sandbox Code Playgroud)$ loginctl kill-session 10 10 -- 1000 rugk seat0 tty2
您可以浏览会话以找到正确的会话。
否则,如果这不起作用,您可以通过运行loginctl list-sessions或仅找到会话 ID loginctl。你会得到这样的东西:
Run Code Online (Sandbox Code Playgroud)$ loginctl list-sessions SESSION UID USER SEAT TTY 10 1000 rugk seat0 tty2
我想很明显第一列包含您需要传递给的会话 ID loginctl kill-session。
如果 GUI 挂起并且您需要强制终止它,这将非常有效,这似乎是您的用例。
如果您希望以更详细的方式解释这一点,这里是如果 GUI 没有响应或您无法使用键盘,您可以如何终止自己的会话。
小智 5
作为替代方案,您可以使用以下方法终止用户会话,这可以很好地注销除 root 用户之外的用户 - 例如在进行维护时。
loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session
Run Code Online (Sandbox Code Playgroud)