Installer drivers nvidia sous debian


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
    ,
    make-kpkg
    , et
    module-assistant
    . Toutes ces méthodes sont aujourd'hui obsolètes.



Méthode 1 (recommandée) : via les paquets debian

1) Activer les dépôts
contrib
et
non-free
.


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 donc activer les dépôts
non-free
et
contrib
. Pour cela, corriger
/etc/apt/sources.list
:
pkexec gedit /etc/apt/sources.list &
et ajouter à côté de
main
les mots clés
contrib
et
non-free
.

Exemple : :

deb http://ftp.fr.debian.org/debian/ testing main contrib non-free
deb http://security.debian.org/debian-security testing/updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ testing-updates main contrib non-free


2) Installer
xserver-xorg-video-nvidia


Lancer les commandes suivantes :

sudo apt update
sudo apt upgrade
sudo apt install xserver-xorg-video-nvidia


Si le paquet n'est pas trouvé, il faut vérifier le fichier
/etc/apt/sources.list
. En particulier, il faut contrôler que les dépôts
contrib
et
non-free
sont activés.

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) Stopper gestionnaire de connexion (typiquement
lightdm
,
sddm
, etc) avec la commande :

sudo /etc/init.d/*dm stop


4) S'identifier en mode texte (ctrl alt f1).

5) Lancer le script d'installation :

sudo sh /tmp/NVIDIA-Linux-*.run


6) 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
. Sur une installation fonctionnelle, on doit voir plusieurs lignes de ce genre :

(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

Installer le paquet
nvidia-smi
et lancer
nvidia-smi
.

(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)
  • 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


2) Tenter de charger le module
nvidia
à la main.

cd /lib/modules/$(uname -r)/updates/dkms
sudo modprobe nvidia


Si un machine du genre
"modprobe: ERROR: could not insert 'nvidia': Operation not permitted"
, la machine est protégée par un secure boot. Deux méthodes sont alors possibles.

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)


1) Création de la paire de clés :

Cette étape crée deux fichiers (une clé privée
MOK.priv
et une clé publique
MOK.der
) qui seront utilisées pour signer le pilote nvidia. Il n'est nécessaire de créer les clés qu'une seule fois (ou quand elles expirent, dans la commande qui suit, dans 100 ans). Attention à bien retenir le mot de passe. Assurez vous que vous savez le retaper avec un clavier 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émarrer, 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.

2) Signature du module nvidia :

Cette étape doit être refaite à chaque mise à jour du noyau. Comme que vous serez amené à refaire, on peut créer un script. On suppose que le script en question s'appelle
/root/sign.sh
:

pkexec gedit /root/sign.sh &


... et que les clés sont placées dans
/root/MOK.der
et
/root/MOK.version
:

#!/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

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), les utilitaires nvidia ne marchent pas.

1) Dans ce cas, lancer la commande
grep EE /var/log/Xorg.0.log
. 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.

2) 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.

Écran noir

1) S'identifier en mode texte (ctrl alt f1).

2) Deux explications sont possibles :
  • le module
    nvidia
    est absent (voir 2.a)
  • le PC a deux cartes graphiques et la carte nvidia n'est pas activée (voir 2.b)


2)a) le module
nvidia
est absent
  • Réinstaller le pilote propriétaire
    nvidia
    .
  • Installer le pilote libre
    nouveau
    (voir section suivante).


2)b) le PC a deux cartes graphiques et la carte nvidia n'est pas activée.

On peut vérifier que 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érifiez que la carte est toujours active une fois le système démarré. Pour cela lancer :

grep EE /var/log/Xorg.0.log


Si l'erreur
Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied
apparaît, alors la carte 3D est peut-être 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 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 dans
/var/log/syslog
(et non dans
/var/log/Xorg.0.log
), c'est le serveur graphique qui a abandonné car le pilote était trop long à charger. Il suffit alors d'augmenter ce délai dans le fichier de configuration de votre gestionnaire de connexion graphique (sddm, lightdm, voir lequel vous utilisez avec
ls /etc/init.d/*dm
)

Le mode graphique 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
    .

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) En admettant que vous ayez suivi la méthode 1, purger tous les paquets liés à nvidia (sinon, désinstallez le pilote via le script
.run
)

sudo apt purge $(dpkg -l | grep ^ii | cut -d" " -f3 | grep ^nvidia)


3) Renommer l'éventuel fichier
/etc/X11/xorg.conf
:
sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.old
.

4) Redémarrer :
sudo reboot
.

Liens utiles

Cet article est régulièrement mis à jour par des experts sous la
direction de Jean-François Pillou, fondateur de CommentCaMarche
et directeur délégué au développement numérique du groupe Figaro.

A voir également

Ce document intitulé « Installer drivers nvidia sous debian » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.