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

Pea*_*key 15 linux xorg ubuntu

我有一台运行 Ubuntu 12.04 LTS 的设备屏幕冻结。通常我只是跳到一个可用的 tty,即Ctrl- Alt-F1并执行命令/etc/init.d/lightdm restartservice lightdm restart. 然而,这会杀死我打开的所有东西。我如何避免这种情况?

FSM*_*axB 13

免责声明:根据 Brenden 的评论,这可能已经过时并且不再适用于较新版本的 Ubuntu。还请准备好您可能会丢失打开的窗户。

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

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

这仅在 X-Server 或 GNOME 没有被冻结而只有 Unity 或 GNOME-Shell 被冻结时才有效。

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

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

PS:我只是描述我的理解,所以如果我在某些方面有错误,请编辑和纠正我。

编辑: 对于 GNOME-Shell,还有另一种重新启动它的方法。改成tty后直接输入pkill -HUP gnome-shell,不知道Unity有没有类似的。

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