web-dev-qa-db-fra.com

Changer de pilote vidéo dans un environnement à double démarrage

Quel est le moyen le plus simple de faire démarrer ubuntu sur un ordinateur natif avec une carte NVIDIA installée et en tant qu’invité VMware. Après avoir installé le package de pilote nvidia-304, je ne peux pas le charger dans VMware. Il s'est bloqué dans la boucle de connexion avec cette erreur dans .xsession-errors:

Xlib: L'extension "GLX" manque sur l'affichage ": 0".

La seule réponse pertinente que j'ai trouvée est this mais cela ne fonctionne pas pour moi. Il n'y a pas de switchlibglx dans les pilotes NVIDIA.

EDIT: Les résultats de mon enquête. NVIDIA a corrompu le système avec son module OpenGL via le lien symbolique situé dans le répertoire système libglx.so. Leur module ne peut fonctionner qu'avec le pilote NVIDIA qui n'est pas chargé si vous démarrez évidemment le système avec une autre carte vidéo. Il n’existe aucun moyen simple et facile de choisir le module OpenGL à utiliser en fonction du pilote chargé. C'est une logique unix classique. Dans toutes les situations difficiles, ne vous embêtez pas pour inventer des API et des options, écrasez simplement le lien symbolique par défaut dans l'annuaire global et laissez un utilisateur s'occuper de ce gâchis. NVIDIA utilise simplement la béquille standard pour installer son pilote et son module. Il existe trois solutions possibles:

1) installer et désinstaller les pilotes nvidia chaque fois que vous l’utilisez dans VMware

2) créez un fichier de configuration compliqué qui exécute un script et écrase les liens symboliques pendant l’amorçage en fonction de la présence de l’adaptateur (voir la réponse ci-dessous)

3) désactiver en quelque sorte l'utilisation des extensions GLX sur le serveur X pour le charger dans VMware

5
ZAB

Vous rencontrez ce problème car votre configuration X tente de charger le pilote nvidia qui recherche ensuite un périphérique nvidia compatible. Un tel périphérique n'existe pas dans l'environnement invité à la place, un périphérique graphique virtuel VMware est présenté. Par conséquent, le pilote nvidia n'est pas le pilote approprié dans le système d'exploitation invité.

Le pilote correct pour l'interface graphique virtuelle vmware est celui fourni par le package xserver-xorg-video-vmware et non celui fourni par les packages nvidia- * qui ne conviennent que pour un accès direct au GPU. Vous pouvez installer le pilote approprié à l'aide de la commande suivante sur l'invité:

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

Assurez-vous également que l'accélération 3D est activée sur la configuration de la machine virtuelle et que vous avez correctement installé les ajouts d'invité vmware. Assurez-vous également que vous n'avez pas de fichier xorg.conf qui sélectionne explicitement le pilote nvidia car cela échouera.

Si vous souhaitez un script que vous pouvez configurer pour s'exécuter au démarrage avant le démarrage de lightdm, vous pouvez essayer quelque chose comme ceci:

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

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

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

# 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

Le script vérifie quel identificateur de fournisseur est détecté pour la carte graphique. Si nvidia est configuré, il utilisera les bibliothèques Opengl fournies par nvidia. Toutefois, si le périphérique vmware est détecté, il sera configuré pour mesa, mesa étant la valeur par défaut si aucune chaîne du fournisseur n'est reconnue.

Un certain nombre d'hypothèses sont formulées ici, le script ne fonctionnera pas correctement si ce n'est pas le cas:

  1. L'installation de Multilib est supposée ainsi les paramètres pour i386 et x86_64
  2. Il est supposé que le pilote nvidia fourni par Ubuntu est installé. Cela ne fonctionnera pas si vous avez installé le pilote nvidia manuellement sans utiliser apt.

Cependant, vmware n'est pas installé et je ne peux donc que tester et m'assurer qu'il fonctionne correctement lorsque le périphérique nvidia est détecté et que les pilotes nvidia fournis par Ubuntu sont installés.

2
MttJocy