如何在Ubuntu中重启冻结的屏幕而不丢失任何打开的窗口?


12

我有一台运行Ubuntu 12.04 LTS的设备的屏幕冻结。一般来说,我干脆跳上一个可用TTY,即Ctrl- Alt- F1和执行的命令/etc/init.d/lightdm restartservice lightdm restart。但是,这杀死了我打开的所有内容。如何避免这种情况?


1
您无法实现。它是lightdm,它在x系统中显示/管理窗口。
苹果II

这也会杀死您打开的所有内容,但是从前ctrl-alt-backspace会重新启动X。这比切换到TTY,登录并要求X重新启动本身要容易得多。我不确定它是否仍然有效。

@Douglas B. Staple-它不适用于Ubuntu 12.04 LTS。不知道它是否仍然可以与其他发行版一起使用,或者是否特定于Unity。
PeanutsMonkey

在运行时,可能有一些替换窗口管理器的方法。(至少可以使用GNOME-Shell或i3窗口管理器,所以可能有某种方法)。
FSMaxB

@FSMaxB-您能否详细说明如何使用Gnome-Shell或i3窗口管理器来实现?
PeanutsMonkey

Answers:


12

免责声明:根据布伦登(Brenden)的评论,这可能已过时,并且不适用于较新版本的Ubuntu。另外,请做好准备,以免丢失打开的窗口。

现在,我为Unity获得了它(我只是用Unity替换了我的GNOME shell,而没有注销或关闭Windows):

  1. 转到tty1 [Ctrl] + [Alt] + [F1]
  2. 键入DISPLAY=:0以便程序知道在哪个端口上查找X-Server
  3. export DISPLAY
  4. unity --replacegnome-shell --replace(您也可以将Unity替换为GNOME-Shell或将GNOME-Shell替换为Unity)

仅当不冻结X-Server或GNOME,而仅冻结Unity或GNOME-Shell时,此方法才有效。

工作原理:程序与X-Server之间用于显示其UI的通信正在通过网络套接字进行。这通常在“ localhost:0”短于“:0”的位置。通过设置DISPLAY变量,程序知道在哪里找到与之通信的X服务器,因此即使程序在tty1上运行,程序也会显示在tty7的X服务器上。

窗口的内容由X服务器管理,而窗口的位置和边框则由集成在一个或GNOM-shell中的窗口管理器管理,因此有一种方法可以只替换它们而不重新启动X-Server上的应用程序。服务器。

PS:我只是在描述我的理解,因此,如果我在某些方面有误,请编辑并纠正我。

编辑: 对于GNOME-Shell,还有另一种重新启动它的方法。更改为tty后,只需键入pkill -HUP gnome-shell,我不知道Unity是否有类似的东西。


那就像奇迹一样。实际上,它今天救了我。非常感谢。如果您能详细说明步骤1之外的每个步骤,将不胜感激。我不太了解幕后的情况。
PeanutsMonkey

感谢您的回答!注意unity --help表示:“-replace Run unity /!\这是为了与其他桌面界面兼容,其行为与不使用--replace运行unity相同”
Tom

我也发现我必须通过sudo运行unity以保存我的窗口。
汤姆(Tom)”,

2
--replace已弃用,不执行任何操作,此解决方案将重新启动您的会话,这意味着您丢失了所有窗口:(
Brenden

在2018
仍可使用
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.