X11 将 OpenGL 应用程序从运行 NVIDIA 卡的计算机转发到具有 AMD 卡的计算机

X11 将 OpenGL 应用程序从运行 NVIDIA 卡的计算机转发到具有 AMD 卡的计算机

我有兴趣通过 SSH 转发 X11 会话,以便启动利用 OpenGL 的远程进程(具体来说,凉亭对于任何熟悉的人。)

我似乎遇到的问题是,由于显卡不匹配,Gazebo 崩溃了;它找不到“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

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

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

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

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

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

答案1

一些注释来自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 的原因

祝你好运!

相关内容