我有兴趣通过 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 转发。它工作得很好。
据我所知,似乎发生了以下三件事之一:
- 我做错事了
- 我想做的事情是不可能的
- 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
是同一台计算机,因此尝试直接连接。
值得尝试的事情:
- 而不是
gazebo
,尝试glxdemo
。 - 如果可能的话,让两台计算机处于同一网络中,并将 ssh 排除在外
- 大枪:
strace
你的gazebo
调用,并找出它加载 nv-glx 的原因
祝你好运!