Installer les pilotes nvidia sous Linux Debian
Installer le pilote propriétaire nvidia
- Méthode 1 (recommandée) : via les paquets debian
- Méthode 2 (déconseillée) : Installation avec le script nvidia
- Le module nvidia n'est pas chargé
- Le module nvidia n'est pas signé
- nvidia-smi et nvidia-settings ne se lancent pas
- Écran noir
- Écran noir au démarrage, mais pas quand on relance le mode graphique
- Le mode graphique charge, puis l'ordinateur reste bloqué
Alternative : Installer sur le pilote libre (nouveau)
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, module-assistant, make-kpkg. Toutes ces méthodes sont aujourd'hui obsolètes.
Méthode 1 (recommandée) : via les paquets debian
1) Par défaut, debian ne propose que des paquets libres. Or le pilote nvidia est propriétaire, donc pas disponible par défaut. Pour remédier à ce problème il faut activer les dépôts contrib et non-free. Comme expliqué ici, pour les debian bookworm (debian 12) et plus récentes, un nouveau dépôt, non-free-firmware est apparu, et il faudra également l'ajouter aux dépôts.
Pour corriger les dépôts Debian utilisés par APT, on corrige le fichier /etc/apt/sources.list par exemple avec gedit :
sudo gedit /etc/apt/sources.list &
Ajouter à côté de main les mots-clés contrib, non-free, et éventuellement non-free-firmware.
Exemple :
deb http://ftp.fr.debian.org/debian/ testing main contrib non-free non-free-firmware deb http://security.debian.org/debian-security/ testing/updates main contrib non-free non-free-firmware deb http://ftp.fr.debian.org/debian/ testing-updates main contrib non-free non-free-firmware
2) Installer le paquet xserver-xorg-video-nvidia :
sudo apt update sudo apt upgrade sudo apt install xserver-xorg-video-nvidia
3) Redémarrer.
sudo reboot
Méthode 2 (déconseillée) : Installation avec le script nvidia
1) Installer les paquets nécessaires :
sudo 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) Passer en mode texte (ctrl alt f2, s'identifier en root) et stopper gestionnaire de connexion (typiquement lightdm, sddm, etc.) :
sudo /etc/init.d/*dm stop
4) Lancer le script d'installation :
sudo sh /tmp/NVIDIA-Linux-*.run
5) 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
Exemple :
(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
1) Installer le paquet nvidia-smi :
sudo apt install nvidia-smi
2) Vérifier que la carte est bien reconnue avec la commande suivante :
nvidia-smi
Exemple :
(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). S'ils ne le sont pas il faut comprendre pourquoi. Les explications sont généralement
- Le module nvidia n'est pas signé, mais le secure boot est activé
- Le module nvidia n'a pas été recompilé/réinstallé pour la version de noyau actuelle.
- 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 module nvidia est 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
S'ils ne le sont pas, réinstaller les pilotes nvidia.
2) Tenter de charger le module nvidia à la main.
cd /lib/modules/$(uname -r)/updates/dkms sudo modprobe nvidia
Si une l'erreur suivante apparaît :
"modprobe: ERROR: could not insert 'nvidia': Operation not permitted"
... c'est que la machine est protégée par un secure boot qui empêche à ce stade de charger le module nvidia.
Pour résoudre ce problème, deux méthodes sont possibles.
- Méthode 1 : désactiver le secure boot :
mokutil --disable-validation
- Méthode 2 : 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)
Création de la paire de clés
Cette étape crée deux clés(une clé privée MOK.priv et une clé publique MOK.der). Elles respectivement sont utilisées pour signer et charger le pilote nvidia. Les clés n'ont pas besoin d'être renouvelées tant qu'elle n'expirent pas. Les commandes suivantes leur donne une validité de 100 ans. Lors de la création des clés, attention à bien retenir le mot de passe. En outre, assurez-vous que vous savez le retaper avec un clavier qwerty, car votre BIOS vous demandera ce mot de passe et fonctionnera potentiellement en 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émarré, 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.
Signature du module
Cette étape doit être refaite à chaque mise à jour du noyau (paquet linux-image-*). Comme que vous serez amené à refaire cette étape régulièrement, on peut créer un script nommé /root/sigh.sh pour faciliter la signature :
sudo gedit /root/sign.sh &
On suppose dans le script suivant que les clés sont /root/MOK.der et /root/MOK.priv
#!/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
On peut vérifier que le module se charge désormais correctement :
sudo modprobe nvidia sudo dmesg | tail lsmod | grep nvidia
nvidia-smi et nvidia-settings ne se lancent pas
Il peut arriver que, bien que le module nvidia soit chargé (voir section précédente), mais que malgré tout, les utilitaires nvidia ne marchent pas.
1) Dans ce cas, lancer la commande :
grep EE /var/log/Xorg.0.log
2) 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, 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 restart
(ou redémarrer l'ordinateur).
Écran noir
Deux explications sont possibles. Dans les deux cas, il faudra la résoudre en passant en mode texte (ctrl alt f2):
- le module nvidia est absent (voir cas A)
- le PC a plusieurs cartes graphiques et la carte nvidia n'est pas activée (voir cas B)
Cas A : le module nvidia est absent
- Solution 1 : réinstaller le pilote propriétaire nvidia (se reporter à la section "Installer le pilote propriétaire nvidia")
- Solution 2 : Installer le pilote libre nouveau (se reporter à la section "Alternative : installer le pilote libre nouveau")
Cas B : le PC a plusieurs cartes graphiques et la carte nvidia n'est pas activée.
1) Vérifier si 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érifier que la carte est toujours active une fois le mode graphique démarré :
grep EE /var/log/Xorg.0.log
Si l'erreur suivante apparaît :
Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied
.... la carte 3D est sans doute 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 probablement 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 est inscrite dans /var/log/syslog (et non dans /var/log/Xorg.0.log). Elle a lieu si le serveur graphique a abandonné, car le chargement du pilote nvidia était trop long. Cela peut arriver sur des ordinateurs anciens. Il suffit alors d'augmenter ce délai dans le fichier de configuration de votre gestionnaire de connexion graphique (e.g., sddm ou lightdm)/ La commande suivante permet de voir quel gestionnaire de connexion est utilisé (il suffit alors de se référer à la documentation dudit gestionnaire de connexion pour paramétrer le délai de chargement)
ls /etc/init.d/*dm
Le mode graphique se 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 libre nouveau à la place. Désinstaller le pilote nvidia est nécessaire, car si les deux pilotes sont installés, ce sera le pilote nvidia qui prendra le pas.
Alternative : Installer sur le pilote libre (nouveau)
1) Installer le pilote nouveau
sudo apt update sudo apt upgrade sudo apt install xerver-xorg-video-nouveau
2) Purger le pilote nvidia
- S'il a été installé via apt :
sudo apt purge $(dpkg -l | grep ^ii | cut -d" " -f3 | grep ^nvidia)
- S'il a été installé par le script nvidia
sudo /tmp/NVIDIA-Linux-*.run --uninstall
3) Renommer l'éventuel fichier /etc/X11/xorg.conf afin qu'il ne soit plus pris en compte et que le mode graphique démarre avec les paramètres par défaut :
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 Bumblebee.
- Wiki debian : pilote nvidia