X Window System

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.

1 - Installation de X11

1.1 - Vérification préalable

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):

$ fbset -i |grep -E "mode |Frame |Name"
mode "1366x768"
Frame buffer device information:
Name : radeondrmfb
$ sudo  hwinfo --monitor |grep -E "Model|Resolution"
Model: "C54GW 156AT LCD Monitor"
Resolution: 1366x768@60Hz
.......
$ 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
$ 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).

1.2 - Installation

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

1.3 - Firmwares

2 - xinit

$ cp /etc/X11/xinit/xinitrc ~/.xinitrc

2.1 - Principe

$ 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
$ sudo pkill Xorg

2.2 - Options

$ 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

2.3 - startx

$ startx
$ startx /usr/bin/links2 -g -mode 1024x768 -driver x
$ startx

3 - Vérifications

3.1 - xorg.conf

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

$ X -configure
$ sudo Xorg -config xorg.conf.new
$ sudo mkdir /etc/X11/xorg.conf.d
$ sudo mv /root/Xorg -config xorg.conf.new /etc/X11./xorg.conf.d/

3.2 - log

A chaque lancement de X, un fichier log est créé en /var/log/Xorg.0.log. Il permet de vérifier

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

3.3 - Tests

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

3.3.1 Capacité de "rendu direct"

$ glxinfo | grep "direct rendering"
direct rendering: Yes

3.2.2 Capacité dri3

$ 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

3.2.3 Performances glxgears

$ 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

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

3.3.4 Caractéristiques opengl

$ 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

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

4 - Réglage des préférences de X - xset

$ 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