如何使用 vcxsrv 检查并确认正确的 opengl 版本(用于 ros2 rviz2)

如何使用 vcxsrv 检查并确认正确的 opengl 版本(用于 ros2 rviz2)

我有一个远程主机(ubuntu 20.04),

和本地主机(win10 pc,带有 nv rtx3050ti gpu,更新的驱动程序),我vcxsrv在本地主机上通过(win\cmd)启动:
vcxsrv.exe -multiwindow -clipboard -wgl -ac

然后使用win\cmd本地主机,我通过以下方式 ssh 到远程主机:

set DISPLAY=localhost:0.0
ssh -Y username@remote-ip

我不知道为什么它首先需要,set DISPLAY...但它适用于开始显示某些东西,例如,或者(ros2 的 gui 工具之一)将按预期在本地主机上显示。cmdssh -Yvcxsrvxclockrqt

但是当我尝试启动rviz2(另一个 ros2 的 gui 工具)时,ssh\bash出现如下错误:

...
[ERROR] [1665571456.729849309] [rviz2]: RenderingAPIException: OpenGL 1.5 is not supported in GLRenderSystem::initialiseContext at /tmp/binarydeb/ros-galactic-rviz-ogre-vendor-8.5.1/.obj-x86_64-linux-gnu/ogre-v1.12.1-prefix/src/ogre-v1.12.1/RenderSystems/GL/src/OgreGLRenderSystem.cpp (line 1201)
...
...
...
terminate called after throwing an instance of 'std::runtime_error'
  what():  Unable to c

其中,key-error应该是:

RenderingAPIException: OpenGL 1.5 is not supported in GLRenderSystem

我知道这是与 opengl 版本有关的问题,因此我检查了以下内容,但仍然发现无能为力,如能提供任何帮助我将不胜感激,谢谢:

glxinfo -Bssh\bash在本地主机上的ssh 提示符 ( ) 中(使用set DISPLAY...ssh -Y):

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
name of display: localhost:10.0
display: localhost:10  screen: 0
direct rendering: No (LIBGL_ALWAYS_INDIRECT set)
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce RTX 3050 Ti Laptop GPU/PCIe/SSE2
OpenGL version string: 1.4 (4.6.0 NVIDIA 512.96)

然后按照一些人的建议,我尝试了ssh\bash

export LIBGL_ALWAYS_INDIRECT=1
export MESA_GL_VERSION_OVERRIDE=3.3

然后得到(libGL error消失)

name of display: localhost:10.0
display: localhost:10  screen: 0
direct rendering: No (LIBGL_ALWAYS_INDIRECT set)
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce RTX 3050 Ti Laptop GPU/PCIe/SSE2
OpenGL version string: 1.4 (4.6.0 NVIDIA 512.96)

glxinfo -Bssh\bash(没有set DISPLAY...ssh -Y,只是ssh):

Error: unable to open display

直接glxinfo -B在 remote-host( ) 终端中执行ubuntu20.04\bash

name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Mesa/X.org (0xffffffff)
    Device: llvmpipe (LLVM 12.0.0, 256 bits) (0xffffffff)
    Version: 21.0.3
    Accelerated: no
    Video memory: 31893MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 3.1
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL vendor string: Mesa/X.org
OpenGL renderer string: llvmpipe (LLVM 12.0.0, 256 bits)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 21.0.3
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 3.1 Mesa 21.0.3
OpenGL shading language version string: 1.40
OpenGL context flags: (none)

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 21.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

我不太了解 x11/vcxsrv/opengl 的工作原理,但不明白为什么当我directly在远程主机或ssh本地主机中检查时 opengl 版本会不同。

由于其他图形用户界面可以按预期显示(xclockrqtros2),但rviz2ros2不能,我认为这是的依赖关系rviz2opengl但为什么以及如何确保适合我的情况/环境的正确的 opengl 版本?

谢谢

答案1

很高兴弄明白了,虽然理论上不清楚但很实用,应该vcxsrvlocal-host(win10)端(win/cmd)开始:

vcxsrv.exe  -multiwindow -clipboard -nowgl -ac

其中,应使用-nowgl-wgl开头之外的其他内容

相关内容