OpenGL通过SSH连接出现问题

时间:2020-05-28 12:20:03

标签: linux opengl opengl-es paraview

我试图在客户端/服务器模式下使用软件(Paraview)在我的台式机(Linux,Debian 10)上打开客户端,并在远程服务器(Linux,CentOS 8)上进行大量计算。该软件需要OpenGL 3.2或更高版本的实现,并且可以从如下所示的glxinfo命令的输出中看到我的计算机上已安装的软件:

myaccount@desktopmachine:$ glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: *GeForce GTX 650 Ti BOOST/PCIe/SSE2 OpenGL core*
profile version string: 4.6.0 NVIDIA 440.82 OpenGL core profile
shading language version string: 4.60 NVIDIA OpenGL core profile
context flags: (none) OpenGL core profile profile mask: core profile
OpenGL core profile extensions: OpenGL version string: 4.6.0 NVIDIA
440.82 OpenGL shading language version string: 4.60 NVIDIA OpenGL context flags: (none) OpenGL profile mask: (none) OpenGL extensions:
OpenGL ES profile version string: **OpenGL ES 3.2** NVIDIA 440.82 OpenGL
ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

问题在于,当通过SSH连接到远程服务器时,同一命令产生的OpenGL是:

myaccount@server:$ glxinfo | grep "OpenGL"
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: *GeForce GTX 650 Ti BOOST/PCIe/SSE2 OpenGL*
version string: **1.4** (2.1.2 NVIDIA 440.82) OpenGL extensions:

因此,似乎OpenGL的版本未正确传输。 我该怎么办才能解决不允许我运行该软件的问题?

2 个答案:

答案 0 :(得分:1)

SSH隧道X11。 GLX是执行OpenGL的X11协议扩展,也是将OpenGL调用封装到X11中的协议,然后通过SSH进行隧道传输。

现在这是东西:

GLX仅适用于OpenGL-1.4(https://www.khronos.org/registry/OpenGL/specs/gl/glx1.4.pdf第49页)。除此之外的所有内容仅受直接渲染上下文支持,并且仅使用GLX来设置上下文,但是从那以后,与OpenGL-3.x及更高版本相关的所有内容都会绕过GLX,直接进入驱动程序。

当然,从理论上讲,GLX可以进行更新以支持OpenGL-3和更高版本。但是没有人打扰。

您现在的选择是在远端运行所有内容,并且仅传输渲染结果。理想情况下,这是通过应用程序创建无X,无头OpenGL上下文,然后将渲染结果复制到X11 SHM像素图上来完成的(但是,在典型的网络上,性能会很糟糕)。

我首选的解决方案是使用Xpra,并使用远端的GPU。

答案 1 :(得分:1)

在ParaView和pvserver的上下文中,您需要使用本地显示,而不是“ X11转发”机制。

请勿在连接时使用-X-Y,然后运行DISPLAY=:0 glxinfoDISPLAY=:0 pvserver。在您的服务器上