有时,我的GNOME Shell冻结了。我可以看到(听到)后台进程正在运行(播放音乐),但是我无法在GNOME中执行任何操作。没有Alt + F2,然后按R和Enter。

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

gnome-shell --replace


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

评论

在gnome-shell概述中使用搜索功能时,gnome-shell是否冻结,或者在特定情况下(如果可以告诉您)?

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

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

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

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

#1 楼

更简单的方法是按Alt + F2,输入r,然后按Enter。只要外壳可用,它就可以工作。

还可以将SIGQUIT发送到gnome-shell进程,该进程将仅终止外壳:

killall -3 gnome-shell


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

评论


+1是SIGHUP技巧,但是,正确的命令不是killall -1 gnome-shell吗?至少根据man 7信号,SIGHUP的值为1。值3对应于SIGQUIT。我已将值1发送到Gnome Shell,它已按预期完全重新启动。

–Chriki
2015年4月29日在8:24

我在Fedora 25上进行了尝试,使用killall -3 gnome-shell导致了我的所有应用程序被杀死。

–comfreak
17年5月26日在16:08

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

– Sadi
17年6月11日在14:04

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

– Nathan F.
18年4月14日在21:38

killall -3 gnome-shell非常适合Ubuntu 18.04

–user1133275
19年1月31日在17:27

#2 楼



如果您想“很好地”要求gnome-shell重新启动自身,则可以使用以下命令通过dbus调用它的内部重新启动功能(假设您将DBUS_SESSION_BUS_ADDRESS env 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(这样您就可以注销otheruser1 otheruser2)askubuntu.com/a/874504/17941

–sehe
17年1月21日在13:25

收到错误错误org.freedesktop.DBus.Error.ServiceUnknown:没有sudo的任何.service文件都未提供名称org.gnome.Shell,并且无法打开与“会话”消息总线的连接:无法自动启动dbus守护程序没有带有sudo的X11的$ DISPLAY。

– Seanny123
17年11月9日在16:24

如果没有gnome-shell运行(即它死了)怎么办?一个人怎么会得到DISPLAY和其他变量

– Dan M.
19/12/20在15:50

这次真是万分感谢!

–seanbreeden
20-10-19在21:26

#3 楼

这是一个不同的解决方法:


通过按CTRL + ALT + F1登录本地终端。

运行命令:

sudo kill -HUP $(pidof gnome-shell)


通过按CTRL + ALT + F7返回图形界面。

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

评论


简单,而且像魅力! (至少对于我来说)

–加泰
18年5月10日在12:51

尽管这确实成功地重启了gnome-shell;我发现有些程序-可能是那些与GNOME集成程度较差的程序-无法生存。例如:Firefox,Thunderbird,VirtualBox VM。可以生存的程序示例:“文件”,Terminal,ImageViewer。理想情况下,有一种方法可以在不损害任何正在运行的程序的情况下重新启动gnome-shell(Ubuntu 19.10)

–sxc731
19年11月20日在10:28

#4 楼

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

我最近也写了一篇有关这种情况的文章:
帮助,我的Linux桌面挂起了! />祝你好运!

评论


请注意,我是在同一TTY上执行的,这会终止当前会话。

–卢梭·亚历山大(RousseauAlexandre)
18-10-24在12:51

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

–尼克·奥莱(Nik O'Lai)
19-10-11在18:11

#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>杀死屏幕上的所有内容。

评论


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

– jk_
2014年4月25日在17:29

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

–杰伊·奥拉宾德(Jay Aurabind)
2014年4月25日在17:43

不,不是,当w显示的显示与:0不同时,我使用display。如果我使用了错误的显示,则会收到错误消息。

– jk_
2014-4-26 9:07



抱歉,我没办法了。您可能应该在gnome用户/开发人员邮件列表中询问。首先弄清楚为什么alt-f2-r或gnome-shell --replace是异常,这是gnome的推荐方法。

–杰伊·奥拉宾德(Jay Aurabind)
2014年4月26日9:45



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

– jk_
2014年4月29日12:38



#6 楼

重新启动X



首先使用以下命令查找您的Ubuntu使用的显示管理器:

cat /etc/X11/default-display-manager


在我的如果是/usr/sbin/gdm3,请使用Inside X或OUTSIDE X



对于方法1至4,请使用w命令找出正在使用的显示。 br />
w


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


方法


Ctrl + Alt + F1退出,而Ctrl + Alt + F3退回一次
sudo /etc/init.d/gdm3 restart
systemctl restart gdm.service
sudo service gdm3 restart
dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'
一种简单的方法是按Alt + F2,然后键入r,然后按Enter。这将在不损坏外壳的情况下起作用。


评论


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

– wjandrea
19/09/1在18:31



#7 楼

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

Ctrl + Alt + F1,以同一用户身份登录并执行:

sudo pkill -9 ^gnome-shell


然后按Ctrl + Alt + F7返回。

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

评论


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

– Steve McCauley
2014年8月4日13:37

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

– NomanJaved
18年5月18日在19:13

#8 楼


按Ctrl + Alt + F2切换到终端窗口。有时,这是不可能的。
按Alt + SysRq + R来获取键盘。
如果在失败之前按Ctrl + Alt + F2,请立即重试。
按Alt + SysRq + E终止所有进程。
按Alt + SysRq + I终止所有进程。
按Alt + SysRq + S同步磁盘。
等待OK(确定)或Done(完成)消息。如果看不到消息,请查看HDD指示灯以查看同步是否有所帮助。
按Alt + SysRq + U卸载所有磁盘驱动器。
等待OK(确定)或Done(完成)消息。如果您在15到30秒钟内没有看到任何消息,请假设已卸下磁盘(或无法卸下磁盘)并继续。
按Alt + SysRq + B重启。


#9 楼

kill -15 gnome-shell对我不起作用,但kill -9对我有用。我认为这是因为kill -9触发了segfault,从而触发了gnome-shell重新启动自身,而kill -15却没有。

评论


kill -9不会触发段错误。它发送SIGKILL,这是一个不可捕获的信号,对此,唯一的动作是立即退出。仅在应用程序不响应SIGTERM(即15)时才应使用它。

–muru
16年1月17日在21:28

pkill -11 gnome-shell会触发一个段错误,因为这实际上就是信号11所做的。顺便说一句,kill需要一个进程ID,而不是进程名。你是说杀人还是杀人?

– TSJNachos117
17-10-10在15:42