Ubuntu 16.04 - 当 gnome 生气时从终端注销

Ubuntu 16.04 - 当 gnome 生气时从终端注销

我遇到了类似的问题这里,我的仪表板和顶部面板无法加载。

当尝试从终端注销时(因为没有顶部菜单栏可用)但出现此错误:

~$ gnome-session-quit

** (gnome-session-quit:6288): WARNING **: Failed to call logout: GDBus.Error:org.gnome.SessionManager.NotInRunning: Logout interface is only available during the Running phase

发生这种情况时,除了重新启动计算机之外,还有其他方法可以退出吗?

答案1

关于什么 sudo service lightdm restart

这应该会停止显示管理器,有效地将您注销,重新启动 lig​​htdm,并且您应该立即进入登录屏幕。

答案2

虽然不太优雅,但你可以尝试一下:

ps -wweo pid,args | grep gnome | grep -v grep

这将为您提供至少一行输出。每行将是进程 ID 号,后跟一个空格,后跟启动该进程的准确完整命令字符串。您可能可以分辨出哪个(假设有多个)进程是 gnome 会话,然后通过以下命令将其终止:

kill NUMBER

或者如果它抱怨权限(但我不认为它会)

sudo kill NUMBER

其中 NUMBER 是 ps 命令显示的进程 ID 号。

如果这种情况经常发生,您可以更改第二个 grep,使其在整个命令字符串中查找精确匹配项,以便仅显示要终止的一个进程。这将是输出中对应于 gnome 会话的行上进程 ID 号后面的字符串

ps -wweo pid,args | grep gnome | grep -v grep

我无法告诉你它会是什么,因为我不使用 gnome,而且我不确定每个 gnome 系统都会使用完全相同的字符串。可能有一些选项会有所不同。将该字符串放入提取进程号并终止它的脚本中。如下所示:

#!/bin/bash
PID_to_kill=$(ps -wweo pid,args | grep "ENTIRE COMMAND STRING GNOME IS STARTED WITH" | grep -v grep | cut -d' ' -f1)    
kill $PID_to_kill

通过使用整个命令字符串,您可以消除终止某些您真正不想终止的进程的可能性,仅仅因为启动它的命令字符串中包含“gnome”。

将脚本命名为容易记住的名字,例如“killgnome”。将其放在路径上的目录中。“/usr/local/bin/”是一个相当常规的位置。使其可执行。通过在终端或运行框中输入其名称来调用它。

如果您有“显示管理器”(GUI 登录对话框),这将注销您的登录,并带您返回。如果您没有运行默认设置,并且没有使用显示管理器(它们实际上完全没有必要),它还会停止 X,并为您留下登录提示。或者至少这是 Openbox 的工作方式。可能它们都是这样工作的。

相关内容