![Windows 7 主机 -> ubuntu 16.04 本地虚拟机 -> ubuntu 16.04 远程。如何在远程机器上运行 OpenGL?](https://linux22.com/image/1091231/Windows%207%20%E4%B8%BB%E6%9C%BA%20-%3E%20ubuntu%2016.04%20%E6%9C%AC%E5%9C%B0%E8%99%9A%E6%8B%9F%E6%9C%BA%20-%3E%20ubuntu%2016.04%20%E8%BF%9C%E7%A8%8B%E3%80%82%E5%A6%82%E4%BD%95%E5%9C%A8%E8%BF%9C%E7%A8%8B%E6%9C%BA%E5%99%A8%E4%B8%8A%E8%BF%90%E8%A1%8C%20OpenGL%EF%BC%9F.png)
我的目的是在远程 ubuntu 机器上运行 OpenGL 应用程序,并希望尽可能多地使用最新版本的 OpenGL 4.5。本地主机(在家)是 Windows 7。为了连接远程 ubuntu,我安装了 VMware 工作站 12.5.7,据称它支持 OpenGL 3.3。本地 VM 中的客户机操作系统是 ubuntu 16.04,我在其上安装了 mesa 17.2.4,据称它支持 OpenGL 4.5。由于 VMware 工作站的限制,我只能在 VM 中使用 OpenGL 3.3,而且它确实有效。然后我从 VM 内部通过 ssh -Y 连接到远程机器。远程机器是 ubuntu 16.04,上面安装并运行着 nVidia Titan 硬件和我所知道的所有图形相关软件包,如 nVidia 的最新驱动程序、X 服务器、VirtualGL、GLX 等。现在我想在远程机器上运行 OpenGL 应用程序(即,消耗远程机器上的计算资源)并将输出结果返回给我本地 VMware 工作站。要绘制草图:
本地 Windows 7 主机 -> 本地 ubuntu 16.04 虚拟机 -> 远程 ubuntu 16.04
我们知道 glxgears 是一个 OpenGL 应用程序。如果我直接在远程机器上运行它,我会得到错误:
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 3 (X_GLXCreateContext)
Value in failed request: 0x0
Serial number of failed request: 26
Current serial number in output stream: 27
如果我启动 VirtualGL(运行vglclient
)并通过命令运行 glxgears vglrun glxgears
,窗口会闪烁并消失,并且出现错误:
[VGL] NOTICE: Automatically setting VGL_CLIENT environment variable to
[VGL] 172.23.4.217, the IP address of your SSH client.
[VGL] ERROR: Could not connect to VGL client. Make sure that vglclient is
[VGL] running and that either the DISPLAY or VGL_CLIENT environment
[VGL] variable points to the machine on which vglclient is running.
[VGL] ERROR: in connect--
[VGL] 261: Connection refused
您能告诉我我需要做什么才能在远程 ubuntu 上运行 glxgears 或其他 OpenGL 应用程序吗?以下是 glxinfo 的结果;我希望它们可以帮助解决问题。如果您需要任何其他信息,请告诉我。非常感谢您的帮助。
来自本地虚拟机的 glxinfo:
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
Max core profile version: 3.3
Max compat profile version: 3.0
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.0
OpenGL core profile version string: 3.3 (Core Profile) Mesa 17.2.4
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 17.2.4
OpenGL shading language version string: 1.30
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 17.2.4
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
在远程机器上运行 glxinfo|grep version 时,出现与直接运行 glxgears 相同的错误:
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 38
Current serial number in output stream: 39
如果我在远程机器上运行 vglrun glxinfo|grep version,我会得到:
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL core profile version string: 4.5.0 NVIDIA 381.22
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL version string: 4.5.0 NVIDIA 381.22
OpenGL shading language version string: 4.50 NVIDIA
我本地的图形硬件是英特尔的集成芯片组,它非常老旧并且仅支持 DirectX 10 和 OpenGL 1.1,但我猜这不应该是罪魁祸首,因为本地虚拟机已经启动并运行了 OpenGL 3.3。