OpenGL quebrado: Renderizador GLX errado em glxinfo e inxi (Nvidia em vez de Intel)

1

Eu passei o dia inteiro tentando resolver esse problema, espero que alguém neste fórum amigável possa ajudar:

Estou executando a seguinte configuração:

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

Quando executo o glxinfo, obtenho:

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

O problema parece ser as seguintes duas linhas acima:

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

O fato é que esta instalação nunca teve uma placa de vídeo / driver Nvidia instalada. Então não faço ideia porque eu tenho referências nVidia aqui. Aqui estão mais algumas informações que podem ajudar:

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

Qualquer ajuda sobre como se livrar das referências NVIDIA / NVS é muito apreciada!

Atenciosamente

    
por masterhui 09.01.2015 / 16:53

1 resposta

1

O OpenGL está usando renderização indireta , enviando dados de volta ao seu sistema local para serem renderizados lá, e está detectando e listando esse hardware em vez do que está no seu servidor.

Eu tive a mesma confusão, mas com uma placa Nvidia no servidor e uma placa AMD detectada. Aqui estão os bits relevantes do glxinfo para o meu caso:

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

Eu não tinha nenhum hardware AMD nesse sistema, então fiquei perplexo também, até que percebi que meu sistema local tem a Radeon HD 6770M. Quando o glxinfo relata cliente e servidor, parece que define aqueles como o X faz; o servidor é o host que está executando o servidor X apontado em $ DISPLAY e o cliente é o host que está executando o glxinfo. Então mesmo assim, como você disse, não há servidor X na máquina do servidor, ainda existe um em execução e sendo consultado pelo glxinfo através da rede. Eu estou supondo que no seu caso você realmente tem hardware Nvidia em seu sistema local que está executando o X.

Como experiência, você pode tentar executar o glxinfo sem ter um display especificado, e você pode ver que ele nem vai tentar trabalhar:

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

Se você executar um servidor X no próprio servidor remoto, configurá-lo para usar renderização direta e usar algo como VNC para interagir com o X, é possível usar a aceleração de hardware no servidor. Nesse caso, enviaremos as imagens acabadas para o seu sistema local.

Uma postagem antiga, mas relacionada ao conceito:

link

Esta página também menciona x11vnc:

link

    
por Jesse 20.05.2015 / 19:26