1 - Introduction
Depuis des lustres l’installation des cartes graphiques NVidia est un véritable calvaire pour beaucoup.
Avec les nouvelles générations de cartes, les pilotes fournis par Debian ne sont plus suffisamment à jour, voir ne prennent tout simplement pas en charge certains modèles de cartes. Parfois, ce sont des modèles de cartes qui ne sont plus pris en charge car trop anciens.
Le pilote nouveau n’est pas à la hauteur des besoins, en particulier pour les applications graphiques de haut niveau, comme la CAO/DAO, l’image de synthèse, ou tout simplement les jeux.
Ce tutoriel va expliquer comment installer un pilote fourni par NVidia (i.e.: pilote qui n’est pas un package Debian). Il prendra en charge la partie Secure Boot. Aujourd’hui, ce n’est pas une bonne idée de désactiver le Secure Boot de son ordinateur. Passer une installation de Secure Boot Désactivé à Secure Boot Activé n’est pas le sujet ici. C’est d’ailleurs un sujet assez complexe et difficile à réaliser.
Par contre, une installation neuve faite sur une machine avec Secure Boot Activé ne pose aucun problème.
2 - Environnement
Pour la réalisation de ce tutoriel, je me suis basé sur ma propre configuration:
ASUS ProArt X870E-CREATOR WIFI
AMD Ryzen 7 9800X3D
RAM 32Go DDR5
NVidia GeForce RTX 5060 Ti 16Go
NVMe 2T Samsung SSD 9100 PRO x 2 Chiffrés
Secure Boot Activé
3 - Réalisation de l’installation
L’installation du pilote NVidia nécessite des pré-requis important, à la fois pour s’assurer que celle-ci se déroule correctement, mais aussi pour s’assurer qu’il ne manque rien et en particulier l’OpenGL avec EGL, mais aussi les pilotes 32bits nécessaire à faire fonctionner Steam par exemple.
Il est aussi clairement évident qu’il ne faut faire l’opération qu’avec un système mis à jour.
ATTENTION: il faut faire l’"installation en root. Je déconseille fortement de le faire avec sudo. Il vaut mieux le faire en console, en local (éviter une connexion distante autant que possible), et bien sur avec le compte root.
Les opérations sont les suivantes:
- Mettre à jour le système
- Télécharger le pilote nvidia correspondant à votre carte
- Supprimer tous les packages Nvidia existant (sauf le firmware bien sur)
- Installer les packages nécessaire (y compris les 32bits
- Avec Secure Boot, implémenter la signature (important sinon ça ne marche pas)
- Arrêter l’environnement graphique (le pilote refuse de s’installer si votre display manager est actif)
- Installer le pilote
- Relancer le Display Manager
3.1 - Téléchargement du pilote
Le téléchargement se fait ici
Avec, pour mon cas:



N’oubliez pas que le pilote devra être accessible par root avec le fichier obtenu propriété de root. Ce fichier d’installation est assez sensible à son environnement d’exécution.
J’obtiens le fichier: NVIDIA-Linux-x86_64-580.119.02.run
3.2 - Supprimer les packages nvidia existant
Il ne faut pas supprimer le firmware nvidia qui est absolument nécessaire, mais tous les autres paquets peuvent êtres supprimés:
dpkg --list | grep -i nvidia | awk '{ print $2}' | grep -v firmware-nvidia-graphic | xargs apt -yq purge
3.3 - Installer les packages nécessaire
Pour ceux qui utilisent des jeux graphiquement gourmand, je ne saurais leur conseiller d’installer les packages i386. Pour Steam c’est obligatoire. En fait le lien n’est pas avec le fait d’être gourmand, mais que si le jeu utilise des librairies 32bits et que vous ne les avez pas il va se replier vers nouveau. Et comme nouveau sera désactivé, alors ça ne marchera pas.
Il faut d’abord activer l’architecture i386 pour APT:
dpkg --add-architecture i386
Puis installer les packages:
apt -yq install libegl-mesa0:i386 libegl1-mesa-dev:i386 libgl1-mesa-dev:i386 libgl1-mesa-dev libegl1-mesa-dev libegl-mesa0 glx-alternative-mesa libgles2-mesa-dev:i386 libgles2-mesa-dev libglu1-mesa-dev:i386 libglu1-mesa-dev libglx-mesa0:i386 libglx-mesa0 pkg-config
ATTENTION: le package pkg-config est obligatoire pour éviter le message d’erreur concernant la librairie glvnd.
3.4 - Implémentation Secure Boot
3.4.1 - Introduction
Si Secure Boot n’est pas activé, passé au chapitre suivant (3.5)
Si Secure Boot est activé, il faut obligatoirement s’assurer que les pilotes nvidia vont être signé lors de l’installation. C’est obligatoire. Sinon, le système refusera de charger les pilotes.
Il est préférable de s’assurer de la présence de DKMS, afin de ne pas avoir à recompiler le pilote à chaque mise à jour du noyau.
Pour cela, plusieurs étapes:
- Installer DKMS (si ce n’est pas déjà le cas), et créer les répertoires nécessaires
- Créer la clef et le certificat
- Enrôler le certificat
3.4.2 - Installer DKMS
L’installation est extrêmement simple:
apt -yq install dkms
Vérifiez que le répertoire suivant existe bien:
/var/lib/dkms
Avec les droits suivants:
~# stat /var/lib/dkms
Fichier : /var/lib/dkms
Accès : (0755/drwxr-xr-x) UID : ( 0/ root) GID : ( 0/ root)
NOTE: les droits 0755 pourraient être 0750 pour plus de sécurité. Je n’ai ps encore testé cette approche.
3.4.3 - Créer la clef et le certificat
NOTE: Sachez que cette clef et ce certificat =pourront être ceux que vous utiliserez si vous implémentez l’Unified kernel Image, ou UKI)
En premier lieux, nous allons stocker les fichiers dans le répertoire /var/lib/shim-signed/mok et /var/lib/dkms. Car un certain nombre d’outils, ou de documentations, utilisent ce répertoire pour ces clefs (shim-signed est lié à l’UEFI).
le répertoire dkms existant déjà, il suffit de créer l’autre:
mkdir -p /var/lib/shim-signed/mok
MOK est l’accronym de Machine Owner Key. L’outil pour gérer ces clefs est mokutil.
Vous pouvez regarder les clefs déjà enrôlées avec:
mokutil --list-enrolled
A minima vous y verrez celle de Debian, si vous êtes en dual boot avec WIndows il y a aura celle de Microsoft, etc…
La clef est une clef RSA (les système de clef Secure Boot ne sont pas encore implémentées avec l’ED25519 qui serait bien plus pratique et moins consommatrice de ressource).
Sachant que RSA 2048 n’est plus suffisamment sécurisé, j’utilise des clefs RSA 4096.
La création de la clef se fait de la façon suivante:
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out /var/lib/dkms/MOK.priv
Le certificat est généré en utilisant cette clef, avec des paramètres permettant de bien identifier celui-ci, attention, c’est un certificat auto-signé:
openssl req \
-x509 \
-nodes \
-not_before $(date -d "today" +"%Y%m%d000000Z") \
-not_after $(date -d "$dt1 + 30 years" +"%Y%m%d000000Z") \
-new \
-key /var/lib/dkms/MOK.priv \
-outform DER \
-out /var/lib/dkms/MOK.der \
-subj "/C=<county code ISO 2 caractères>/ST=<Ma Region>/L=<Ma Ville>/O=<Mon Organisation>/OU=<L'unité d'Organisation>/CN=<Common Name>/" \
-addext "basicConstraints = critical, CA:TRUE" \
-addext "keyUsage = critical, digitalSignature, keyCertSign, cRLSign" \
-addext "extendedKeyUsage = critical, codeSigning" \
-addext "authorityInfoAccess = OCSP;URI:<http://ocsp.mon.domaine.tld>/,caIssuers;URI:<https://dsa.mondomaine.tld/secure-boot-ca"
Avec le détail des options:
- -x509: c’est un certificat de type X509, rien de nouveau ici
- -noenc: l’option -nodes étant dépréciée c’est celle-ci qu’il faut désormais utiliser. Cette option ne sert qu’à créer la clef si celle-ci n’existe pas. Vous pouvez ne pas la mettre si la clef existe.
- -not_before, -not_after: je calcule ici la date du jour à 0h pour le début de validité du certificat, et la date du même jour à minuit 30 ans plus tard pour la date de fin de validité. N’oubliez pas qu’un certificat peut toujours se révoquer en cas de problème.
- -new: c’est un nouveau certificat
- -key: la clef privée crée juste avant (chemin absolu, c’est préférable)
- -outform: le format de sortie du certificat sera au format DER (format binaire), c’est obligatoire
- -out: le chemin d’accès au fichier du certificat (chemin absolu)
- -subj: Le nom du sujet, ici c’est le format x509 que j’ai utilisé, à minima, il faut le CN, le reste n’est pas obligatoire.
- -addext basicConstraints : ce sont les contraintes de base du certificat: critique signifie que c’est obligatoire (mandatory: critical) le certificat est un CA (Autorité de Certification)
- -addext keyUsage: les extension d’utilisation de la clef: obligatoire (critical), ses usages sont la signature digitale, la signature de clef de certificat, et la signature de liste de révocation de certificat
- -addext extendedKeyUsage: extension des usages: obligatoire, signature de code
- -addext authorityInfoAccess: optionnel, permet de définir le serveur ocsp et l’émetteur du certificat racine
On met à jour les droits sur ces fichiers (root only):
chmod 0600 /var/lib/dkms/*
On recopie les fichiers de /var/lib/dkms vers /var/lib/shim-signed/mok:
cp -v /var/lib/dkms/MOK.* /var/lib/shim-signed/mok/
Et pour que DKMS sache quels fichiers il doit prendre en compte il faut modifier le fichier de configuration /etc/dkms/framework.conf pour avoir:
mok_signing_key=/var/lib/dkms/MOK.priv
mok_certificate=/var/lib/dkms/MOK.der
je le fait directement avec sed pour n’avoir qu’une seule occurrence dans mon fichier:
sed -Ei 's/^[#]*\s*(mok_signing_key=).*/\1\/var\/lib\/dkms\/MOK.priv/g' /etc/dkms/framework.conf
sed -Ei 's/^[#]*\s*(mok_certificate=).*/\1\/var\/lib\/dkms\/MOK.der/g' /etc/dkms/framework.conf
3.4.4 - Enrôler la clef
Maintenant que la clef et le certificat sont créés, il faut enrôler le certificat.
C’est avec mokutil que cette action se réalise. L’enrôlement est une opération qui consiste à importer le certificat dans le gestionnaire de clef de votre carte mère (au niveau du BIOS donc).
Elle se fait en plusieurs étapes:
- mokutil génére l’ordre d’import du certificat pour l’enrôlement
- Reboot de la machine
- Au démarrage le bios va indiquer qu’une action d’enrôlement est en attente, et vous demander de la réaliser ou non. Si vous vous contentez de démarrer le système, l’enrôlement est annulé et effacé de la file d’attente du BIOS.
- Un fois l’enrôlement réalisé, démarrage du système
- Une fois votre session ouverte, vous devez voir votre certificat dans la liste de la commande
mokutil --list-enrolled
Cette opération impose l’utilisation d’un mot de passe.
ATTENTION: la saisie du mot de passe se fera avec un clavier QWERTY, pensez-y avant de définir votre mot de passe.
En cas d’échec de la saisie du mot de passe, l’opération est un échec et il faut recommencer.
Deux options possible:
- vous définissez votre propre mot de passe
- vous utiliser le mot de passe root
Ce qui donne:
-
moktutil --import /var/lib/shim-signed/mok/MOK.der,il vous demandera deux fois votre mot de passe -
mokutil -P --import /var/lib/shim-signed/mok/MOK.der, il ne vous demande pas votre mot de passe, ce sera celui de root. Parfois on peut avoir une erreur indiquant qu’il n’arrive pas à hash le mot de passe root. Reportez vous à l’option 1 dans ce cas.
3.5 - Arrêter votre display manager
Le pilote propriétaire NVidia n’autorise pas que le display manager soit actif. Il faut donc l’arrêter.
Pour se faire, mettez vous en console TTY avec ALT-Fn (n de 1 à 6 par défaut, suivant votre configuration des console TTY), et ouvrez une session root.
Arrêt du DM:
systemctl stop $DM
où $DM peut avoir l’une des valeurs suivantes:
- gdm3 (gdm)
- sddm
- lightdm
3.6 - Installation du pilote
Nous y voilà enfin, nous pouvons procéder enfin à l’installation du pilote (ceux n’utilisant pas Secure Boot y sont déjà depuis un moment
)
vous pouvez lancer la commande d’installation:
sh conffiles-std/NVIDIA-Linux-x86_64-580.105.08.run --tmpdir /root/tmp --module-signing-secret-key=/var/lib/shim-signed/mok/MOK.priv --module-signing-public-key=/var/lib/shim-signed/mok/MOK.der --dkms --install-libglvnd --rebuild-initramfs --disable-nouveau
Avec les options suivantes:
- –tmpdir /root/tmp : répertoire de travail, obligatoire. J’utilise un répertoire spécifique dans mon répertoire root, car chez moi /tmp et /var/tmp sont tous les deux montés en noexec pour des raisons de sécurité.
- –module-signing-secret-key: la clef privé de votre certificat enrôlé. Le chemin est obligatoirement absolu
- –module-signing-public-key: le certificat enrôlé. Le chemin est obligatoirement absolu
- –dkms: indique que vous voulez activer la gestion DKMS pour assurer la continuité de votre pilote lors d’une mise à) jour du noyau. fortement recommandé
- –install-libglvnd: s’assurer de la plrise en compte de la librairie glvnd. Sans cette option et sans message d’erreur éventuel, cette option est importantes pour certains jeux entre autres.
- –rebuild-initramfs: reconstruire l’initramfs, sinon la prise en compte de votre pilote ne se fera ps au démarrage
- –disable-nouveau: desactivation du pilote nouveau bien évidement; plus besoin de ce truc
Lot du lancement, certaines question resteront posées. IL n’est pas possible de lancer l’installation avec toutes les réponse aux questions en lignes de commande. Certains doivent être indiquées lors de son exécution:
- Le choix du pilote: prendre MIT/GPL
- La compilation des pilotes 32bits: ne vous sera posée que si vous avez installé des packages 32bits. A accepter si vous utilisez Steam
- La modification de votre fichier xorg.conf: Normalement, sauf problème particulier lié à votre matériel, lors de l’installation de Debian vous n’avez rien eu à faire. Si vous utilisez Wayland vous n’en avez pas. Refusez cette modification. C’est important car sinon ça vous met le bazar. Autant mettre à jour ce fichier si vous en avez besoin à la main.
3.7 - Fin de l’installation
Vous pouvez relancer votre Display manager. Vous devriez avoir directement votre greeter de session qui s’affiche 
Comme vous avez régénéré votre initramfs, je ne saurait que vous recommander de relancer votre système.
N.B.
Pour tout commentaire, afin de ne pas polluer ce tutoriel, utiliser le fil de discussion ici. Y compris pour votre problèmes éventuels. Selon les cas, j’ajouterais une section Troubleshooting/Dépannage dans ce wiki avec le cas rencontré, et leur solution/contournement.
