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


15

我有兴趣通过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

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

我已经测试了使用NVIDIA卡在两台机器之间进行凉亭的X11转发。它工作正常。

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

  1. 我做错了
  2. 我想做的事是不可能的
  3. 凉亭不会以不可知论的方式针对不同的硬件构建分支代码路径。系统构建时的外观是您所能得到的。

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

Answers:


9

GLX Wikipedia文章的一些注释:

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

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

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

尝试的事情:

  1. 代替gazebo尝试glxdemo
  2. 如果可能,将两台计算机放在同一网络上,然后将ssh删除
  3. 大手笔:strace您的gazebo调用,并弄清楚为什么要加载nv-glx

祝好运!


这些计算机已经在同一网络上,但是我们希望将所有凉亭计算机移到服务器机壳中,但是仍然可以使用该软件的视觉效果,这就是为什么我要使用SSH隧道。除非您说将它们放在同一网络上允许使用不需要SSH的其他配置(我猜是在设置一些疯狂的xhost /客户端设置,否则我对X11不太了解)。
道格·斯蒂芬

无需ssh-如果这是您所有受信任系统的专用网络,请xhost +在本地计算机上尝试,并将远程系统上的DISPLAY设置为“ ip-or-name-of-local:0”
13年

1
我无法gazebo上班,但我将其标记为可接受的答案,因为您的建议在技术上是正确的。我能够glxdemo使用您提出的所有建议(通过网络的ssh和xserver / xclient)进行隧道传输,但是Gazebo本身似乎并未建立分支代码路径,并且假定它不会在此怪异配置中运行。谢谢!。
道格·斯蒂芬

有凉亭网络,这真的很棒,您可以在远程计算机(甚至WAN)上启动凉亭服务器,使用ssh建立隧道,然后打开浏览器查看那里的凉亭。有史以来最好的解决方案。
Mehdi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.