问题描述
有时候,我的gnome-shell冻结了。我可以看到(听到)后台进程正常工作(播放音乐),但我无法在gnome中做任何事情。无Alt
+ F2
+ R
。
我可以使用以下命令切换到控制台:Ctrl
+ Alt
+ F1
,以同一用户身份登录并执行:
gnome-shell --replace
并返回Ctrl
+ F7
,但接着,我得到一个奇怪的行为。例如,我无法编辑网络连接。我也无法退出。重启gnome-shell的正确方法是什么?
最佳解决方法
更简单的方法是按Alt
+ F2
,键入”r”,然后键入Enter
。这将工作很长时间shell不可用。
您也可以将SIGQUIT
发送到gnome-shell
进程,该进程将仅终止shell:
killall -3 gnome-shell
其他方法使用更具破坏性的方法,关闭所有应用程序,这不应该。
次佳解决方法
-
如果你想让”nicely”到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
应该可以正常运行。在控制台上,您需要定义必要的环境变量,如DISPLAY
,DBUS*
等。请参阅/proc/$gnome_shell_pid/environ
-
如果要重新启动现有的,则
killall -HUP gnome-shell
将执行此操作。如果你经常这样做,gnome-shell可能会禁用所有扩展,强制注销你或以non-userfriendly方式行事。
第三种解决方法
由于您对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>
杀死屏幕上的任何内容。
第四种方法
我遇到了同样的问题,我发现了一个不同的解决方法:
-
按CTRL + ALT + F1登录本地终端
-
运行命令:sudo kill -HUP`pidof gnome-shell`
-
按CTRL + ALT + F7返回图形界面
PS:我使用的是lightdm而不是gdm3。
第五种方法
如果您已经安装了ubuntu gnome,那么您可能正在使用gnome显示管理器。在这种情况下,您应该更改为另一个TTY,如Ctrl + Alt + F4然后
sudo service gdm restart
我最近还写了一篇关于这种情况的文章:
好运!
第六种方法
我有时会遇到和你描述的问题相同的问题,我的解决方案是:
Ctrl
+ Alt
+ F1
,以同一用户身份登录并执行:
sudo pkill -9 ^gnome-shell
然后用Ctrl
+ Alt
+ F7
返回
如果这是正确的方式,我不知道。对我来说,它每次都有效。
第七种方法
重启X.
-
首先使用以下命令查找Ubuntu正在使用的显示管理器:
cat /etc/X11/default-display-manager
就我而言,它是
/usr/sbin/gdm3
从X内部或外部X
对于方法1到4
-
使用
w
命令找出您正在使用的显示器。w
答案可能是例如
tty3
,(因此我的(ack’s)“返回我的显示器”键是Ctl + Alt + F3
方法1
‣Ctl+ Alt + F1退出,Ctl + 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键。这将工作很长时间shell不可用。