Alternar drivers de vídeo no ambiente de inicialização dupla

5

Qual é a maneira mais fácil de fazer o boot do Ubuntu em ambos os computadores nativos com placa NVIDIA instalada e como convidado VMware. Depois de instalar o pacote do driver nvidia-304 , não consigo carregá-lo no VMware. Ele ficou preso no loop de login com esse erro em .xsession-errors :

  

Xlib: extensão "GLX" ausente no display ": 0".

A única resposta relevante que encontrei é isto mas não funciona para mim. Não há switchlibglx nos drivers da NVIDIA.

EDIT: Resultados da minha investigação. A NVIDIA estragou o sistema com seu módulo OpenGL através do link simbólico no diretório do sistema libglx.so . Seu módulo só funciona com o driver NVIDIA, que não é carregado se você iniciar o sistema com um adaptador de vídeo diferente, obviamente. Não existe uma maneira padrão e fácil de escolher qual módulo OpenGL usar dependendo do driver carregado. É uma lógica clássica do unix. Em qualquer situação difícil, não se preocupe em inventar API e opções, apenas sobrescreva o link simbólico padrão no diretório global e deixe o usuário lidar com essa bagunça. A NVIDIA usa apenas a muleta padrão para instalar seu driver e módulo. Existem três soluções possíveis:

1) instale e desinstale os drivers nvidia toda vez que você usá-lo no VMware

2) crie um arquivo de configuração complicado que execute um script e sobrescreva os links simbólicos durante a inicialização, dependendo do adaptador presente (Veja a resposta abaixo)

3) de alguma forma desativa o uso de extensões GLX no servidor X para carregá-lo no VMware

    
por ZAB 29.05.2016 / 20:31

1 resposta

2

Você está tendo este problema porque sua configuração do X está tentando carregar o driver nvidia, que então está procurando por um dispositivo nvidia compatível. Tal dispositivo não existe no ambiente convidado, em vez disso, um dispositivo gráfico virtual VMware é apresentado e, portanto, o driver nvidia não é o driver correto no sistema operacional convidado.

O driver correto para a interface gráfica virtual VMware é aquele fornecido pelo pacote xserver-xorg-video-vmware, não os fornecidos pelos pacotes nvidia- *, que são adequados apenas para acesso direto à GPU. Você pode instalar o driver correto usando o seguinte comando no guest:

sudo apt-get install xserver-xorg-video-vmware

Verifique também se a aceleração 3D está ativada na configuração da máquina virtual e se você instalou as adições de convidado do vmware corretamente. Você também deve se certificar de que você não possui um arquivo xorg.conf que esteja explicitamente selecionando o driver nvidia, já que isso falhará.

Se você quisesse que um script pudesse ser executado no boot, antes do lightdm ser iniciado, você poderia tentar algo assim:

#!/bin/bash
# Vendor identifiers
nvidia=\"10de\"
vmware=\"15ad\"

# Detect NVIDIA driver
nvidia_driver='dpkg --get-selections | awk '/nvidia-[0-9]+\t+install/ { print  }''

# Detect PCI bus ID
vga_bus_id='lspci | awk '/VGA/ { print  }''

# Detect VGA vendor identifier
vga_vendor=$(lspci -nm | awk "/$vga_bus_id/ { print $3 }")

if [ $vga_vendor == $nvidia ]; then
   # Configure for nvidia GLX via update-alternatives
   update-alternatives --set i386-linux-gnu_gl_conf /usr/lib/${nvidia_driver}/alt_ld.so.conf
   update-alternatives --set i386-linux-gnu_egl_conf /usr/lib/${nvidia_driver}/alt_ld.so.conf
   update-alternatives --set x86_64-linux-gnu_gl_conf /usr/lib/${nvidia_driver}/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_egl_conf /usr/lib/${nvidia_driver}/ld.so.conf
elif [ $vga_vendor == $vmware ]; then
   # Configure for mesa GLX via update-alternatives
   update-alternatives --set i386-linux-gnu_gl_conf /usr/lib/i386-linux-gnu/mesa/ld.so.conf
   update-alternatives --set i386-linux-gnu_egl_conf /usr/lib/i386-linux-gnu/mesa-egl/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_gl_conf /usr/lib/x86_64-linux-gnu/mesa/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_egl_conf /usr/lib/x86_64-linux-gnu/mesa-egl/ld.so.conf
else
   # Configure for mesa GLX via update-alternatives
   update-alternatives --set i386-linux-gnu_gl_conf /usr/lib/i386-linux-gnu/mesa/ld.so.conf
   update-alternatives --set i386-linux-gnu_egl_conf /usr/lib/i386-linux-gnu/mesa-egl/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_gl_conf /usr/lib/x86_64-linux-gnu/mesa/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_egl_conf /usr/lib/x86_64-linux-gnu/mesa-egl/ld.so.conf
fi

O script verifica qual identificador de fornecedor é detectado para a placa gráfica, se nvidia irá configurar ld para usar as bibliotecas opengl fornecidas pela nvidia entretanto se o dispositivo vmware for detectado ele irá configurar para mesa, mesa sendo o padrão se nenhuma string de fornecedor é reconhecido.

Várias suposições estão sendo feitas aqui, o script não funcionará corretamente se não for o caso:

  1. A instalação Multilib é assumida, assim, as configurações para i386 e x86_64
  2. Assume-se que o ubuntu fornecido driver nvidia é instalado isso não vai funcionar se você instalou o driver nvidia manualmente sem usar o apt.

No entanto, não tenho o vmware instalado, portanto, só posso testar e ter certeza de que ele funcionará corretamente quando o dispositivo nvidia for detectado e os drivers nvidia fornecidos pelo ubuntu estiverem instalados.

    
por MttJocy 07.07.2016 / 11:21