mamiemando
Messages postés33499Date d'inscriptionjeudi 12 mai 2005StatutModérateurDernière intervention28 janvier 2025
-
Modifié le 29 sept. 2023 à 15:33
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 :
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.
, puis redémarrer. Cette méthode n'est pas envisageable si un Windows est installé en dual boot, car Windows refusera de démarrer si le secure boot est désactivé.
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.
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 :
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 :
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)
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.