Debian : Installation pilote NVIDIA et configuration X11

Depuis ma première installation de Debian, j’étais resté avec la congifuration graphique de base (à savoir Wayland comme serveur d’affichage et Nouveau comme pilote graphique), après une première tentative malheureuse d’installer les pilotes NVIDIA : j’avais du tout réinstaller car l’écran connecté sur la carte NVIDIA était devenu tout blanc, et je n’avais réussi à m’en sortir (voir cet article). L’autre écran étant connecté sur le chip Intel intégré à la carte-mère.

Et puis en installant SuperTuxKart histoire de me divertir un peu, j’ai vu que je ne pouvais pas rester comme ça, le jeu étant injouable en l’état (tout fonctionnait, mais au ralenti). Il était temps de se pencher sérieusement sur les pilotes graphiques de ma Debian 12 « Bookworm »…

Première remarque, le wiki Debian est vraiment complet, fournissant plein d’informations très utiles, souvent en français (mais pas toujours). Bravo à la communauté ! Après plusieurs tentatives, j’ai fini par réussir à avoir mes deux écrans fonctionnels avec le pilote nvidia chargé.

En résumé : le pilote nouveau n’a pas fonctionné avec le firmware de ma carte graphique (Nvidia GeForce 1050 Ti), et il a fallu passer à X11 en lieu et place de Wayland car les pilotes proprio Nvidia se sont pas stables avec Wayland. Tout s’est ensuite résumé à avoir un fichier xorg.conf fonctionnel, ce qui sera le cas après quelques essais !

Je vous raconte tout ça, avec les commandes utiles à connaître. Cet article ne prétend pas tout couvrir sur ce sujet très complexe, mais il peut tout de même se révéler utile j’espère.

Terminologie

Avant de commencer, il est peut-être utile de préciser un certain nombre de choses sur la pile graphique utilisée par Debian/Gnome.

Depuis Debian version 10 « Buster » (2019), Gnome utilise Wayland par défaut. Ce serveur d’affichage moderne remplace X11, soit la version 11 de X Server, qui était lui très ancien (1987) et devenait difficile à maintenir, posant aussi des problèmes de sécurité de par sa conception. Retenons que Wayland est plus performant, plus sécurisé, mais sans doute moins stable que X11 qui bénéficie d’une longue expérience.

Par défaut, Debian Gnome va utiliser le pilote Nouveau (un pilote libre) pour une carte NVIDIA (ce fabriquant ne fournissant que des pilotes propriétaires et étant très peu coopératif avec le logiciel libre). Ce pilote n’exploite pas tout le potentiel de la carte, mais bon ! De toutes façons, comme on le verra ci-dessous, il ne fonctionnera pas pour moi.

Je serai donc amené à installer le pilote propriétaire de NVIDIA. Ce qui fera que Wayland sera désactivé par Gnome et X11 utilisé à la place (voir plus bas) ! 😥 Moralité, mieux vaut investir dans une carte Intel ou AMD si l’on a un système Linux.

Préparation

Cette fois, pas question de devoir tout réinstaller si je me retrouve coincé : j’utilise le système depuis plusieurs mois maintenant, ce serait vraiment galère de devoir tout recommencer. J’ai donc commencé par sauvegarder ma partition système en démarrant sur ma clef USB Clonezilla : l’opération prend un peu de temps, mais il suffit de la lancer au moment opportun, c’est-à-dire avant d’aller faire autre chose ! En procédant ainsi, l’opération est transparente, et je pouvais ensuite me lancer sereinement dans cet exercice périlleux.

Commandes utiles

Commandes graphiques

La première chose à faire, c’est bien sûr de vérifier que vos deux cartes graphiques sont bien identifiées par le système :

pascal$ sudo lshw -C display -short
Chemin matériel       Périphérique  Classe         Description
=================================================================
/0/100/1/0                             display        GP107 [GeForce GTX 1050 Ti
/0/100/2               /dev/fb0        display        Xeon E3-1200 v3/4th Gen Co

La carte GeForce est bien identifiée, ainsi que le chip Intel intégré à la carte mère. La commande suivante est similaire, mais va nous donner en plus les identifiants PCI qui nous seront utiles plus loin (pour le fichier xorg.conf) :

pascal$ lspci -nn | egrep -i "3d|display|vga"
00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller [8086:0412] (rev 06)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1)

C’est le moment d’installer le paquet nvidia-detect puis de le lancer pour avoir l’info et quel paquet est-il recommandé d’installer :

pascal$ sudo apt install nvidia-detect
pascal$ nvidia-detect
Detected NVIDIA GPUs:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1)

Checking card:  NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
Your card is supported by all driver versions.
Your card is also supported by the Tesla 470 drivers series.
Your card is also supported by the Tesla 460 drivers series.
Your card is also supported by the Tesla 450 drivers series.
Your card is also supported by the Tesla 418 drivers series.
It is recommended to install the
    nvidia-driver
package.

La commande suivante va nous confirmer que le chip Intel supporte bien l’accélération graphique 3D :

pascal$ glxinfo|egrep "OpenGL vendor|OpenGL renderer"
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 4600 (HSW GT2)

