重新附加丢失进程的 X 服务器视图

Posted

技术标签:

【中文标题】重新附加丢失进程的 X 服务器视图【英文标题】:Re-attatching an X server view of a lost process 【发布时间】:2008-11-24 16:47:16 【问题描述】:

我正在运行 Xorg,我的 (Qt) 程序会自行守护进程。现在我注销并重新启动 X 服务器。当我再次登录时,我的进程仍然运行良好,但我看不到它。

有没有办法将 X 服务器的新版本附加到旧进程? 如果我不重新启动整个服务器,而是注销并重新登录,有没有办法查看旧进程?

谢谢

【问题讨论】:

【参考方案1】:

xpra 应该可以满足您的要求。它还可以启动 tcp 连接(不需要 ssh)。在你的服务器上启动它:

xpra start :100 --start-child=xterm --bind-tcp=0.0.0.0:10000

在您的客户端上连接它:

xpra attach tcp:SERVERHOST:10000

你也可以使用mac或者windows xpra app来连接它。我在win7和osx10.10.2上试过。下载链接:

Windows:https://www.xpra.org/dists/windows/Xpra_Setup.exe 麦克:https://www.xpra.org/dists/osx/x86/Xpra.dmg

【讨论】:

【参考方案2】:

与X服务器的连接丢失后,无法恢复。

有一个名为 xmove 的 xserver 代理,但它已被弃用,并且不适用于现代工具包可能使用的几个较新的 X 扩展。

您可以尝试在另一个虚拟 X 服务器中运行您的进程,例如 xvnc 或(更好的)NX。 NX 是 NoMachine 开发的 X 代理技术。 NX 服务器也有免费的实现。 如果您在这样的服务器中运行程序,则可以从任意图形环境中附加和分离它。

【讨论】:

【参考方案3】:

这些家伙说有可能,我还没有测试过那个功能......

Check it out !

【讨论】:

这和我写的解决方案一样——在虚拟 X 服务器中启动应用程序。【参考方案4】:

使用Xpra 之类的东西:它允许您在屏幕外的 X11 服务器上运行应用程序,您可以在需要时重新连接到该服务器,也可以从远程机器上运行。它也支持“无缝”会话,因此窗口看起来就像本地窗口一样。

实际例子:

xpra start :10 --start-child=/bin/YOURAPP

然后每当您想重新连接时(比如在 X11 服务器重新启动后):

xpra attach :10

或者从远程机器:

xpra attach ssh://THESERVERHOSTNAMEORIP/10

【讨论】:

以上是关于重新附加丢失进程的 X 服务器视图的主要内容,如果未能解决你的问题,请参考以下文章

android如何跨片段分离/附加保留视图状态

基于 TCP 的 Python SysLogHandler:处理连接丢失

没索引oracle无唯一索引交换分区会丢失数据?

附加到进程输出以供查看

重装SQLsever2000的数据库会丢失原来的数据吗

更改端口而不丢失数据