Как использовать OpenGL поверх SSH? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь использовать PyBullet на удаленном компьютере. Удаленный компьютер имеет графическую карту NVIDIA RTX 2070 с 410 драйверами. xlogo отлично работает.

Быстрый тест дает мне ошибку:

>>> import pybullet as p; p.connect(p.GUI);
pybullet build time: May 13 2019 09:52:59
startThreads creating 1 threads.
starting thread 0
started thread 0 
argc=2
argv[0] = --unused
argv[1] = --start_demo_name=Physics Server
ExampleBrowserThreadFunc started
X11 functions dynamically loaded using dlopen/dlsym OK!
X11 functions dynamically loaded using dlopen/dlsym OK!
Creating context
Failed to create GL 3.3 context ... using old-style GLX context
Failed to create an OpenGL context

Я могу получить такую ​​ошибку, используя glxgears:

$ glxgears
  X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  151 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  31
  Current serial number in output stream:  32

Для отладки я попытался сделать:

$ ldd `which glxgears`
    linux-vdso.so.1 (0x00007ffce6fad000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fc9a9ecc000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc9a9b2e000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fc9a97f6000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc9a9405000)
    libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fc9a91d4000)
    libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fc9a8f1e000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc9a8cff000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc9aa35e000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fc9a8ad7000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc9a88d3000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fc9a86cf000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fc9a84c9000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fc9a82b4000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc9a80ac000)

Очевидно, nvidia здесь не используется:

$ ll /usr/lib/x86_64-linux-gnu/libGL*                                    
lrwxrwxrwx 1 root root   22 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLdispatch.so -> libGLdispatch.so.0.0.0
lrwxrwxrwx 1 root root   22 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 -> libGLdispatch.so.0.0.0
-rw-r--r-- 1 root root 599K mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0.0.0
lrwxrwxrwx 1 root root   29 juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLESv1_CM_nvidia.so.1 -> libGLESv1_CM_nvidia.so.410.48
-rwxr-xr-x 1 root root  59K juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLESv1_CM_nvidia.so.410.48
lrwxrwxrwx 1 root root   21 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLESv1_CM.so -> libGLESv1_CM.so.1.0.0
lrwxrwxrwx 1 root root   21 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLESv1_CM.so.1 -> libGLESv1_CM.so.1.0.0
-rw-r--r-- 1 root root  43K mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLESv1_CM.so.1.0.0
lrwxrwxrwx 1 root root   26 juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLESv2_nvidia.so.2 -> libGLESv2_nvidia.so.410.48
-rwxr-xr-x 1 root root 109K juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLESv2_nvidia.so.410.48
lrwxrwxrwx 1 root root   18 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLESv2.so -> libGLESv2.so.2.0.0
lrwxrwxrwx 1 root root   18 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLESv2.so.2 -> libGLESv2.so.2.0.0
-rw-r--r-- 1 root root  71K mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLESv2.so.2.0.0
lrwxrwxrwx 1 root root   16 août  24  2017 /usr/lib/x86_64-linux-gnu/libGLEW.so -> libGLEW.so.2.0.0
lrwxrwxrwx 1 root root   16 août  24  2017 /usr/lib/x86_64-linux-gnu/libGLEW.so.2.0 -> libGLEW.so.2.0.0
-rw-r--r-- 1 root root 575K août  24  2017 /usr/lib/x86_64-linux-gnu/libGLEW.so.2.0.0
-rw-r--r-- 1 root root  671 juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGL.la
lrwxrwxrwx 1 root root   14 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGL.so -> libGL.so.1.0.0
lrwxrwxrwx 1 root root   14 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGL.so.1 -> libGL.so.1.0.0
-rw-r--r-- 1 root root 555K mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
-rw-r--r-- 1 root root 905K mai   22  2016 /usr/lib/x86_64-linux-gnu/libGLU.a
lrwxrwxrwx 1 root root   15 mai   22  2016 /usr/lib/x86_64-linux-gnu/libGLU.so -> libGLU.so.1.3.1
lrwxrwxrwx 1 root root   15 juin  14  2018 /usr/lib/x86_64-linux-gnu/libGLU.so.1 -> libGLU.so.1.3.1
-rw-r--r-- 1 root root 443K mai   22  2016 /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1
lrwxrwxrwx 1 root root   44 juin  18 12:42 /usr/lib/x86_64-linux-gnu/libGLX.0.so -> /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0
lrwxrwxrwx 1 root root   23 juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0 -> libGLX_nvidia.so.410.48
lrwxrwxrwx 1 root root   20 févr.  8 23:02 /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0 -> libGLX_mesa.so.0.0.0
-rw-r--r-- 1 root root 469K févr.  8 23:02 /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0
lrwxrwxrwx 1 root root   23 juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0 -> libGLX_nvidia.so.410.48
-rwxr-xr-x 1 root root 1,3M juin  18 12:27 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.410.48
lrwxrwxrwx 1 root root   15 juin  18 12:48 /usr/lib/x86_64-linux-gnu/libGLX.so.0 -> libGLX.so.0.0.0
-rw-r--r-- 1 root root  67K mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0
lrwxrwxrwx 1 root root   15 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLX.so.0.bak -> libGLX.so.0.0.0
lrwxrwxrwx 1 root root   15 mai   10 14:17 /usr/lib/x86_64-linux-gnu/libGLX.so.bak -> libGLX.so.0.0.0

Я пытался установить libglvnd, переустановить nvidia, но это ничего не изменило.

Я как бы потерялся здесь. Я действительно не знаю, что мне следует расследовать, чтобы идти дальше.

1 Ответ

1 голос
/ 19 июня 2019

Не думаю, что здесь можно многое сделать.Core X11 (через расширение GLX в режиме «INDIRECT») поддерживает только относительно старое подмножество OpenGL.Большинство современных драйверов opengl работают в «прямом» режиме: вы общаетесь с X-сервером, используя расширение DRI, чтобы выделить вам некоторую видеопамять / область экрана, а затем визуализируете эту видеопамять напрямую, используя графический процессор, полностью минуя сетевой уровень.

В зависимости от вашего драйвера opengl и от программы (у вас должна быть возможность переключиться в неподходящий режим), вам может повезти, установив LIBGL_ALWAYS_INDIRECT variable в 1

...