Installer drivers nvidia sous debian

Décembre 2016


Installer le pilote propriétaire nvidia

Dans ce tutoriel nous allons aborder l'installation des drivers nvidia sous Debian. Ce tutoriel est également valable pour d'autres distributions basées sur Debian comme par exemple Ubuntu, Lubuntu, Xubuntu, Kubuntu, etc... Toutefois pour cette dernière, on retiendra la procédure d'installation spécifique décrite ici :
http://doc.ubuntu-fr.org/nvidia

Nous allons présenter cinq manières différentes manières d'installer le pilote. Dans le doute, privilégiez la méthode (E) qui est la plus propre :

A) via le script d'installation fourni sur le site officiel de nvidia. Elle est simple à mettre en oeuvre mais malheureusement à chaque mise à jour il faut recommencer ;
B) via module-assistant, recommandée pour une Debian Lenny ou antérieure. En outre elle évite d'avoir de soucis lors des mises à jour xorg. Il faudra toutefois reconstruire le module à chaque mise à jour de noyau ;
C) via envy ;
D) via make-kpkg ;
E) via le paquet nvidia-kernel-dkms. C'est la méthode la plus propre pour les debian wheezy ou plus récentes. Elle bénéficie des mêmes avantages que la méthode (B) et elle est plus simple à mettre en oeuvre.

Quelle que soit la méthode utilisée, il faudra reconfigurer le serveur graphique (appelé aussi serveur X, et en pratique xorg) pour charger le driver nvidia. Cette procédure est explicitée dans la dernière étape de ce tutoriel. Il va sans dire que la plupart des commandes qui suivent nécessitent d'être en root.


A) Installation avec le script nvidia

Avantages :

1) elle marche presque à tout les coups.
2) elle permet d'utiliser le dernier driver nvidia.

Inconvénients :

1) le module n'étant pas installé par un paquet, l'installation se fait plus ou moins proprement. En particulier il est fréquent d'avoir une erreur sur libglx.so qui n'est pas fatale.
2) il faut savoir configurer la version du compilateur, passer en mode texte pour préparer le module, savoir stopper le mode graphique.

Téléchargement du script

Allez sur
http://www.nvidia.fr/Download/index.aspx?lang=fr

Placez ce script dans /tmp (ou adaptez les commandes qui suivent en conséquence)

Notes :

a) Si vous êtes sous Ubuntu,
aptitude
n'est plus installé par défaut, donc vous pouvez remplacer cette commande par
sudo apt-get
à la place, ou installer aptitude (sudo apt-get install aptitude). Si vous êtes sous Debian et qu'aptitude n'est pas installé, vous pouvez soit utiliser
apt-get
, soit installer
aptitude
(
apt-get install aptitude
).

b) Si vous utilisez un noyau que vous avez compilé manuellement (par exemple un noyau téléchargé sur www.kernel.org,), vérifiez que le lien symbolique /usr/src/linux pointe sur les sources de noyau correspondantes.

Lancement du script

1) Passer en mode texte (ctrl alt f1) et s'identifier en root (ou précéder les commandes suivantes de sudo). Si vous utilisez un noyau fournit par un paquet linux-image (ce qui est le cas en général), pensez à installer les linux-headers correspondants :

sudo aptitude install linux-headers-$(uname -r)


2) Repérez le nom de votre gestionnaire de connexion :

