linux - 通过 SSH 连接的 OpenGL 问题
问题描述
我正在尝试在客户端/服务器模式下使用软件(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的版本没有正确传输。我应该怎么做才能解决这个不允许我运行软件的问题?
解决方案
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-less、无头 OpenGL 上下文,然后将渲染结果复制到 X11 SHM 像素图中来完成(但是在您的典型网络上性能将非常糟糕)。
我首选的解决方案是使用 Xpra,在远端使用 GPU。
推荐阅读
- python - numpy genfromtxt IndexError 使用评论时
- java - 使用测试容器发送命令时,这是正确的等待策略吗?
- java - BufferedReader 卡在最后一个输入行而不结束程序
- rest - API 请求协助
- token - 如何最好地执行离线许可证密钥并防止用户更改他们的机器时间?
- windows - 如何将 .bat 转换为 .exe?
- pine-script - 为什么我收到错误:找不到函数或函数参考“研究”?
- python - python print() 在同时调用时如何实际工作?
- python - 在安装 Anaconda 的 Bash 脚本期间激活 Conda
- flask - 如何在 Mac OS M1 上安装 flask-mysqldb?