我遇到了类似的问题这里,我的仪表板和顶部面板无法加载。
当尝试从终端注销时(因为没有顶部菜单栏可用)但出现此错误:
~$ 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
?
这应该会停止显示管理器,有效地将您注销,重新启动 lightdm,并且您应该立即进入登录屏幕。
答案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 的工作方式。可能它们都是这样工作的。