如何远程运行 X11 应用程序?

如何远程运行 X11 应用程序?

鉴于以下目标,如何运行托管在远程服务器上的 X11 应用程序:

  • 跑步任何事物可在服务器上本地运行。这包括使用 的 OpenGL 应用GLX
  • 与本地桌面无缝集成,即应用程序看起来像是在本地运行,没有单独的桌面区域。因此,我需要 X11 解决方案,而不是包装器协议。
  • 最好允许应用程序在断开连接时继续运行;然后,我可以稍后在重新连接时重新打开正在运行的应用程序。

我在超级用户那里看到过很多建议,但其中大部分只是部分修复或完全不好。

  • 普通 sshX11-Forwarding已出局:它无法运行某些应用程序,尤其是那些依赖于 GLX 扩展的应用程序。
  • 环境 LIBGL_ALWAYS_INDIRECT=1对我不起作用。
  • Xephyr也出局了。它目前不支持 GLX,尽管我在开发树中看到了一些 GLX 工作。也许在未来,那将是最干净的方式。
  • xmove也出局了。它太旧了,不值得进一步考虑。
  • VNC 已过时。它转发整个桌面,但无法理解 X 协议。

编辑:我花了一个周末的时间才让几个建议奏效,这xpra是最有效的。我在下面的回答中描述了我的设置,希望它能帮助别人。

答案1

西普拉(如上所述这里) 满足了我的需求。它允许运行任意 X 应用程序,这些应用程序可以转发到多个客户端,无论是在同一台计算机上,还是在另一台机器上。它还支持运行 OpenGL 应用程序,并且允许您的应用程序在最后一个客户端断开连接后继续运行 - 让您有机会稍后重新连接。

xpra分为两部分:客户端和服务器。要启动服务器,请在远程计算机上运行以下命令:

$ xpra start :100

这将在新的 X 显示器上启动xpra。(有一个解决方法与代理一起使用。

要让应用程序受控制xpra,请在与服务器相同的显示器上运行它xpra,如下所示:

$ export DISPLAY=:100
$ firefox&
$ blender&
...

这一切都可以通过 ssh 连接(带或不带 X11-Forwarding)完成,没有任何问题。

要启动客户端,请执行以下操作之一:

$ ssh -X user@remotehost
<gain remote connection>
$ xpra attach :100

或者

$ xpra attach ssh:user@remotehost:100

请注意,后者要求xpra在本地机器上安装客户端;前者则不需要。

客户xpra端会在窗口管理器的任务栏/面板中放置一个图标,以便您断开客户端连接。(或者,您可以直接终止它,只要您小心不要终止服务器即可。)然后,只要服务器仍在运行,您就可以稍后重新连接xpra。如果主机上运行着单个xpra服务器,您也可以简单地省略显示编号,然后xpra attach自己就能搞清楚。

的一个非常好的功能xpra是它允许您在预先存在的显示器上启动服务器。这允许您在服务器xpra崩溃时恢复会话(只要该显示器上的 X 服务器仍在运行)。为此,请运行

$ xpra start --use-display :100

注意事项:

  • xpra作为窗口管理器运行。虽然它可以很好地嵌入到其他窗口管理器中,但它与 X 应用程序本身的配合并不好:例如,它不允许rxvt-unicode删除其标题栏;它也不会告诉窗口它们在屏幕上有多少空间可供使用,例如,下拉框和菜单会超出屏幕范围。不过,我认为后一个问题是修复我的配置的问题。

  • 按键重复。经常出现这种情况。可以使用 来解决xpra attach --no-keyboard-sync,但手册页警告说,这种方法在某些游戏中效果不佳。我祈祷我不会渴望玩这些游戏。

出于这些原因,Xephyr这可能是一个更好的解决方案(一旦它支持 GLX),因为它作为 X 服务器运行,而不是窗口管理器。不过,我还没有调查它是否支持恢复先前断开的会话。

相关内容