Aller au contenu

Pilote NVidia 470.xx sous Debian 13 Trixie

NVidia

Dans mon quotidien professionnel, je suis régulièrement confronté à du matériel un peu ancien, notamment dans un lycée privé de la région dont j'administre le parc de machines qui tourne à 100 % sous Linux.

Certaines de ces machines sont équipées d'une carte graphique NVidia GeForce GT 710. Avec ce genre de carte, on se retrouve confronté à un dilemme :

  • Accepter les performances modestes du pilote libre nouveau.

  • Sauter à travers des cerceaux en feu pour installer le pilote propriétaire nvidia.

Je ne vais pas faire le choix à votre place. Je me contente simplement de décrire la procédure ─ pas tout à fait triviale certes ─ pour installer le pilote propriétaire. Elle est le fruit d'un après-midi pluvieux passé à expérimenter en mode tentative et échec.

Le pilote 470.xx n'est plus maintenu par NVidia

Le pilote propriétaire adapté à cette carte n'est plus officiellement maintenu par NVidia. Je vais utiliser la dernière version du pilote publiée par le fabricant en connaissance de cause et l'adapter pour qu'il fonctionne correctement sur un système Debian moderne.

Avant de mettre la main à la pâte

Je pars d'une installation standard de Debian 13 Trixie. J'ai juste remplacé GNOME par KDE dans l'installateur, mais pour le reste, j'utilise la configuration par défaut.

J'effectue la mise à jour initiale du système :

# apt update
# apt upgrade

J'installe les outils de construction nécessaires :

# apt install gcc make linux-headers-amd64 dkms pkg-config libglvnd-dev

Je bascule en mode console :

# systemctl set-default multi-user.target
# systemctl isolate multi-user.target

Blacklister le module nouveau

Le module libre nouveau utilisé par défaut entre en conflit avec le module propriétaire nvidia. Avant toute chose, je vais donc empêcher le chargement de ce module. Pour ce faire, je vais créer un fichier /etc/modprobe.d/nouveau-blacklist.conf et l'éditer comme ceci 

/etc/modprobe.d/nouveau-blacklist.conf
blacklist nouveau
options nouveau modeset=0

Je reconstruis le disque mémoire initial :

# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.12.57+deb13-amd64

Je redémarre :

# reboot

Résolution de la console

Vous constaterez au démarrage que la résolution de la console a changé, et ce n'est pas toujours très beau à voir. C'est même franchement moche. Ne vous inquiétez pas, on va gérer tout ça en temps et en heure.

Je vérifie que le module nouveau n'est pas chargé :

# lsmod | grep nouveau

Télécharger le pilote

Je crée un répertoire pour récupérer le pilote :

# mkdir -v nvidia
mkdir: created directory 'nvidia'
# cd nvidia/

Je me rends sur le site de NVidia et je recherche le pilote approprié pour ma carte :

NVidia GT 710

Je récupère le fichier NVIDIA-Linux-x86_64-470.256.02.run et je le range dans mon répertoire local nvidia.

# ls -lh NVIDIA-Linux-x86_64-470.256.02.run
-rw-r--r-- 1 root root 261M May 23  2024 NVIDIA-Linux-x86_64-470.256.02.run

Télécharger les patchs

Dans l'état actuel des choses, le pilote ne fonctionne pas sur un système Debian 13 pour toute une série de raisons que je ne détaillerai pas trop ici.

Je suis allé voir du côté de Slackware Linux, une distribution que j'ai utilisée pendant de longues années. J'ai trouvé mon bonheur sur le site SlackBuilds.org, un projet qui fournit tout ce qu'il faut pour construire des paquets tiers sur cette distribution. Plus exactement la page dédiée au pilote NVidia 470, qui arbore toute une série de patchs pour rectifier le tir et faire fonctionner ce pilote sur un système récent.

NVidia GT 710

Sur cette page, je télécharge les quatre patchs suivants :

  • nvidia-470xx-fix-linux-6.12.patch

  • nvidia-legacy470-follow_pfn.patch

  • nvidia-legacy470-gcc14.patch

  • nvidia-legacy470-iosys_map.patch

