Installer drivers nvidia sous debian

Installer le pilote propriétaire nvidia
Ce tutoriel présente comment installer les drivers propriétaires nvidia sous Debian. De nos jours il existe deux grandes méthodes :- Méthode 1 : via les paquets debian : c'est la méthode la plus simple et la plus propre. Le pilote est mis à jour avec le reste du système. C'est donc naturellement l'approche recommandée.
- Méthode 2 : via le script d'installation nvidia. Cette méthode permet parfois d'avoir un driver plus récent, mais doit être refaite chaque fois que le noyau (paquet linux-image) est mis à jour.
- Méthodes obsolètes : dans des temps reculés on pouvait utiliser
envy
,make-kpkg
, etmodule-assistant
. Toutes ces méthodes sont aujourd'hui obsolètes.
- Méthode 1 (recommandée) : via les paquets debian
- Méthode 2 (déconseillée) : Installation avec le script nvidia
- Tests
- En cas de problème
- Installer sur le pilote libre (nouveau)
- Liens utiles
Méthode 1 (recommandée) : via les paquets debian
1) Activer les dépôtscontribet
non-free.
Par défaut, debian ne propose que des paquets libres. Or le pilote
nvidiaest propriétaire, donc pas disponible par défaut. Pour remédier à ce problème, il faut donc activer les dépôts
non-freeet
contrib. Pour cela, corriger
/etc/apt/sources.list:
pkexec gedit /etc/apt/sources.list &et ajouter à côté de
mainles mots clés
contribet
non-free.
Exemple : :
deb http://ftp.fr.debian.org/debian/ testing main contrib non-free
deb http://security.debian.org/debian-security/ testing/updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ testing-updates main contrib non-free
2) Installer
xserver-xorg-video-nvidia
Lancer les commandes suivantes :
sudo apt update
sudo apt upgrade
sudo apt install xserver-xorg-video-nvidia
Si le paquet n'est pas trouvé, il faut vérifier le fichier
/etc/apt/sources.list. En particulier, il faut contrôler que les dépôts
contribet
non-freesont activés.
3) Redémarrer.
sudo reboot
Méthode 2 (déconseillée) : Installation avec le script nvidia
1) Installer les paquets nécessairessudo apt install linux-headers-$(uname -r) build-essential
2) Télécharger le script nvidia, par exemple dans
/tmp(si vous choisissez un autre dossier, pensez à adapter les commandes suivantes en conséquence).
3) Stopper gestionnaire de connexion (typiquement
lightdm,
sddm, etc) avec la commande :
sudo /etc/init.d/*dm stop
4) S'identifier en mode texte (ctrl alt f1).
5) Lancer le script d'installation :
sudo sh /tmp/NVIDIA-Linux-*.run
6) Redémarrer :
sudo reboot.
Tests
Test 1 : vérifier que le module nvidia est chargéVérifier que le module est chargé avec la commande
lsmod | grep nvidia. Sur une installation fonctionnelle, on doit voir plusieurs lignes de ce genre :
(mando@aldur) (~) $ lsmod | grep nvidia
nvidia_drm 53248 2
nvidia_modeset 1118208 2 nvidia_drm
nvidia 20508672 90 nvidia_modeset
ipmi_msghandler 73728 2 ipmi_devintf,nvidia
drm_kms_helper 233472 2 nvidia_drm,i915
drm 585728 17 drm_kms_helper,nvidia_drm,i915
Test 2 : vérifier que les utilitaires nvidia fonctionnent
Installer le paquet
nvidia-smiet lancer
nvidia-smi.
(mando@aldur) (~) $ nvidia-smi Mon May 4 22:38:46 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.82 Driver Version: 440.82 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce MX150 On | 00000000:02:00.0 Off | N/A | | N/A 49C P8 N/A / N/A | 14MiB / 2002MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 750 G /usr/lib/xorg/Xorg 14MiB | +-----------------------------------------------------------------------------+
En cas de problème
De manière générale il faut commencer par regarder les erreurs reportées par les commandes suivantes :lsmod | grep nvidia
grep EE /var/log/Xorg.0.log
- La première liste les modules nvidia chargés (s'ils sont chargés)
- La seconde liste les éventuelles erreurs au lancement du mode graphique (= serveur graphique = serveur X).
Le module nvidia n'est pas chargé
1) Vérifier la présence que le modulenvidiaest bien installé pour le noyau sur la machine a démarré avec la commande suivante :
ls /lib/modules/$(uname -r)/updates/dkms.
Exemple : ici les modules sont bien présents
(mando@aldur) (~) $ ls /lib/modules/$(uname -r)/updates/dkms
nvidia-current-drm.ko
nvidia-current.ko
nvidia-current-modeset.ko
nvidia-current-uvm.ko
2) Tenter de charger le module
nvidiaà la main.
cd /lib/modules/$(uname -r)/updates/dkms
sudo modprobe nvidia
Si un machine du genre
"modprobe: ERROR: could not insert 'nvidia': Operation not permitted", la machine est protégée par un secure boot. Deux méthodes sont alors possibles.
- Soit désactiver le secure boot :
mokutil --disable-validation
, puis redémarrer. - Soit créer une clé, l'enregistrer dans le bios, et signer le module nvidia (voir : le module nvidia n'est pas signé).
Le module nvidia n'est pas signé
Ceci ne concerne que les installations secure boot (voir section précédente) et se fait en deux étapes :- création de la paire de clé (une seule fois)
- signature du pilote (à chaque mise à jour du noyau)
1) Création de la paire de clés :
Cette étape crée deux fichiers (une clé privée
MOK.privet une clé publique
MOK.der) qui seront utilisées pour signer le pilote nvidia. Il n'est nécessaire de créer les clés qu'une seule fois (ou quand elles expirent, dans la commande qui suit, dans 100 ans). Attention à bien retenir le mot de passe. Assurez vous que vous savez le retaper avec un clavier qwerty.
cd /root
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=My Name/" -nodes
mokutil --import MOK.der
mokutil --list-new
Au redémarrage, une écran bleu apparaîtra donnant l'opportunité de référencer (enroll) ces clés.
- Choisir enroll MOK puis appuyer sur entrée,
- Choisir continue puis appuyer sur entrée,
- Choisir confirm puis appuyer sur entrée,
- Taper le mot de passe (selon un clavier qwerty), puis entrée
- Puis choisir reboot et entrée.
Une fois linux démarrer, on peut vérifier que le certificat X509 que l'on vient de générer est bien chargé avec la commande
dmesg | grep cert. Il sera alors possible de signer des modules.
2) Signature du module nvidia :
Cette étape doit être refaite à chaque mise à jour du noyau. Comme que vous serez amené à refaire, on peut créer un script. On suppose que le script en question s'appelle
/root/sign.sh:
pkexec gedit /root/sign.sh &
... et que les clés sont placées dans
/root/MOK.deret
/root/MOK.version:
#!/bin/bash PRIV=/root/MOK.priv DER=/root/MOK.der for filename in $PRIV $DER do (test -f $filename && echo "$filename found :-)") || (echo "$filename not found" && exit 1) done KBUILD_VER=$(uname -r | cut -d"." -f1,2) echo "Kbuild version $KBUILD_VER" cd /lib/modules/$(uname -r)/updates/dkms for ko in $(ls -1 *.ko) do echo "Signing $ko" /usr/lib/linux-kbuild-$KBUILD_VER/scripts/sign-file sha256 $PRIV $DER $ko done exit 0
Ensuite, on donne les droits en exécution à ce fichier et on l'exécute :
chmod a+x /root/sign.sh
/root/sign.sh
nvidia-smi et nvidia-settings ne se lancent pas
Il peut arriver que, bien que le modulenvidiasoit chargé (voir section précédente), les utilitaires nvidia ne marchent pas.
1) Dans ce cas, lancer la commande
grep EE /var/log/Xorg.0.log. Si ce genre d'erreur apparaît :
[ 324.584] (EE) Failed to load module "nv" (module does not exist, 0)
[ 324.670] (EE) NVIDIA(G0): GPU screens are not yet supported by the NVIDIA driver
[ 324.670] (EE) NVIDIA(G0): Failing initialization of X screen
... comme indiqué dans cette discussion.
2) Il faut alors créer le fichier
/etc/X11/xorg.conf.d/nvidia.conf:
pkexec gedit /etc/X11/xorg.conf.d/nvidia.conf &
... et copier coller dans ce fichier le contenu suivant :
Section "ServerLayout"
Identifier "layout"
Option "AllowNVIDIAGPUScreens"
EndSection
3) Relancer le serveur graphique
sudo /etc/init.d/*dm restartou redémarrer.
Écran noir
1) S'identifier en mode texte (ctrl alt f1).2) Deux explications sont possibles :
- le module
nvidia
est absent (voir 2.a) - le PC a deux cartes graphiques et la carte nvidia n'est pas activée (voir 2.b)
2)a) le module
nvidiaest absent
- Réinstaller le pilote propriétaire
nvidia
. - Installer le pilote libre
nouveau
(voir section suivante).
2)b) le PC a deux cartes graphiques et la carte nvidia n'est pas activée.
On peut vérifier que la carte est activée de deux façons.
Méthode 1 : la carte nvidia est sensée apparaître dans les résultats de la commande
lspci.
Vérifiez que la carte est toujours active une fois le système démarré. Pour cela lancer :
grep EE /var/log/Xorg.0.log
Si l'erreur
Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission deniedapparaît, alors la carte 3D est peut-être désactivée dans le BIOS.
Méthode 2 : installer le pilote via le script nvidia. Si ce dernier ne trouve pas la carte, alors peut-être que la carte est désactivée au niveau du BIOS.
Solution : Redémarrer le PC, entrer dans le BIOS, et vérifier que la carte nvidia est bien activée (quitte à réinitialiser le BIOS avec les paramètres d'usine en cas de doute), puis réinstaller le pilote.
Écran noir au démarrage, mais pas quand on relance le mode graphique
Il peut arriver qu'au lancement de la machine, tout se charge correctement (le module nvidia, le mode graphique commence à se lancer) mais planter car il démarre trop lentement (typiquement plus de 20s). Or si on relance le mode graphique, celui-ci se lance correctement :sudo /etc/init.d/*dm restart
Dans ce cas, l'erreur dans
/var/log/syslog(et non dans
/var/log/Xorg.0.log), c'est le serveur graphique qui a abandonné car le pilote était trop long à charger. Il suffit alors d'augmenter ce délai dans le fichier de configuration de votre gestionnaire de connexion graphique (sddm, lightdm, voir lequel vous utilisez avec
ls /etc/init.d/*dm)
Le mode graphique charge, puis l'ordinateur reste bloqué
Si la machine ne réagit même pas à des raccourcis comme ctrl+alt+suppr ou un ctrl+alt+f1 alors c'est peut être une erreur noyau. Dans ce cas deux solutions sont possibles :- soit installer une version plus récente du pilote
nvidia
. - soit désinstaller le pilote propriétaire
nvidia
et installer le pilote librenouveau
.
Installer sur le pilote libre (nouveau)
1) Installer le pilotenouveau.
sudo apt update
sudo apt upgrade
sudo apt install xerver-xorg-video-nouveau
2) En admettant que vous ayez suivi la méthode 1, purger tous les paquets liés à nvidia (sinon, désinstallez le pilote via le script
.run)
sudo apt purge $(dpkg -l | grep ^ii | cut -d" " -f3 | grep ^nvidia)
3) Renommer l'éventuel fichier
/etc/X11/xorg.conf:
sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.old.
4) Redémarrer :
sudo reboot.
Liens utiles
- Si vous avez plusieurs cartes graphiques (nvidia pour le jeu, intel pour l'autonomie), il peut être d'installer par la suite https://wiki.debian.org/fr/Bumblebee.
- https://wiki.debian.org/NvidiaGraphicsDrivers#head-783b4c1ece4093dca2810eeff7da15c17a2b031a
- http://debian-facile.org/forum/viewtopic.php?id=693
Ce document intitulé « Installer drivers nvidia sous debian » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.