ls /etc/init.d/*dm


C'est probablement soit kdm, gdm, xdm, sddm, ou lightdm. Dans ce qui suit nous supposons que c'est sddm

sudo service sddm stop


Il faut ensuite vérifier que le compilateur par défaut pointe vers le celui utilisé par défaut. Pour cela regardez la version qui a été utilisée pour votre noyau avec la commande :

cat /proc/version


Exemple : Ici c'est gcc-4.6

(mando@silk) (~) $ cat /proc/version  
Linux version 3.2.0-3-686-pae (Debian 3.2.23-1) (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-8) ) #1 SMP Mon Jul 23 03:50:34 UTC 2012


Installez le bon compilateur.

sudo aptitude install gcc-4.6


Vérifiez si c'est bien ce compilateur qui est utilisé par défaut (c'est rarement le cas en pratique) :

(mando@silk) (~) $ gcc --version 
gcc (Debian 4.7.1-7) 4.7.1
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Si la version diffère (ce qui est le cas dans cet exemple), il faut configurer la variable d'environnement CC pour qu'elle référence le bon compilateur :

export CC=gcc-4.6


On peut à présent lancer le script :

sh /tmp/NVIDIA-Linux-*.run

Copie des bibliothèques (obsolète)

Note : cette étape n'est plus nécessaire aujourd'hui. À l'époque le script nvidia ne prenaient pas en compte ce changement d'arborescence. Avec un script nvidia récent on peut donc ignorer cette étape.

Jusque là rien de très original, mais le problème c'est que les drivers sont dans /usr/X11R6/lib/modules et les libs dans /usr/X11R6/lib/. Il suffit juste de les recopier dans le bon répertoire (/usr/lib/xorg) :
cp /usr/X11R6/lib/libXvMCNVIDIA* /usr/lib/xorg    
cp -R /usr/X11R6/lib/modules* /usr/lib/xorg

B) Installation avec module-assistant

Avantages :

- le driver compilé est directement utilisable sur une Debian utilisant le même kernel.
- l'installation et la désinstallation se font facilement via le gestionnaire de paquet

Inconvénients :

- parfois le driver proposé par module-assistant n'est pas très récent
- parfois il ne compile pas.

Installation de module assistant et de nvidia-kernel-common

Dans un terminal root, installer module assistant et le récupérer le paquet nvidia :

aptitude install nvidia-kernel-common module-assistant

Correction des dépôts

Note : cette étape n'est plus nécessaire aujourd'hui. A priori ajouter simplement les dépôts lenny "contrib" et "non-free" suffit pour que tout se passe correctement. Vous pouvez ignorer cette étape, et y revenir uniquement si la suite échoue.

À ce stade si on tente de construire le module, vous risquez d'avoir l'erreur "vérifiez qu'il ne manque pas des dépôts contrib ou free dans sources.list". En effet, pour faire marcher ce paquet sous lenny, il faut pouvoir récupérer certains paquets qui ne sont disponibles qu'en Debian sid.

1) Afin de régler le problème on va donc au préalable corriger
/etc/apt/sources.list
par exemple de la manière suivante :

deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free    
deb-src http://ftp.fr.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://www.debian-multimedia.org lenny main contrib non-free
deb-src http://www.debian-multimedia.org lenny main contrib non-free

## Dépôts Sid
# priorités spécifiées dans /etc/apt/preferences
deb http://ftp.fr.debian.org/debian/ sid main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free


2) Corrigez/créez
/etc/apt/preferences
comme suit. Ce fichier indique au gestionnaire de paquets que si le paquet lenny n'existe pas, il faut le chercher en sid :

Package: *    
Pin: release o=Debian,a=testing
Pin-priority: 990

Package: *
Pin: release o=Debian,a=unstable
Pin-priority: 90


3) Puis lancez une mise à jour pour prendre en compte les changements :

aptitude update    
aptitude safe-upgrade

Construction du module

On passe à présent à la compilation et à l'installation du driver. C'est cette étape qu'il faudra refaire à chaque mise à jour kernel. En abrégé on peut aussi écrire :

module-assistant auto-install nvidia-kernel-source


... ou en abrégé :

m-a a-i nvidia-kernel-source


Vous pouevz facilement récupérer le .deb généré dans
/usr/src
en vue de le réutiliser sur d'autres machines Debian utilisant une carte nvidia et la même version de noyau. Il suffira simplement d'installer le paquet
nvidia-common
et d'installer le paquet généré avec la commande
dpkg -i
.

Vérifications

Si la commande module-assistant se termine correctement, on peut continuer et vérifier que le module créé se charge bien :

modprobe nvidia    
lsmod | grep nvidia


Pour que le module soit chargé à chaque redémarrage, il faut ajouter la ligne nvidia dans
/etc/modules
, soit avec son éditeur texte favori, soit en tapant :

grep -q ^nvidia /etc/modules || echo nvidia >> /etc/modules 


Attention : si les modules nvidiafb, ritatv et rivafb sont chargés, ceux-ci peuvent interférer et empêcher le chargement du module nvidia.

C) Installation automatique avec envy

Le processus d'installation peut être fait automatiquement, voir cette astuce.

D) Installation par make-kpkg

Avantages :
- installation propre, ce que Debian écrase certains fichiers, notamment quand xorg est mis à jour.
- le paquet construit est réutilisable sur les Debian utilisant le même noyau

Inconvénients :
- parfois le build échoue, dans ce cas vous pouvez vous tourner vers l'une des autres méthodes
- il faut reconstruire le pilote pour chaque nouvelle version de noyau installée

Construction du module

Nous allons ici utiliser
make-kpkg
. Cette commande permet de construire un paquet Debian permettant de déployer un module comme via un paquet.

aptitude install nvidia-kernel-common nvidia-kernel-source    
cd /usr/src/linux
make-kpkg modules_image


Cela crée un paquet
nvidia-kernel-<VersionDuNoyau>.deb
.

Installation du paquet

Il ne reste plus qu'à installer le paquet que l'on vient de créer et les librairies nvidia :

dpkg -i nvidia-kernel-<VersionDuNoyau>.deb    
aptitude install nvidia-glx

E) Installation par nvidia-kernel-dkms

En root on installe les paquets adéquats :

aptitude update
aptitude safe-upgrade
aptitude install xserver-xorg-video-nvidia nvidia-kernel-dkms


On peut rajouter le module nvidia dans /etc/modules mais ce n'est plus nécessaire sur les distributions récentes, il sera chargé automatiquement au prochain redémarrage.

Reconfiguration du serveur X

Cette étape est nécessaire si vous n'avez qu'une seule carte graphique nvidia dans votre PC.

Certains portables ont quant à eux deux cartes graphiques (typiquement une carte intel pour préserver la batterie, et une carte nvidia pour la 3D). Vous aurez peut-être envie de bénéficier des deux et n'utiliser la carte nvidia que si nécessaire et la carte intel le reste du temps. Dans ce cas, il faudra passer par bumblebee (
aptitude install bumblebee nvidia
) et ignorer cette étape. Pour plus de détails :
https://wiki.debian.org/fr/Bumblebee

Correction du fichier de configuration /etc/X11/xorg.conf

On peut utiliser deux méthodes :

1) via nvidia-xconfig (approche recommandée)

aptitude install nvidia-xconfig    
dpkg-reconfigure xserver-xorg
nvidia-xconfig


2) à la main :

Si votre version de Debian est ancienne (<= lenny) vous avez probablement à ce stade un fichier /etc/X11/xorg.conf déjà présent, et dedans, la ligne :

Driver "nv"


Il suffit de la remplacer par :

Driver "nvidia"


Dans les versions plus récentes de Debian, ce fichier
/etc/X11/xorg.conf
est généré de manière partielle, voire complètement absent. Dans ce cas le plus simple est de se tourner vers la méthode automatique.

Prise en compte des nouveaux drivers

On redémarre le serveur graphique, et normalement c'est bon ;-) :

service ssdm restart


(Remplacez sddm par votre gestionnaire de connexion si vous en utilisez un autre : gdm, kdm, xdm, lightdm...)

Vérifications

Pour vérifier que tout est bon, on peut dans un terminal lancé par l'utilisateur qui a ouvert la session graphique quelques commandes de "diagnotics" contenues dans le paquet mesa-utils :

aptitude install mesa-utils


Ensuite, lancez :

glxinfo | grep -i render   


La première commande doit notamment dire "direct rendering: Yes". De nos jours cette commande ne permet pas d'avoir la garantie complète que l'accélération matérielle est performante.

vblank_mode=0 glxgears


La seconde commande permet d'afficher des roues d'engrenages. Une accélération matérielle correcte (comprendre une installation correcte du module) doit engendrer une animation de l'ordre de quelques milliers de FPS.
http://doc.ubuntu-fr.org/classement_glxgears

En cas de souçis

kdm plante au lancement de la machine (et uniquement au lancement)

Il peut arriver qu'au lancement de la machine, tout se charge correctement (le module nvidia, le serveur X) mais que kdm plante. On retrouve cette information dans /var/log/syslog (et tout semble bien se passer dans /var/log/Xorg.0.log).

Pour vérifier que vous avez bien ce problème, assurez vous après que la commande suivante (à lancer en root via le raccourci ctrl alt f1) lance avec succès kdm :

service kdm restart


Ce problème semble être spécifique à certains modèles de carte nvidia (par exemple j'ai le problème avec une GeForce 210m) où le driver semble mettre un temps conséquent à se charger. Dans ca cas, kdm se dit que le serveur X a planté et interrompt son chargement avant que tout se soit initialisé. Par défaut kdm attend 15s.

Pour remédier au problème il suffit de corriger /etc/kde4/kdm/kdmrc. À la ligne ServerTimeOut mettre 30s (voir plus si ça ne suffit pas).

...  
# How long to wait for a local X-server to come up.
# Default is 15
ServeurTimeOut=30
...


Aux prochains redémarrages, le serveur X devrait se lancer correctement.

Le serveur X commence à se charger, puis brusquement tout se bloque

On est dans ce cas quand même un ctrl+alt+suppr ou un ctrl+alt+f1 ne répondent pas. Dans ce cas il y a fort à parier pour qu'une erreur kernel découlant du driver nvidia est gelé la machine. Il faudra alors soit repasser au driver nv (voir paragraphe suivant), utiliser une autre version de driver nvidia etc...

Ce genre de problème peut survenir pour des cartes très récentes ou lors de l'utilisation de drivers très récents et pas encore trop testés.

Serveur graphique mal configuré (écran noir)

Tout ce qui suit doit être lancé en root (ou précédez les commande de
sudo
)

1) Identifiez-vous en mode texte (ctrl alt f1).
https://www.mistra.fr/tutoriel-linux-mode-texte.html

2) Regardez les erreurs éventuelles avec la commande. Si vous avez des difficultés à faire marcher le mode graphique, reporter le résultat de cette commande avec votre message est important.

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


3) Si le pilote n'est pas trouvé (par exemple nvidia) assurez vous que nouveau (le pilote libre) est installé :

aptitude install xserver-xorg-video-nouveau


4) Supprimez ou renommez le fichier /etc/X11/xorg.conf, ce qui incitera le serveur graphique à utiliser dorénavant le pilote nouveau.

mv /etc/X11/xorg.conf /etc/X11/xorg.conf.old


5) Purgez tous les paquets nvidia éventuellement installés.

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


6) Redémarrez.

reboot


7) Si ensuite vous voulez installer le pilote propriétaire (nvidia) suivez de préférence l'installation par des paquets :

aptitude install xserver-xorg-video-nvidia nvidia-xconfig
nvidia-xconfig
reboot

Carte inactive (écran noir)

Sur les portables muni de deux cartes graphiques, assurez vous que la carte 3D est activée dans le BIOS. Celle-ci doit apparaître lorsque vous lancez la commande
lspci
.

Vérifiez que la carte est toujours active :
1) si dans /var/log/Xorg.0.log vous voyez l'erreur :
Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied

2) ou qu'en installant le pilote via la méthode A (script nvidia), le script ne trouve pas votre carte,
... il se peut que votre BIOS soit déréglé.

Pour régler le problème, entrez dans votre BIOS et réinitialisez le avec les paramètres d'usine, puis tentez d'installer le pilote nvidia avec la méthode de votre choix.

Comment utiliser le driver libre et non plus nvidia ?

Anciennement le driver libre s'appelait nv, il est désormais remplacé par nouveau. Si l'on utilise une distribution ancienne, il suffit de remplacer "nouveau" par "nv" dans ce qui suit.

1) Pour commencer il faut s'assurer que xorg va bien charger le module nouveau et non le module nvidia. Pour cela trois méthodes sont possibles :

a) En corrigeant /etc/X11/xorg.conf (en remplaçant "nvidia" par "nouveau"). Attention alors à bien avoir installé le paquet xserver-xorg-video-nouveau. Pour l'installer :

aptitude install xserver-xorg-video-nouveau


b) En lançant la commande suivante, qui va restaurer le fichier /etc/X11/xorg.conf par défaut (qui ne charge par le pilote nvidia) :

dpkg-reconfigure xserver-xorg


c) Si le serveur X est récent on peut aussi simplement supprimer /etc/X11/xorg.conf.

2) Vérifier que le module nvidia n'est plus référencé dans /etc/modules en supprimant l'éventuelle ligne correspondante.

3) Relancer le serveur X en relançant kdm, gdm ou xdm :

service kdm restart

Liens utiles

http://wiki.debian.org/...
http://debian-facile.org/forum/viewtopic.php?id=693

A voir également :

Ce document intitulé «  Installer drivers nvidia sous debian  » issu de CommentCaMarche (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.