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
VERY IMPORTANT pour la suite : nous allons créer une paire de clés, que nous allons ensuite inscrire de manière à ce qu’elles soient reconnues par Secure Boot.
Cette paire de clés sera protégée par un mot de passe le temps de l’enregistrer dans Secure Boot.
Ce mot de passe ne sera demandé qu’une seule fois.
MAIS!! Ce processus d’enregistrement se fait au boot de la machine. Votre clavier a de fortes chances de se retrouver en QWERTY (enfin, ce fut le cas du mien). Et donc, si ce mot de passe est sensible aux caractères AZERTY/QWERTY, attention, car aucun caractère n’est inscrit à l’écran!
Pensez donc à choisir un mot de passe, même bidon, avec des caractères insensibles à la disposition du clavier, genre tyuiop, par exemple.
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é!