我曾经遇到过桌面崩溃并且没有响应的情况。 (就我而言,它是 Cinnamon DE,我还没有cinnamon --replace
从命令行尝试过,顺便说一句)
我正在使用下载管理器类型的 GUI 应用程序来下载一个大文件,很明显,即使 GUI 被中断,该过程仍然运行得非常愉快。如果我杀死了 XI,我将杀死所有子进程并被迫重新启动我的下载等。
是否可以创建一个代理 X 会话,分离现有的 GUI 进程并将它们连接到“虚拟”会话,重新启动真正的 X 会话,最后将 GUI 进程重新连接回新的、正常的 X 会话?如果是这样,怎么办?
答案1
理论上,失去与 X 服务器连接的程序可以尝试重新连接,直到有新的 X 服务器可用为止。事实上,我已经编写了执行此操作的程序。它需要额外的代码,因为您必须重新运行 GUI 初始化例程以在新的 X 服务器上重新创建资源(窗口、位图、字体等),并刷新所有程序的内部数据结构以使用这些新的资源。
遗憾的是,我见过的几乎没有 X 程序愿意这样做。他们只是崩溃了,因为所有的重新连接/重新设置太麻烦了。更可悲的是,他们无法被欺骗去切换 X 服务器,因为该代码会重新初始化他们的图形资源不存在在那个程序中。因此,对于大多数程序来说,如果失去 X 连接,它们就注定失败。
正如 XTaran 提到的,有一个名为“xpra”的简洁中继/垫片/代理程序,它对于客户端来说就像一个 X 服务器,然后可以将其资源重新初始化到任何其他 X 服务器中,从而允许您移动X 服务器之间的所有程序都如您所愿。当我10年前使用它时,它有很多错误。我确信从那时起他们已经取得了进步,但您需要了解它是否足够稳定以适合日常桌面使用。
答案2
x0vncserver
(在 Debian 和 Ubuntu 中的包中vnc4server
)可能有助于重新访问崩溃的或至少无法访问的 X 会话,例如使用x0vncserver display=:0
.
然后还有X普拉哪个允许用户在本地计算机上查看远程 X 应用程序,并断开与远程计算机的连接并重新连接,而不会丢失正在运行的应用程序的状态根据 Debian 的 xpra 包描述。
也许两个工具之一确实有帮助(如果帮助还不算太晚的话)。