Je range ces patchs dans le même répertoire nvidia que le pilote :

# ls
nvidia-470xx-fix-linux-6.12.patch
nvidia-legacy470-follow_pfn.patch
nvidia-legacy470-gcc14.patch
nvidia-legacy470-iosys_map.patch
NVIDIA-Linux-x86_64-470.256.02.run

Appliquer les patchs

L'option --extract-only permet de décompresser l'archive sans lancer l'installation :

# sh NVIDIA-Linux-x86_64-470.256.02.run --extract-only
Creating directory NVIDIA-Linux-x86_64-470.256.02
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 470.256.02

Je me rends dans le sous-répertoire kernel du répertoire nouvellement créé et j'applique les patchs l'un après l'autre, comme ceci :

cd NVIDIA-Linux-x86_64-470.256.02/kernel/
# patch -p1 < ../../nvidia-470xx-fix-linux-6.12.patch
patching file nvidia-drm/nvidia-drm-drv.c
# patch -p1 < ../../nvidia-legacy470-follow_pfn.patch
patching file conftest.sh
patching file nvidia/nvidia.Kbuild
patching file nvidia/os-mlock.c
# patch -p1 < ../../nvidia-legacy470-gcc14.patch
patching file conftest.sh
# patch -p1 < ../../nvidia-legacy470-iosys_map.patch
patching file conftest.sh
Hunk #1 succeeded at 4593 (offset 1 line).

Lancer l'installation

Je remonte d'un cran dans l'arborescence et je lance l'installateur, qui va me poser une série de questions :

# cd ..
# ./nvidia-installer

Un peu plus haut, j'ai pris soin d'installer DKMS (Dynamic Kernel Module Support). Ce système gère automatiquement la mise à jour du pilote lors de la mise à jour du noyau Linux :

NVidia GT 710

Je n'utilise pas les bibliothèques de compatibilité 32-bit, et je confirme tout simplement :

NVidia GT 710

L'installateur se met à construire le pilote, ce qui peut durer quelques minutes :

NVidia GT 710

L'utilitaire nvidia-xconfig se charge de générer un fichier /etc/X11/xorg.conf qui utilise explicitement le pilote nvidia dans sa configuration :

NVidia GT 710

L'écran final de l'installateur s'affiche :

NVidia GT 710

Configurer GRUB

Il me reste encore à peaufiner GRUB pour activer le kernel modesetting du pilote. J'édite /etc/default/grub et j'ajoute le paramètre qui va bien. En passant, j'en profite pour peaufiner la résolution de la console au démarrage du système :

/etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`( . /etc/os-release && echo ${NAME} )`
GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia-drm.modeset=1 vga=791"
GRUB_CMDLINE_LINUX=""

Paramètre obsolète

Le paramètre vga=791 est normalement obsolète. En temps normal je devrais plutôt utiliser quelque chose comme gfxpayload=1024x768x16. Allez savoir pourquoi, mais la manière orthodoxe ne fonctionne pas avec ce pilote, alors que la méthode obsolète fonctionne parfaitement. Mystère et boules de gomme.

Je prends en compte la mise à jour du chargeur de démarrage et je redémarre :

# update-grub
# reboot

Tester le pilote

Je me connecte en tant que root et je lance le système graphique à la main :

# systemctl isolate graphical.target

Si tout se passe bien, je vois apparaître le gestionnaire de connexion SDDM :

NVidia GT 710

Démarrez une session Plasma X11

Le pilote propriétaire nvidia fonctionnera uniquement dans une session Plasma X11. Si vous lancez la session par défaut Plasma Wayland, vous risquez de vous retrouver avec un bureau dur de la feuille voire carrément gelé.

Je lance une session et je constate que tout se passe comme prévu :

NVidia GT 710

Partant de là, je peux sereinement définir le démarrage de la session graphique par défaut :

# systemctl set-default graphical.target

Il ne me reste plus qu'à aller faire un footing pour me remettre les neurones en place. 🤡

NVidia


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.