X11 将 OpenGL 应用程序从运行 NVIDIA 卡的机器转发到带有 AMD 卡的机器

Dou*_*hen 19 ssh opengl x11

我对通过 SSH 转发 X11 会话感兴趣,以便启动一个利用 OpenGL 的远程进程(特别是对于任何熟悉的人来说都是凉亭。)

我似乎遇到的问题是由于显卡不匹配导致凉亭崩溃;它找不到“NV-GLX”扩展名。确切的错误输出:

Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
X Error of failed request:  GLXUnsupportedPrivateRequest
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  16 (X_GLXVendorPrivate)
  Serial number of failed request:  24
  Current serial number in output stream:  25
Run Code Online (Sandbox Code Playgroud)

远程机器使用 NVIDIA 卡运行,而我的本地机器使用 AMD 卡。

我已经在两台带有 NVIDIA 卡的机器之间测试了 Gazebo 的 X11 转发。它工作得很好。

据我所知,似乎发生了三件事之一:

  1. 我做错了什么,
  2. 我想做的事是不可能的,
  3. Gazebo 不会以不可知的方式构建不同硬件的分支代码路径;无论您的系统在构建时是什么样子,您都会得到。

远程机器运行 Ubuntu,我的本地机器是运行 10.8.2 的 Mac;我已经知道我已经为正常使用正确设置了 x11 转发,因为我可以让 xclock 之类的东西在 XQuartz 中打开就好了。该解决方案(如果存在)也最好适用于其他操作系统,包括 WinSCP 上的 Windows。

ckh*_*han 10

GLX 维基百科文章中的一些注释:

GLX [是] X 协议的扩展,它允许客户端(OpenGL 应用程序)向 X 服务器(负责显示的软件)发送 3D 渲染命令。客户端和服务器软件可能运行在不同的计算机上。

如果客户端和服务器在同一台计算机上运行,​​并且可以使用使用合​​适驱动程序的加速 3D 图形卡,则 DRI 可以绕过前两个组件。在这种情况下,客户端应用程序可以通过多个 API 层直接访问视频硬件。

我相信第一点回答了你关于这是否可能的问题:它当然应该是可能的。第二个可能解释了为什么您的客户端程序坚持使用其本地 X 服务器(NV GLX 驱动程序)的功能——也许它认为这localhost:10.0是同一台计算机,因此尝试进行定向连接。

尝试的事情:

  1. 而不是gazebo,尝试glxdemo
  2. 可能的话,让两台电脑在同一个网段,把ssh去掉
  3. 大枪:strace你的gazebo调用,并找出它为什么加载 nv-glx

祝你好运!