如何从服务器 xforwarding openGL 应用程序

Kai*_*ang 2 x11 opengl ssh nvidia x11-forwarding

我有一台带有 nvidia 显卡的服务器,我想运行一些 openGL 应用程序并将显示内容 xforwarding 到客户端。

我怎样才能做到这一点?目前我还没有安装 X 窗口系统。

dat*_*olf 6

X 转发意味着,所有渲染命令都被封装到 X 传输中,并传输到带有显示器的机器并在那里执行。好处是,远程端不需要任何 GPU。不利的一面是,它会消耗(好吧,而是吞噬)大量网络带宽。

OpenGL 2.1 版为 X11 传输指定 GLX 操作码,因此网络透明。如果您自由使用显示列表并保持传输的数据量很小(即没有客户端顶点数组,只有很少的纹理),OpenGL-over-GLX-over-X11-over-TCP 工作得相当好。

然而,如今远程渲染更加高效,并且仅使用高效压缩编解码器传输生成的图像。但是,普通的 X11 转发无法做到这一点。但是您可以使用Xpra由“真正的”X 服务器支持的、与实际 GPU 通信的方式来实现。问题是,您需要那个特定的 X 服务器来占用 GPU。

一个更好的方法是,检测是否有可用的 GLX 扩展,如果没有可用的 GPU,并使用它来渲染成 XSHM 像素图。这样,虚拟帧缓冲服务器上的 Xpra 也可以工作。不幸的是,使用 OpenGL 做后者在某种程度上很难实现,因为它在上下文创建 API 之间透明地工作。它可以完成 (BT;DT) 但实际上对于这种事情,我实际上更喜欢 Vulkan,因为尽管 Vulkan 很冗长,但与使用 OpenGL 相比,使用 Vulkan 可靠地完成所需的工作更少。

也许(不太可能)我们会看到一些用于像素图压缩传输的 X11 扩展,一些高压缩 XV 或类似的。这与纯粹的屏幕外 GPU 渲染(我们已经有了)相结合,将使系统更加高效。