Pour avoir les commandes GLX (comme glxinfo, glxheads, glxgears), il faut auparavant installer le paquet suivant :

pascal$ sudo apt install mesa-utils

Pour connaître le type de serveur d’affichage utilisé, taper l’une ou l’autre de ces commandes :

pascal$ echo $XDG_SESSION_TYPE
x11
[/etc/X11]
pascal$ ps -e | grep X
   1690 tty2     01:40:46 Xorg

Commandes démarrage

Enfin, il va falloir analyser le démarrage du système pour comprendre ce qui se passe. Pour cela, deux commandes vont être très utiles. La première va nous identifier la liste des derniers démarrages, le plus récent étant le numéro 0 :

pascal$ sudo journalctl --list-boots
...
 -5 bd3f83fc0ee94bae8b22b9bce43f6a8d Tue 2022-03-01 18:55:52 CET—Wed 2022-03-02 10:30:25 CET
 -4 ec62a9a7094d49e89905ac435e624c06 Wed 2022-03-02 10:30:40 CET—Wed 2022-03-02 11:00:06 CET
 -3 aa988af5cf41463b9b8f9e7ec9df2cd5 Wed 2022-03-02 11:03:23 CET—Wed 2022-03-02 15:02:33 CET
 -2 7bcd1f2a1d2d437e93a01eb0ea31105f Wed 2022-03-02 15:02:48 CET—Wed 2022-03-02 15:08:17 CET
 -1 0a11f7f1057f4d12b7198c4d2a892046 Wed 2022-03-02 15:08:32 CET—Wed 2022-03-02 15:29:33 CET
  0 1b08b417191a457d9b4a37b82d0ab11d Wed 2022-03-02 15:29:59 CET—Wed 2022-03-02 17:42:30 CET

Je n’affiche ici que les cinq derniers, mais le système garde les 40 derniers logs de démarrage. C’est donc très pratique !

Et la commande sudo journalctl -b 0 va par exemple nous afficher ligne par ligne le dernier démarrage, avec une coloration pour les messages d’erreur (rouge) ou d’info (jaune). Pour remonter dans le temps, indiquer le numéro « -1 », « -2 », etc… Voilà donc ce que j’avais sur mon système avant de faire quoique ce soit :

Il manque des firmware NVIDIA pour le pilote nouveau

Le pilote nouveau

Une petite recherche sur le wiki debian m’amène sur cette page concernant les pilotes propriétaires NVIDIA. Je regarde ce qui concerne ma version Debian, et je me dis que dans un premier temps, je peux n’installer que les firmware, et garder le pilote nouveau. Si tout fonctionne correctement, cela me conviendra. Et en regardant le contenu du paquet (ici) je vois que scubber.bin en fait bien partie.

J’active donc « contrib » et « non-free » dans les dépots, puis installe les firmware :

pascal$ sudo apt install firmware-misc-nonfree

Puis je redémarre. Et là, je retrouve mon écran connecté sur la carte NVIDIA tout blanc… Comme la première fois ! Je regarde les logs, et je vois ceci :

sudo journalctl -b 0 | grep "dri/card1"
gnome-shell[1186]: Device '/dev/dri/card1' prefers shadow buffer
gnome-shell[1186]: Added device '/dev/dri/card1' (nouveau) using non-atomic mode setting.
gnome-shell[1186]: Created gbm renderer for '/dev/dri/card1'
gnome-shell[1738]: Device '/dev/dri/card1' prefers shadow buffer
gnome-shell[1738]: Added device '/dev/dri/card1' (nouveau) using non-atomic mode setting.
gnome-shell[1738]: Created gbm renderer for '/dev/dri/card1'
gnome-shell[1738]: Could not release device '/dev/dri/card1' (226,1): GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name :1.3 was not provided by any .service files

Bon, le message précédent a bien disparu, mais le pilote « nouveau » semble ne pas fonctionner, et cela dépasse mes compétences. Pas de panique, j’installe les pilotes NVIDIA comme indiqué sur la page du wiki :

pascal$ sudo apt install nvidia-driver

Et je redémarre ! Cette fois, j’ai bien mon écran « nvidia », mais j’ai perdu l’autre… 😳 C’est tout de même un progrès, je me suis sorti de l’écran blanc qui m’avait bloqué lors de la première installation de Debian. Que disent les logs ?

Les messages Xorg au démarrage

Je vois des messages Xorg, ce qui me met sur la piste de X11 à la place de Wayland.

X11 / Xorg

Le fait d’installer les pilotes propriétaires NVIDIA a désactivé Wayland pour utiliser X11 à la place pour cause d’instabilité. C’est confirmé ici :

GDM (GNOME Display Manager) will automatically use Wayland when supported, except when using the proprietary NVIDIA driver, in which case it will fall back to X11 due to instability.

L’information ci-dessus ne semble plus valable, le texte n’existe plus, les choses ont probablement évoluées depuis. Toujours est-il que sur cette page, concernant les pilotes Nvidia et Wayland, on peut lire ceci :

