Сломанный OpenGL: неправильный рендерер GLX в glxinfo и inxi (Nvidia вместо Intel)
Я провел весь день, пытаясь решить эту проблему, я надеюсь, что кто-то на этом дружественном форуме может помочь:
Я запускаю следующую настройку:
Distribution: Ubuntu 14.04.01
Kernel: 3.13.0-43-generic
Hardware: Intel Core i7-3840QM CPU with integrated Intel HD Graphics IvyBridge GPU
Когда я запускаю glxinfo, я получаю:
$ glxinfo
name of display: localhost:10.0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
display: localhost:10 screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_multisample, GLX_EXT_buffer_age,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_framebuffer_sRGB, GLX_EXT_swap_control, GLX_EXT_swap_control_tear,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_NV_float_buffer, GLX_NV_multisample_coverage, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_MESA_multithread_makecurrent, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVS 5100M/PCIe/SSE2
OpenGL version string: 1.4 (2.1.2 NVIDIA 331.113)
[...]
Кажется, проблема в следующих двух строках:
server glx vendor string: NVIDIA Corporation
[...]
client glx vendor string: Mesa Project and SGI
Факт в том, что в этой установке никогда не было установлено видеокарты / драйвера Nvidia. Так что понятия не имею, почему у меня есть ссылки на nVidia здесь. Вот еще немного информации, которая может помочь:
$ lshw -C video
*-display
description: VGA compatible controller
product: 3rd Gen Core processor Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 09
width: 64 bits
clock: 33MHz
capabilities: msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:47 memory:f7800000-f7bfffff memory:e0000000-efffffff ioport:f000(size=64)
$ dpkg -l nvidia
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-============================-===================-===================-==============================================================
un libgl1-nvidia-alternatives <none> <none> (no description available)
un nvidia-libopencl1-dev <none> <none> (no description available)
un nvidia-va-driver <none> <none> (no description available)
un nvidia-vdpau-driver <none> <none> (no description available)
$ inxi -G
Graphics: Card: Intel 3rd Gen Core processor Graphics Controller
X.Org: 1.15.1 drivers: intel (unloaded: fbdev,vesa) Resolution: 1600x900@60.0hz, 2560x1440@60.0hz
GLX Renderer: NVS 5100M/PCIe/SSE2 GLX Version: 1.4 (2.1.2 NVIDIA 331.113)
Любая помощь, как избавиться от ссылок NVIDIA /NVS высоко ценится!
С уважением
1 ответ
OpenGL использует косвенный рендеринг, вместо этого отправляя данные обратно в вашу локальную систему для рендеринга, и он обнаруживает и перечисляет это оборудование вместо того, что находится на вашем сервере.
У меня была такая же путаница, но с картой Nvidia на сервере и обнаруженной картой AMD. Вот соответствующие биты из glxinfo для моего случая:
$ glxinfo | egrep 'direct|client|server|OpenGL'
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: AMD Radeon HD 6770M OpenGL Engine
OpenGL version string: 1.4 (2.1 ATI-1.24.38)
OpenGL extensions:
В этой системе у меня вообще не было оборудования AMD, поэтому я тоже был озадачен, пока не понял, что в моей локальной системе установлен Radeon HD 6770M. Когда glxinfo сообщает о клиенте и сервере, похоже, что он определяет те же, что и X; сервер - это хост, на котором работает X-сервер, указанный в $DISPLAY, а клиент - это хост, на котором выполняется glxinfo. Таким образом, хотя, как вы сказали, на сервере нет X-сервера, он все еще работает и запрашивается glxinfo по сети. Я предполагаю, что в вашем случае у вас на самом деле есть оборудование Nvidia в вашей локальной системе, на котором работает X.
В качестве эксперимента вы можете попробовать запустить glxinfo без указания дисплея, и вы увидите, что он даже не будет пытаться работать:
$ DISPLAY="" glxinfo
Error: unable to open display
Если вы запускаете X-сервер на самом удаленном сервере, настраиваете его для использования прямого рендеринга и используете что-то вроде VNC для взаимодействия с X, возможно использовать аппаратное ускорение на сервере. В этом случае он просто отправит готовые изображения в вашу локальную систему.
Старый пост, но связанная концепция:
https://serverfault.com/questions/174003/how-can-opengl-graphics-be-displayed-remotely-using-vnc
На этой странице также упоминается x11vnc: