web-dev-qa-db-fra.com

OpenGL cassé: rendu GLX incorrect dans glxinfo et inxi (Nvidia au lieu de Intel)

J'ai passé toute la journée à essayer de résoudre ce problème. J'espère que quelqu'un de ce forum amical pourra vous aider:

J'exécute la configuration suivante:

Distribution: Ubuntu 14.04.01 
Kernel: 3.13.0-43-generic
Hardware: Intel Core i7-3840QM CPU with integrated Intel HD Graphics IvyBridge GPU

Lorsque je lance glxinfo, je reçois:

$ 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)
[...]

Le problème semble être les deux lignes ci-dessus:

server glx vendor string: NVIDIA Corporation
[...]
client glx vendor string: Mesa Project and SGI

Le fait est que cette installation n’a jamais eu de carte graphique/pilote Nvidia installée. Donc, je ne sais pas pourquoi j'ai les références nVidia ici. Voici quelques informations supplémentaires qui pourraient aider:

$ lshw -C vidéo

  *-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: [email protected], [email protected] 
           GLX Renderer: NVS 5100M/PCIe/SSE2 GLX Version: 1.4 (2.1.2 NVIDIA 331.113)

Toute aide pour se débarrasser des références nvidia/NVS est très appréciée!

Cordialement

1
masterhui

OpenGL utilise le rendu indirect , renvoyant les données à votre système local pour y être restituées, et il détecte et répertorie ce matériel plutôt que ce qui se trouve sur votre serveur. .

J'ai eu la même confusion, mais avec une carte Nvidia dans le serveur et une carte AMD détectée. Voici les extraits pertinents de glxinfo pour mon cas:

$ 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:

Je n'avais pas du tout de matériel AMD dans ce système, donc j'étais mystifié aussi, jusqu'à ce que je réalise que mon système local possède la Radeon HD 6770M. Lorsque glxinfo signale le client et le serveur, il semble que cela soit défini comme le fait X; le serveur est l'hôte qui exécute le serveur X indiqué dans $ DISPLAY et le client est l'hôte qui exécute glxinfo. Donc, même si, comme vous l'avez dit, il n'y a pas de serveur X sur la machine serveur, il en reste toujours un qui est en train d'être interrogé par glxinfo sur le réseau. Je suppose que dans votre cas, vous avez effectivement du matériel Nvidia sur votre système local qui exécute X.

En guise d’expérience, vous pouvez essayer d’exécuter glxinfo sans faire d’affichage, et vous verrez qu’il ne tentera même pas de fonctionner:

$ DISPLAY="" glxinfo
Error: unable to open display

Si vous exécutez un serveur X sur le serveur distant lui-même, configurez-le pour utiliser le rendu direct et utilisez quelque chose comme VNC pour interagir avec X, il est possible d'utiliser l'accélération matérielle sur le serveur. Dans ce cas, il ne vous reste plus qu'à envoyer les images finies à votre système local.

Un ancien post, mais un concept connexe:

https://serverfault.com/questions/174003/how-can-opengl-graphics-be-displayed-remotely-using-vnc

Cette page mentionne x11vnc également:

https://help.ubuntu.com/community/VNC/Servers

1
Jesse