变得无响应/冻结后,如何重新启动Gnome-shell?


123

有时,我的gnome外壳冻结了。我可以看到(听到)后台进程正在运行(播放音乐),但是我无法在gnome中做任何事情。不Alt+ F2+ R

我可以使用以下命令切换到控制台:Ctrl+ Alt+ F1,以同一用户身份登录并执行:

gnome-shell --replace

然后返回Ctrl+ F7,但是然后,我得到一个奇怪的行为。例如,我无法编辑网络连接。我也无法注销。重新启动gnome-shell的正确方法是什么?


gnome-shell overview如果可以告诉您,gnome-shell在使用中的搜索功能时会冻结,还是在特定情况下冻结?
v2r

1
不,登录后(通常),通常在取消对接后,它会冻结。
jk_ 2014年

2
到目前为止,我还没有找到可行的解决方案。最后,我得到了这种解决方法
jk_ 2014年

如果您使用以下任何shell扩展:extensions.gnome.org,请全部停用它们并重新启动,以查看其中一个是否引起了麻烦。我使用的是gnome-shell的旧版本,由于该确切原因,出现了很多问题!(也许就这么简单?!)
v2r

1
我试图停用所有这些,仍然有问题:(
jk_

Answers:


173

更简单的方法是按Alt+ F2r然后按Enter。只要外壳可用,这将起作用。

您还可以发送SIGQUITgnome-shell仅终止shell 的进程:

killall -3 gnome-shell

其他方法使用更具破坏性的方法,该方法会关闭所有应用程序,这不是应该的。


3
+1 SIGHUP提示,但是,正确的命令不是killall -1 gnome-shell吗?至少根据man 7 signal,值SIGHUP是1。值3对应于SIGQUIT。我已将值1发送到Gnome Shell,并且按预期完全重新启动了它。
Chriki 2015年

@Chriki是的,它是sigquit,通过大多数信号会使gnome-shell进程结束。
Braiam 2015年

我在Fedora 25上尝试了此操作,killall -3 gnome-shell结果导致我杀死了所有应用程序。
comfreak

6
我希望我们也可以使用与Alt+F2和效果完全相同的终端命令r,即不消隐整个屏幕...
Sadi

我在ubuntu vm上遇到了很多gnome崩溃的问题,每次发生时我都必须重新启动VM。能够使用ssh并使用此命令可以解决该问题,谢谢您一百万。
弥敦道(Nathan F.)

32
  • 如果您想“很好地”要求gnome-shell重新启动自身,则可以使用以下命令通过dbus调用它的内部重新启动功能(假设您已将DBUS_SESSION_BUS_ADDRESSenv var设置为正确的值并以同一用户身份运行):

    dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'
    
  • 如果要运行新实例,gnome-shell --replace应该做得很好。在控制台上,您需要定义必要的环境变量,例如DISPLAYDBUS*等等。参考/proc/$gnome_shell_pid/environ

  • 如果要重新启动现有的,则将其重新启动killall -HUP gnome-shell。如果您经常这样做,那么gnome-shell可能会禁用所有扩展,强行退出您的登录或以其他非用户友好的方式运行。

我创建了一个Shell函数,用于从gnome-shell进程环境中设置DBUS_SESSION_BUS_ADDRESS(这样您就可以logout otheruser1 otheruser2askubuntu.com/a/874504/17941
sehe

3
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.Shell was not provided by any .service files没有sudo和Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11sudo 出现了错误。
Seanny123 '17

7

这是另一种解决方法:

  1. 通过按CTRL+ ALT+ 登录本地终端F1
  2. 运行命令:

    sudo kill -HUP $(pidof gnome-shell)
    
  3. 按下CTRL+ ALT+ 返回图形界面F7

PS:我使用的是lightdm而不是gdm3。


1
简单,像魅力!(至少对我而言)
加泰罗族人

6

如果已经安装了ubuntu gnome,那么您可能正在使用gnome显示管理器。在这种情况下,您应该更改为另一个TTY,例如Ctrl + Alt + F4,然后

sudo service gdm restart

我最近也写了一篇关于这种情况的文章:

帮助,我的Linux桌面挂起!

好运!


5
请注意,我是在同一TTY上执行的,这会杀死我当前的会话
。– RousseauAlexandre

这完全搞砸了当前会话:它开始闪烁,然后进入必杀技..必须重新启动。
Nik O'Lai

5

由于您不满意gnome-shell --replace,因此您可能要尝试重新启动显示管理器本身。

sudo service lightdm restart

我认为这将杀死您正在运行的其他进程。另请参阅http://worldofgnome.org/how-to-restart-gnome-shell-when-freezes-if-ever/

如果您认真地尝试使每次冻结,请启用https://www.kernel.org/doc/Documentation/admin-guide/sysrq.rst中提到的SysRq ,然后<alt><sysrq/print_screen_key><k>杀死其中的所有内容。屏幕。


3
重新启动lighdm是可行的,但是我要避免这种情况,因为我必须从头开始重新打开所有内容。特别是如果我知道这是Gnome-shell的问题,然后重新启动它几乎可以正常工作。
jk_

我不知道其他方法来重新启动gnome shell。您尝试过是否DISPLAY=:7 gnome-shell --replace有效?
Jay Aurabind 2014年

1
不,不是,我使用display,当wshow的显示不同于:0时。如果我使用了错误的显示,则会收到错误消息。
jk_ 2014年

抱歉,我没办法了。您可能应该在gnome用户/开发人员邮件列表中询问。首先弄清楚为什么您有异常,alt-f2-r或者gnome-shell --replace什么时候是侏儒的推荐方式。
杰·奥拉宾德

我也是。我什至都遵循此链接设置了更多的ENV变量,但是当从其他终端重新启动gnome-shell时,我仍然无法编辑网络连接。最后,我得到了这个技巧
jk_

2

我有时确实会遇到您所描述的问题,而我的解决方案是:

Ctrl+ Alt+ F1,登录为同一用户,并执行:

sudo pkill -9 ^gnome-shell

然后返回Ctrl+ Alt+F7

如果这是正确的方法,我不知道。对我来说,它每次都能工作。


3
这将杀死所有用户的gnome-shell实例,这在多用户方案中可能不是您想要执行的操作。通常,您只需要杀死自己的(pkill -HUP gnome-shell)
Steeve McCauley,2014年


很棒,对我有用...!你救了我的一天。赞赏。
NomanJaved

2

重新启动X

  • 首先使用以下命令找到您的Ubuntu使用哪个显示管理器:

    cat /etc/X11/default-display-manager
    

    就我而言 /usr/sbin/gdm3

    从内部X或外部X

  • 对于方法1到4,通过使用w命令找出正在使用的显示。

    w
    

    答案可能是例如tty3,(因此,我(ack的)“返回到我的显示”键是Ctrl + Alt + F3

方法

  1. Ctrl + Alt + F1退出,而Ctrl + Alt + F3退回
  2. sudo /etc/init.d/gdm3 restart
  3. systemctl restart gdm.service
  4. sudo service gdm3 restart
  5. dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'
  6. 一种简单的方法是按Alt + F2,然后键入,r然后按Enter。只要外壳不无法使用,就可以使用。

方法5从逐字解除korc的答案,从6 Braiam的答案。窃不违反这里的规则,但绝对不酷。您真正需要做的就是通过用引号将其表明不是您自己的作品,并通过包括到源帖子的链接和到作者的个人资料页面的链接来注明出处。有关更多详细信息,请参见此博客文章:必需的归因
wjandrea

1
  1. 按Ctrl + Alt + F2切换到终端窗口。有时,这是不可能的。

  2. 按Alt + SysRq + R获取键盘。

  3. 如果在失败之前按Ctrl + Alt + F2,请立即重试。

  4. 按Alt + SysRq + E终止所有进程。

  5. 按Alt + SysRq + I终止所有进程。

  6. 按Alt + SysRq + S同步磁盘。

  7. 等待确定或完成消息。如果您没有看到任何消息,请查看您的HDD指示灯以查看Sync是否有所作为。

  8. 按Alt + SysRq + U卸载所有磁盘驱动器。

  9. 等待确定或完成消息。如果您在15到30秒内没有看到任何消息,请假定磁盘已卸载(或无法卸载),然后继续。

  10. 按Alt + SysRq + B重新启动。


0

kill -15 gnome-shell不适用于我,但kill -9可以。我认为这是因为kill -9触发了segfault,而segfault则触发了gnome-shell重新启动自身,而kill -15没有。


2
kill -9不会触发段错误。它发送SIGKILL,这是不可捕获的信号,对此信号唯一的操作是立即退出。它应该只用于当应用程序并不SIGTERM,这是15回应
穆鲁

pkill -11 gnome-shell会触发段错误,因为这实际上就是信号11所做的。顺便说一句,kill需要一个进程ID,而不是一个进程名。你是说pkill还是killall
TSJNachos117
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.