Mise à jour : Debian 11.1 / Bullseye
Est décrite ici l'installation de X Window System avec les pilotes libres des cartes graphiques intel, radeon et nvidia.
L'installation dans le cas d'un système à deux processeurs graphiques (Intel + Nvidia) est décrite dans Optimus - Nvidia
Les logiciels de tests d'affichage permettant de tester plus en détail et comparer les cartes graphiques sont décrits ici.
Les pilotes libres des cartes graphiques intel, radeon et nvidia utilisent le KMS (Kernel Mode Setting). Ce mode supprime la distinction entre pilote pour le mode console et pilote pour le mode X, le même pilote étant utilisé dans les deux cas. Cela suppose que, dès le mode console, les pilotes libres correspondant à la carte graphique soient sélectionnés et le KMS activé.
Ceci est le cas par défaut, (sans configuration particulière), sous réserve de ne pas avoir "forcé", au démarrage de la console, le mode d'affichage texte ou activé une résolution graphique particulière.
On peut vérifier en mode console, que ces conditions sont vérifiées, sur la base des indices suivants (pour plus de détail voir Affichage console):
Les framebuffer inteldrmfb, radeondrmfb ou nouveaudrmfb selon le type de carte sont présents. L'absence de framebuffer ou la présence d'un autre framebuffer tel que simplefb, vesafb ne sont pas compatibles.
La résolution de l'affichage est supérieure aux résolutions de la carte en mode VESA
Parfois, le chargement du modesetting est directement indiqué dans dmesg
Le framebuffer est présent et a pour nom radeondrmfb, la résolution de l'affichage en console est 1366x768
$ fbset -i |grep -E "mode |Frame |Name"
mode "1366x768"
Frame buffer device information:
Name : radeondrmfb
Cette résolution est égale à celle de l'écran du PC portable
$ sudo hwinfo --monitor |grep -E "Model|Resolution"
Model: "C54GW 156AT LCD Monitor"
Resolution: 1366x768@60Hz
.......
Et est supérieure à la résolution maximale supportée par le mode VESA de la carte: 1024x768
$ sudo hwinfo --framebuffer |grep "Mode "|sort
Mode 0x0300: 640x400 (+640), 8 bits
Mode 0x0301: 640x480 (+640), 8 bits
Mode 0x0303: 800x600 (+832), 8 bits
Mode 0x0305: 1024x768 (+1024), 8 bits
Mode 0x030d: 320x200 (+640), 15 bits
Mode 0x030e: 320x200 (+640), 16 bits
Mode 0x0310: 640x480 (+1280), 15 bits
......
Mode 0x03c5: 640x350 (+1280), 16 bits
Mode 0x03c6: 640x350 (+2560), 24 bits
Le chargement du modesetting est indiqué dans dmesg
$ sudo dmesg |grep -iE "modesetting|mode setting"
[ 8.588416] [drm] radeon kernel modesetting enabled.
[ 8.680048] [drm] initializing kernel modesetting (TURKS 0x1002:0x6740 0x1028:0x04A3).
L'installation par défaut, installe un grand nombre de pilotes de périphériques d'entrée (via xserver-xorg-input-all ) et de sortie (via xserver-xorg-video-all )
$ sudo aptitude install xorg xserver-xorg xserver-xorg-input-all xserver-xorg-video-all
xserver-xorg-input-evdev pour les entrées type clavier et périphériques de pointage
xserver-xorg-input-synaptics pour les claviers tactiles
Périphériques de sortie (affichage) : Sur une carte graphique "assez récente > 2007), on peut éviter l'installation de xserver-xorg-video-all
de xserver-xorg-video-intel pour les cartes graphiques intel
de xserver-xorg-video-radeon pour les cartes graphiques ati/radeon (pilote libre)
et de xserver-xorg-video-nouveau pour les cartes graphiques nvidia (pilote libre)
et fonctionner avec le module modesetting
$ sudo aptitude install xorg xserver-xorg xserver-xorg-video-dummy xserver-xorg-input-evdev xserver-xorg-input-synaptics
Noter l'installation par les dépendances de
x11-utils # fournit xeyes, xcalculator, xedit,xclock, ....
xterm # un émulateur de terminal pour x
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
$ fbset -i |grep geometry
geometry 1024 768 1024 768 32
$ sudo aptitude install xinit
$ tty
/dev/tty1
sinon la commande échoue
$ sudo xinit
Si xterm est présent,
$ xeyes 200x300+100-200
pour une fenêtre de taille 200x300, positionnée à 100 pixels du bord latéral gauche (+100)et 200 pixels du bord latéral bas (-200)
$ exit
Alternativement, depuis la fenêtre du terminal ou une console externe, fermer la session graphique, avec
$ sudo pkill Xorg
Lancement de xterm avec une géométrie et position de fenêtre donnée
$ sudo xinit -g 100x200+300+300
$ sudo xinit /usr/bin/glxgears -geometry 200x200
$ sudo xinit /usr/bin/xeyes -g 100x100
$ sudo xinit /usr/bin/links2 -g -mode 1024x768 google.com
$ sudo xinit /usr/bin/xeyes -g 100x100 -- :0 vt5
$ xinit /usr/bin/xeyes -- :0 vt$XDG_VTNR
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
$ cat ~/.xinitrc
#!/bin/sh
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)
exec /usr/bin/links2 -g -driver x google.com
# invoke global X session script
. /etc/X11/Xsession
$ sudo xinit
startx est un front-end pour xinit qui permet de lancer la session graphique dans le même terminal d'où est lancé la commande. Startx s'exécute avec les droits ordinaires
$ startx
$ startx /usr/bin/links2 -g -mode 1024x768 -driver x
$ startx
La configuration du serveur X est redéfinie à chaque lancement en fonction des périphériques et pilotes présents. En cas de problème, il peut-être intéressant d’accéder à cette configuration. Pour cela un artifice est utilisé. Fermer l'environnement graphique, puis
Lancer depuis une console, la commande X -configuration :
$ X -configure
La nouvelle configuration est disponible dans ~/xorg.conf.new où elle peut-être examinée et modifiée
Pour tester la configuration :
$ sudo Xorg -config xorg.conf.new
Si le fichier de configuration convient, pour rendre la modification permanente, créer un répertoire /etc/X11/xorg.conf et y copier le fichier
$ sudo mkdir /etc/X11/xorg.conf.d
$ sudo mv /root/Xorg -config xorg.conf.new /etc/X11./xorg.conf.d/
A chaque lancement de X, un fichier log est créé en /var/log/Xorg.0.log. Il permet de vérifier
Les pilotes graphiques chargés par xorg
~$ grep /drivers/ /var/log/Xorg.0.log
[ 18.112] (II) Loading /usr/lib/xorg/modules/drivers/ati_drv.so
[ 18.122] (II) Loading /usr/lib/xorg/modules/drivers/radeon_drv.so
L'établissement du modesetting dans le mode graphique, exemple d'une carte radeon avec pilote xserver-xorg-video-radeon sans le pilote xserver-xorg-video-modesetting
$ cat /var/log/Xorg.0.log |grep -iE "modesetting|mode setting"
[ 1019.141] (==) Matched modesetting as autoconfigured driver 2
[ 1019.142] (II) LoadModule: "modesetting"
[ 1019.142] (WW) Warning, couldn't open module modesetting
[ 1019.142] (II) UnloadModule: "modesetting"
[ 1019.142] (II) Unloading modesetting
[ 1019.142] (EE) Failed to load module "modesetting" (module does not exist, 0)
[ 1019.153] (II) [KMS] Kernel modesetting enabled.
Le chargement des modules DRI (Direct Rendering Infrastructure)
$ cat /var/log/Xorg.0.log |grep -iE "dri2|dri3"
[ 20.035] (II) Loading sub module "dri2"
[ 20.035] (II) LoadModule: "dri2"
[ 20.035] (II) Module "dri2" already built-in
[ 20.235] (II) RADEON(0): [DRI2] Setup complete
[ 20.235] (II) RADEON(0): [DRI2] DRI driver: r600
[ 20.235] (II) RADEON(0): [DRI2] VDPAU driver: r600
[ 21.144] (II) GLX: Initialized DRI2 GL provider for screen 0
Le paquet mesa-utils contient quelques utilitaires permettant de vérifier l'accélération graphique. Les résultats ci-après proviennent d'un PC équipé d'une carte graphique radeon avec pilote libre.
Depuis un terminal (termx) graphique
$ glxinfo | grep "direct rendering"
direct rendering: Yes
$ LIBGL_DEBUG=verbose glxgears
libGL: screen 0 does not appear to be DRI3 capable
.......
Note : pour désactiver l'utilisation des fonctions DRI3 dans un programme :
$ LIBGL_DRI3_DISABLE=1 glxspheres64
$ glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
302 frames in 5.0 seconds = 60.275 FPS
299 frames in 5.0 seconds = 59.790 FPS
....
Pour supprimer la synchronisation verticale de l'écran, ici à 60Hz, qui limite la vitesse de rafraîchissement des trames, utiliser la variable d'environnement blank_mode
soit dans la commande
$ vblank_mode=0 glxgears
ATTENTION: default value of option vblank_mode overridden by environment.
29667 frames in 5.0 seconds = 5933.346 FPS
29831 frames in 5.0 seconds = 5966.167 FPS
.....
soit pour la session en cours
$ export vblank_mode=0
$ glxgears
ATTENTION: default value of option vblank_mode overridden by environment.
28836 frames in 5.0 seconds = 5767.139 FPS
29520 frames in 5.0 seconds = 5903.956 FPS
.....
Exemple Carte graphique radeon - pilote libre r600
$ LIBGL_DEBUG=verbose glxheads
.....
libGL: screen 0 does not appear to be DRI3 capable
libGL: pci id for fd 4: 1002:6740, driver r600
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/tls/r600_dri.so
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/r600_dri.so
libGL: Can't open configuration file /home/philippe/.drirc: No such file or directory.
libGL: Can't open configuration file /home/philippe/.drirc: No such file or directory.
.....
GL_VERSION: 3.0 Mesa 10.3.2
GL_VENDOR: X.Org
GL_RENDERER: Gallium 0.4 on AMD TURKS
Mesa est l'implémentation libre de OpenGL
Gallium est un projet libre ayant pour but de remplacer les anciens pilotes (AMD) et de les rendre compatibles OpenGL
Le pilote xserver-xorg-video-radeon est en version 1.7.5. Il devrait supporter DRI3 à partir de la version 1.7.6
Exemple Carte graphique intel - pilote libre i915
$ LIBGL_DEBUG=verbose glxheadsglxheads: exercise multiple GLX connections (any key = exit)
....
libGL: screen 0 does not appear to be DRI3 capable
libGL: pci id for fd 4: 8086:0126, driver i965
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/tls/i965_dri.so
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
libGL: Can't open configuration file /home/philippe/.drirc: No such file or directory.
libGL: Can't open configuration file /home/philippe/.drirc: No such file or directory.
...
GL_VERSION: 3.0 Mesa 10.3.2
GL_VENDOR: Intel Open Source Technology Center
GL_RENDERER: Mesa DRI Intel(R) Sandybridge Mobile
Exemple Carte graphique nvidia - pilote propriétaire - (Voir optimus)
$ LIBGL_DEBUG=verbose optirun glxheads
glxheads: exercise multiple GLX connections (any key = exit)
Usage:
glxheads xdisplayname ...
Example:
glxheads :0 mars:0 venus:1
...
GL_VERSION: 4.5.0 NVIDIA 352.79
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GeForce GT 635M/PCIe/SSE2
$ xset
usage: xset [-display host:dpy] option ...
To turn bell off:
-b b off b 0
To set bell volume, pitch and duration:
b [vol [pitch [dur]]] b on
To disable bug compatibility mode:
-bc
To enable bug compatibility mode:
bc
To turn keyclick off:
-c c off c 0
To set keyclick volume:
c [0-100] c on
To control Energy Star (DPMS) features:
-dpms Energy Star features off
+dpms Energy Star features on
dpms [standby [suspend [off]]]
force standby
force suspend
force off
force on
(also implicitly enables DPMS features)
a timeout value of zero disables the mode
To set the font path:
fp= path[,path...]
To restore the default font path:
fp default
To have the server reread font databases:
fp rehash
To remove elements from font path:
-fp path[,path...] fp- path[,path...]
To prepend or append elements to font path:
+fp path[,path...] fp+ path[,path...]
To set LED states off or on:
-led [1-32] led off
led [1-32] led on
-led named 'name' led off
led named 'name' led on
To set mouse acceleration and threshold:
m [acc_mult[/acc_div] [thr]] m default
To set pixel colors:
p pixel_value color_name
To turn auto-repeat off or on:
-r [keycode] r off
r [keycode] r on
r rate [delay [rate]]
For screen-saver control:
s [timeout [cycle]] s default s on
s blank s noblank s off
s expose s noexpose
s activate s reset
For status information: q
To print version: -version
$ xset -q -display :0.0
$ xset -q -display :0.0 |tail -4
DPMS (Energy Star):
Standby: 600 Suspend: 0 Off: 900
DPMS is Enabled
Monitor is On
$ xset -dpms
$ xset -q -display :0.0 |tail -3
DPMS (Energy Star):
Standby: 600 Suspend: 0 Off: 900
DPMS is Disabled
$ xset -q -display :0.0 |grep "Screen Saver" -A2
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 600 cycle: 600
$ xset -s off
$ xset -q -display :0.0 |grep "Screen Saver" -A2
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 0 cycle: 600