The NVIDIA driver supports Wayland, with caveats. The 495-series driver (or newer) is recommended for the best experience, as older versions only support Wayland through an NVIDIA-specific API which is not supported by all desktops, and is generally less reliable.

Vu que ma carte est assez ancienne, et utilise la version 470 du pilote Nvidia, j’en reste donc à Xorg.

Il s’agit donc pour moi de configurer proprement un fichier xorg.conf (qui n’existe pas encore dans /etc/X11). Sur cette page du wiki Debian je vois une référence à un outil nvidia-xconfig pour générer ce fichier xorg.conf. Aussitôt dit aussitôt fait :

pascal$ sudo apt install nvidia-xconfig
pascal$ sudo nvidia-xconfig
New X configuration file written to '/etc/X11/xorg.conf'

En regardant le fichier généré, je vois qu’un seul couple carte/écran est mentionné :

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Je redémarre à tout hasard, mais sans surprise, je n’ai toujours qu’un seul écran, celui sur la carte NVIDIA. Mais je suis sur la bonne piste, je sens que je progresse ! 😎 Et dans le log de boot, j’ai une nouvelle ligne me confirmant que le fichier xorg.conf est bien utilisé.

Je lance alors la commande sudo X -configure qui me génère un fichier xorg.conf.new dans /root :

Un fichier/root/xorg.conf.new est généré

En l’examinant, je vois que cette fois il y a bien deux cartes et deux écrans d’indiqués. Je n’affiche ici que des extraits du fichier en relation avec mon problème :

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 0 0
	Screen      1  "Screen1" RightOf "Screen0"
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
....
Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Monitor"
	Identifier   "Monitor1"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection
....
Section "Device"
	Identifier  "Card0"
	Driver      "intel"
	BusID       "PCI:0:2:0"
EndSection

Section "Device"
	Identifier  "Card1"
	Driver      "nouveau"
	BusID       "PCI:1:0:0"
EndSection

Je vais alors partir de ce fichier pour me construire un nouveau xorg.conf, en m’inspirant de celui créé précédemment par l’outil nvidia-xconfig. C’est la section »Device » de la « Card1 » qui m’intéresse (on retrouve d’ailleurs les identifiants PCI mentionnés plus haut pour chaque carte), et je remplace le driver « nouveau » par « nvidia ». Je laisse la « Card0 » avec son driver « intel », cela paraît correct.

Et je redémarre ! Cette fois, je suis revenu sur l’écran connecté à la carte Intel ! 😯 Mais la bonne nouvelle, c’est que si mon écran « nvidia » est noir, je peux tout de même y promener la souris, qui a l’apparence d’une croix. Dans les paramètres Gnome, un seul écran est affiché. Pourtant, en lançant l’outil nvidia-config (installé avec le paquet nvidia-driver, tout a l’air correct : la carte NVIDIA, l’écran détecté, etc…

Je suis tout près de la solution… Je regarde alors ces deux pages du wiki debian, concernant la configuration et le dépannage des pilotes NVIDIA. Je relance alors l’outil nvidia-xconfig pour qu’il me régénère un nouveau fichier xorg.conf cette fois avec les deux cartes/écrans (puisqu’il va se baser sur celui existant), et une fois ceci fait, après avoir chercher les bonnes valeurs de fréquence de mes deux moniteurs (comme conseillé sur la page dépannage), je les renseigne dans le nouveau fichier :

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "PHILIPS"
    ModelName      "PHILIPS 243S7EHMB"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 76.0
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "DELL"
    ModelName      "DELL 2208WFP"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 76.0
EndSection

Et je redémarre une dernière fois ! Car ce sera la bonne, mes deux écrans sont là, parfaitement identifiés, et le pilote NVIDIA bien chargé :

Pour afficher les infos Nvidia, on peut installer le package nvidia-settings :

$ sudo apt install nvidia-settings

Usage CPU

Tout serait parfait si je n’observais pas une utilisation CPU un peu trop élevée :

Xorg oscille en permanence autour 25% à 30% de CPU

Si j’en crois la doc, Xorg devrait utiliser autour de 10% de CPU dans un usage normal. J’ai trouvé des posts sur le sujet dans la même configuration, à savoir une carte Nvidia et chip Intel, mais sans solution.

À l’usage, ce n’est pas gênant, en tout cas pour l’instant.

Conclusion

Je retiens que NVIDIA ne jouant pas le jeu du logiciel libre, mieux vaut investir dans une carte Intel ou AMD si l’on a un système Linux.

Ceci dit, cette installation s’est plutôt bien passée, même si je préférerais utiliser Wayland (ça me résoudrait le problème de CPU). Il faut retenir deux choses :

  • qu’avec Gnome, on passe en X11 au lieu de Wayland dès que l’on installe les drivers proprio NVIDIA, et qu’à partir de là, il va falloir créer un fichier /etc/X11/xorg.conf.
  • qu’avec les deux commandes sudo X -configure et sudo nividia-xconfig, on peut assez facilement construire le bon fichier.

Enfin, l’essentiel, c’est que je peux désormais jouer à SuperTuxKart ! 😎

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *