Linux, Drivers nVidia et Secure Boot

Grâce à la magie de ChatGPT, qui elle-même ne peut opérer que grâce à la magie de StackOverflow et autres sites avec de vrais gens dessus, je vous propose aujourd’hui de signer nos drivers nVidia.

Le problème

Lorsque vous utilisez Secure Boot, les pilotes non signés numériquement sont automatiquement bloqués par le système.
Autant les pilotes nVidia en usage côté Windows sont a priori signés, sinon nous n’avons tout simplement pas le souci, autant côté Linux, c’est pas la même limonade : peu importe ce que vous installez, les drivers officiels ne sont pas chargés et vous vous retrouvez avec un bureau limite en 640×480.
Et ceci, c’est inacceptab’.
Le signe que ça coince, c’est ceci :

sudo modprobe nvidia

Qui retourne :

modprobe: ERROR: could not insert 'nvidia': Key was rejected by service

La (une?) solution

Gardez en tête que j’ai vaguement pigé comment ça se passe, mais je ne maîtrise vraiment rien dans ce sujet.
De ce que j’en ai compris, Secure Boot doit enregistrer la clé liée à un pilote.
Soit cette clé est connue, auquel cas le pilote sera chargé, soit elle ne l’est pas (inexistante ou inconnue) et le pilote n’est pas chargée.

Nous allons donc signer nous-mêmes nos pilotes et enregistrer la clé dans Secure Boot (enfin, dans la partie qui gère les clés de Secure Boot).

Dégainez le terminal, puis, dans l’ordre :

sudo apt update
sudo apt install mokutil openssl
cd ~
mkdir -p ~/secureboot-keys
cd ~/secureboot-keys
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=NVIDIA Secure Boot/"

Choisissez votre mot de passe, comme écrit ci-dessus, puis :

sudo mokutil --import MOK.der

Ceci fait, rebootez, puis sélectionnez dans le nouvel écran qui s’affiche Enroll MOK :

Puis Continue (ou View Key, si vous voulez voir que la clé s’appelle bien “NVIDIA Secure Boot”…)

Entrez ensuite le fameux mot de passe :

Ceci fait, vous pouvez redémarrer et retourner sous Linux.

Assurez-vous d’avoir installé les drivers qui vous intéressent (il risque d’y avoir besoin de plusieurs essais, mais le plus dur est passé) :

sudo apt install nvidia-driver-<tab> # pour afficher toutes les versions disponibles
# Puis une fois la version qui vous intéresse repérée :
sudo apt install nvidia-driver-550 dkms -y

Redémarrez (ça sera toujours moche, c’est normal).
Prochaine étape, téléchargez le script suivant (évidemment ChatGPT) et adaptez le chemin de KEYS_DIR à votre propre localisation des clés .der et .priv générées tataleur.

Bien sûr, n’oubliez pas de faire un chmod +x à sign-nvidia.sh pour que le script s’exécute.

Enfin, sudo ./sign-nvidia.sh pour que, si tout va bien, la magie s’opère.
Redémarrez (on finit par s’y faire).
Et confirmez par :

sudo modprobe nvidia && nvidia-smi

Qui cette fois devrait renvoyer un tableau au lieu de Key rejected!

En espérant que cela vous ait aidé!

Leave a Reply

Your email address will not be published. Required fields are marked *