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