106.1 Leçon 1
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
106 Interfaces utilisateur et environnements de bureau |
Objectif : |
106.1 Installer et configurer X11 |
Leçon : |
1 sur 1 |
Introduction
Le système X Window est une pile logicielle utilisée pour afficher du texte et des graphismes à l’écran. L’aspect général et la conception d’un client X ne sont pas déterminés par le système X Window. C’est chaque client X qui les gère : soit un gestionnaire de fenêtres (comme Window Maker ou Tab Window Manager par exemple), soit un environnement de bureau complet comme KDE, GNOME ou Xfce. Les environnements de bureau seront abordés dans une leçon ultérieure. Cette leçon se concentre sur l’architecture sous-jacente et les outils classiques du système X Window qu’un administrateur peut utiliser pour configurer X.
Le système X Window est multiplateforme et fonctionne sur différents systèmes d’exploitation comme Linux, les BSD, Solaris et d’autres systèmes de type Unix. Il existe également des implémentations pour macOS d’Apple et Microsoft Windows.
La principale version du protocole X utilisée dans les distributions Linux modernes est la version 11 de X.org, communément appelée X11. Le protocole X est le mécanisme de communication entre le client X et le serveur X. Les différences entre le client X et le serveur X seront abordées ci-dessous.
Note
|
Le prédécesseur du système X Window était un système de fenêtres appelé W, développé conjointement par IBM, DEC et le MIT. Ce logiciel est issu du Projet Athena en 1984. Lorsque les développeurs ont commencé à travailler sur un nouveau serveur d’affichage, ils ont choisi la prochaine lettre de l’alphabet : “X”. L’évolution du système X Window est actuellement contrôlée par le MIT X Consortium. |
Architecture du système X Window
Le système X Window fournit les mécanismes qui permettent de dessiner des objets 2D de base (et des objets 3D grâce à des extensions) sur un écran. Il est constitué d’un client et d’un serveur, et dans la plupart des installations où un environnement graphique est requis, ces deux composants se trouvent sur le même ordinateur. La partie client prend la forme d’une application comme un émulateur de terminal, un jeu ou un navigateur web. Chaque application client informe le serveur X de l’emplacement et de la taille de sa fenêtre sur l’écran de l’ordinateur. Le client gère également le contenu de cette fenêtre, et le serveur X affiche le dessin souhaité à l’écran. Le système X Window gère également les entrées en provenance des périphériques comme les souris, les claviers, les trackpads, etc.
Le système X Window est capable de fonctionner en réseau et plusieurs clients X sur différents ordinateurs d’un réseau peuvent adresser des requêtes graphiques à un seul serveur X distant. Le raisonnement à la base de ce système est qu’un administrateur ou un utilisateur peut avoir accès à une application graphique sur un système distant qui n’est pas forcément disponible sur son système local.
L’une des principales caractéristiques du système X Window est sa modularité. Au cours de l’existence du système X Window, de nouvelles fonctionnalités ont été développées et ajoutées à son infrastructure. Ces nouveaux composants ont été ajoutés sous forme d’extensions au serveur X, en laissant le protocole X11 intact. Ces extensions sont contenues dans les fichiers de bibliothèques Xorg. Voici quelques exemples de bibliothèques Xorg : libXrandr
, libXcursor
, libX11
, libxkbfile
et beaucoup d’autres, chacune fournissant des fonctionnalités étendues au serveur X.
Un gestionnaire d’affichage fournit une connexion graphique à un système. Ce système peut être un ordinateur local ou un ordinateur sur le réseau. Le gestionnaire d’affichage est lancé après le démarrage de l’ordinateur et lance une session de serveur X pour l’utilisateur authentifié. Le gestionnaire d’affichage est également chargé de maintenir le serveur X en état de marche. Parmi les exemples de gestionnaires d’affichage, on peut citer GDM, SDDM et LightDM.
Chaque instance d’un serveur X en cours d’exécution possède un nom d’affichage (display name) pour l’identifier. Le nom d’affichage contient les éléments suivants :
hostname:displaynumber.screennumber
Le nom d’affichage indique également à une application graphique où elle doit être affichée et sur quel hôte (en cas de connexion X à distance).
La partie hostname
fait référence au nom du système censé afficher l’application. Si le nom d’hôte n’est pas indiqué dans le nom d’affichage, c’est l’hôte local qui est présumé.
La partie displaynumber
fait référence à l’ensemble des écrans (screens) utilisés, qu’il s’agisse d’un seul écran d’ordinateur portable ou de plusieurs écrans sur une station de travail. Chaque session de serveur X en cours d’exécution se voit attribuer un numéro d’affichage en commençant par 0
.
Le screennumber
par défaut est 0
. C’est le cas lorsqu’un seul écran physique ou plusieurs écrans physiques sont configurés de manière à fonctionner comme un seul écran. Lorsque tous les écrans d’une configuration multi-moniteurs sont regroupés en un seul écran logique, les fenêtres des applications peuvent être déplacées librement d’un écran à l’autre. En revanche, si les écrans sont configurés de manière à fonctionner indépendamment l’un de l’autre, chaque écran va contenir les fenêtres des applications qui s’y ouvrent, et ces fenêtres ne pourront pas être déplacées d’un écran à l’autre. Un numéro est attribué à chaque écran indépendant. Si un seul écran logique est utilisé, le point et le numéro d’écran sont omis.
Le nom d’affichage d’une session X en cours est enregistré dans la variable d’environnement DISPLAY
:
$ echo $DISPLAY :0
Le résultat fournit les éléments suivants :
-
Le serveur X utilisé réside sur le système local, ce qui explique que rien ne s’affiche à gauche des deux points.
-
La session en cours du serveur X est la première, comme l’indique le
0
qui suit immédiatement les deux points. -
Il n’y a qu’un seul écran logique en cours d’utilisation, de sorte qu’un numéro d’écran n’est pas affiché.
Pour mieux illustrer ce concept, voici un schéma :
- (A)
-
Un seul moniteur, avec une configuration d’affichage simple et un seul écran.
- (B)
-
Configuré comme un seul affichage, avec deux moniteurs physiques configurés comme un seul écran. Les fenêtres d’application peuvent être déplacées librement entre les deux moniteurs.
- (C)
-
Une configuration d’affichage simple (comme le montre le
:0
), mais chaque moniteur est un écran indépendant. Les deux écrans partagent les mêmes périphériques d’entrée comme le clavier et la souris, mais une application lancée sur l’écran:0.0
ne pourra pas être déplacée sur l’écran:0.1
et vice-versa.
Pour démarrer une application sur un écran spécifique, affectez le numéro d’écran (screennumber
) à la variable d’environnement DISPLAY
avant de lancer l’application :
$ DISPLAY=:0.1 firefox &
Cette commande lance le navigateur web Firefox sur l’écran de droite dans le schéma ci-dessus. Certaines boîtes à outils fournissent également des options en ligne de commande pour demander à une application de s’exécuter sur un écran spécifique. Voir --screen
et --display
dans la page de manuel gtk-options(7)
pour avoir un exemple.
Configuration du serveur X
Traditionnellement, le fichier de configuration principal utilisé pour configurer un serveur X est le fichier /etc/X11/xorg.conf
. Sur les distributions Linux modernes, le serveur X se configure lui-même au moment de l’exécution lorsqu’il est démarré, et il se peut donc que le fichier xorg.conf
n’existe pas.
Le fichier xorg.conf
est structuré en stances distinctes appelées sections. Chaque section commence par le terme Section
suivi du nom de la section qui fait référence à la configuration d’un composant. Chaque Section
est terminée par un EndSection
correspondant. Le fichier xorg.conf
typique contient les sections suivantes :
InputDevice
-
Permet de configurer un modèle spécifique de clavier ou de souris.
InputClass
-
Dans les distributions Linux modernes, cette section se trouve typiquement dans un fichier de configuration séparé rangé dans
/etc/X11/xorg.conf.d/
. L’optionInputClass
est utilisée pour configurer une classe de périphériques matériels comme les claviers et les souris plutôt qu’un matériel spécifique. Voici un exemple de fichier/etc/X11/xorg.conf.d/00-keyboard.conf
:Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "us" Option "XkbModel" "pc105" EndSection
L’option
XkbLayout
définit la disposition des touches sur un clavier, comme Dvorak, gaucher ou droitier, QWERTY et la langue. L’optionXkbModel
permet de définir le type de clavier utilisé. Un tableau avec les modèles, les dispositions et leurs descriptions peut être consulté dansxkeyboard-config(7)
. Les fichiers associés aux dispositions de clavier se trouvent dans/usr/share/X11/xkb
. Voici un exemple de disposition de clavier grec polytonique sur un ordinateur Chromebook :Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "gr(polytonic)" Option "XkbModel" "chromebook" EndSection
Alternativement, la disposition du clavier peut être modifiée pendant une session X en cours d’exécution avec la commande
setxkbmap
. Voici un exemple de cette commande qui configure la disposition grecque polytonique sur un ordinateur Chromebook :$ setxkbmap -model chromebook -layout "gr(polytonic)"
Cette configuration ne sera valable que pour la durée de la session X en cours d’utilisation. Pour rendre ces modifications persistantes, modifiez le fichier
/etc/X11/xorg.conf.d/00-keyboard.conf
pour y inclure les paramètres requis.NoteLa commande
setxkbmap
utilise la X Keyboard Extension (XKB). Voilà un exemple de la fonctionnalité supplémentaire du système X Window grâce à l’utilisation d’extensions.Les distributions Linux modernes fournissent la commande
localectl
viasystemd
qui permet également de modifier la disposition du clavier en créant automatiquement le fichier de configuration/etc/X11/xorg.conf.d/00-keyboard.conf
. Encore une fois, voici un exemple de configuration d’un clavier grec polytonique sur un Chromebook, cette fois avec la commandelocalectl
:$ localectl --no-convert set-x11-keymap "gr(polytonic)" chromebook
L’option
--no-convert
est utilisée ici pour empêcherlocalectl
de modifier la disposition du clavier de la console de l’hôte. Monitor
-
La section
Monitor
décrit le moniteur physique utilisé et l’endroit où il est connecté. Voici un exemple de configuration avec un écran matériel connecté au deuxième port d’affichage et utilisé comme écran principal.Section "Monitor" Identifier "DP2" Option "Primary" "true" EndSection
Device
-
La section
Device
décrit la carte vidéo matérielle utilisée. Cette section indique également le module du noyau utilisé comme pilote pour la carte vidéo, ainsi que son emplacement physique sur la carte mère.Section "Device" Identifier "Device0" Driver "i915" BusID "PCI:0:2:0" EndSection
Screen
-
La section
Screen
associe les sectionsMonitor
etDevice
. Une sectionScreen
pourrait ressembler à ceci :Section "Screen" Identifier "Screen0" Device "Device0" Monitor "DP2" EndSection
ServerLayout
-
La section
ServerLayout
regroupe toutes les sections comme la souris, le clavier et les écrans en une seule interface du système X Window.Section "ServerLayout" Identifier "Layout-1" Screen "Screen0" 0 0 InputDevice "mouse1" "CorePointer" InputDevice "system-keyboard" "CoreKeyboard" EndSection
Note
|
Toutes les sections ne sont pas forcément présentes dans un fichier de configuration. Dans les cas de figure où une section est manquante, l’instance de serveur X en cours d’exécution fournit des valeurs par défaut. |
Les fichiers de configuration définis par l’utilisateur résident également dans /etc/X11/xorg.conf.d/
. Les fichiers de configuration fournis par la distribution sont disponibles dans /usr/share/X11/xorg.conf.d/
. Les fichiers de configuration situés dans /etc/X11/xorg.conf.d/
sont pris en compte avant le fichier /etc/X11/xorg.conf
s’il existe sur le système.
La commande xdpyinfo
est utilisée sur un ordinateur pour afficher des informations sur une instance de serveur X en cours d’exécution. Voici un exemple de retour d’information de la commande :
$ xdpyinfo name of display: :0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 12004000 X.Org version: 1.20.4 maximum request size: 16777212 bytes motion buffer size: 256 bitmap unit, bit order, padding: 32, LSBFirst, 32 image byte order: LSBFirst number of supported pixmap formats: 7 supported pixmap formats: depth 1, bits_per_pixel 1, scanline_pad 32 depth 4, bits_per_pixel 8, scanline_pad 32 depth 8, bits_per_pixel 8, scanline_pad 32 depth 15, bits_per_pixel 16, scanline_pad 32 depth 16, bits_per_pixel 16, scanline_pad 32 depth 24, bits_per_pixel 32, scanline_pad 32 depth 32, bits_per_pixel 32, scanline_pad 32 keycode range: minimum 8, maximum 255 focus: None number of extensions: 25 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DRI3 GLX Generic Event Extension MIT-SCREEN-SAVER MIT-SHM Present RANDR RECORD RENDER SECURITY SHAPE SYNC X-Resource XC-MISC XFIXES XFree86-VidModeExtension XINERAMA XInputExtension XKEYBOARD XTEST XVideo default screen number: 0 number of screens: 1 screen #0: dimensions: 3840x1080 pixels (1016x286 millimeters) resolution: 96x96 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x39e depth of root window: 24 planes number of colormaps: minimum 1, maximum 1 default colormap: 0x25 default number of colormap cells: 256 preallocated pixels: black 0, white 16777215 options: backing-store WHEN MAPPED, save-unders NO largest cursor: 3840x1080 current input event mask: 0xda0033 KeyPressMask KeyReleaseMask EnterWindowMask LeaveWindowMask StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask PropertyChangeMask ColormapChangeMask number of visuals: 270 ...
Les parties les plus pertinentes du résultat sont indiquées en gras, comme le nom de l’affichage (qui est le même que le contenu de la variable d’environnement DISPLAY
), les informations sur la version du serveur X utilisé, le nombre et la liste des extensions Xorg utilisées, et d’autres informations sur l’écran lui-même.
Créer un fichier de configuration Xorg de base
Même si X crée sa configuration après le démarrage du système sur les installations Linux modernes, un fichier xorg.conf
pourra toujours être utilisé. Pour générer un fichier /etc/X11/xorg.conf
permanent, exécutez la commande suivante :
$ sudo Xorg -configure
Note
|
Au cas où une session X est déjà en cours d’exécution, vous devez spécifier un $ sudo Xorg :1 -configure |
Sur certaines distributions Linux, la commande X
peut être utilisée à la place de Xorg
, étant donné que X
est un lien symbolique vers Xorg
.
Un fichier xorg.conf.new
sera créé dans votre répertoire de travail actuel. Le contenu de ce fichier est dérivé de ce que le serveur X a pu trouver comme matériel et pilotes disponibles sur le système local. Pour utiliser ce fichier, il devra être placé dans le répertoire /etc/X11/
et renommé en xorg.conf
:
$ sudo mv xorg.conf.new /etc/X11/xorg.conf
Note
|
Les pages de manuel suivantes fournissent des informations supplémentaires sur les composants du système X Window : |
Wayland
Wayland est le nouveau protocole d’affichage conçu pour remplacer le système X Window. Bon nombre de distributions Linux modernes l’utilisent comme serveur d’affichage par défaut. Il est censé être plus léger en termes de ressources système avec une empreinte d’installation plus réduite que X. Le projet a débuté en 2010 et connaît un développement actif, notamment grâce au travail de développeurs X.org anciens et en activité.
Contrairement au système X Window, il n’y a pas d’instance de serveur qui s’exécute entre le client et le noyau. Au lieu de cela, une fenêtre client travaille avec son propre code ou celui d’une boîte à outils (comme Gtk+ ou Qt) pour assurer le rendu. Pour effectuer le rendu, une demande est adressée au noyau Linux via le protocole Wayland. Le noyau transmet la demande via le protocole Wayland au compositeur Wayland, qui s’occupe de l’entrée des périphériques, de la gestion des fenêtres et de la composition. Le compositeur est la partie du système qui combine les éléments rendus en une sortie visuelle sur l’écran.
La plupart des boîtes à outils modernes comme Gtk+ 3 et Qt 5 ont été mises à jour pour permettre le rendu sur un système X Window ainsi que sur un ordinateur sous Wayland. Toutes les applications autonomes n’ont pas encore été adaptées au rendu sous Wayland. Pour les applications et les frameworks qui visent toujours le système X Window, elles pourront être exécutées dans XWayland. Le système XWayland est un serveur X à part entière qui s’exécute au sein d’un client Wayland et rend ainsi le contenu d’une fenêtre client dans une instance autonome de serveur X.
Tout comme le système X Window utilise une variable d’environnement DISPLAY
pour déterminer les écrans utilisés, le protocole Wayland utilise une variable d’environnement WAYLAND_DISPLAY
. Vous trouverez ci-dessous un exemple de sortie d’un système qui utilise un affichage Wayland :
$ echo $WAYLAND_DISPLAY wayland-0
Cette variable d’environnement n’est pas disponible sur les systèmes qui utilisent X.
Exercices guidés
-
Quelle commande utiliseriez-vous pour déterminer les extensions Xorg disponibles sur un système ?
-
Vous venez d’acquérir une nouvelle souris à dix boutons pour votre ordinateur, mais elle nécessite une configuration supplémentaire pour que tous les boutons fonctionnent correctement. Sans modifier le reste de la configuration du serveur X, quel répertoire utiliseriez-vous pour créer un nouveau fichier de configuration pour cette souris et quelle section de configuration précise serait utilisée dans ce fichier ?
-
Quel composant d’une installation Linux est responsable du fonctionnement d’un serveur X ?
-
Quelle option en ligne de commande est utilisée avec la commande
X
pour générer un nouveau fichier de configurationxorg.conf
?
Exercices d’approfondissement
-
Quel serait le contenu de la variable d’environnement
DISPLAY
sur un système nommélab01
avec une configuration à un seul écran ? Admettons que la variable d’environnementDISPLAY
soit affichée dans un émulateur de terminal sur le troisième écran indépendant. -
Quelle commande permet de créer un fichier de configuration du clavier pour le système X Window ?
-
Sur un système Linux classique, un utilisateur peut basculer vers une console virtuelle en appuyant sur les touches Ctrl+Alt+F1-F6 du clavier. On vous demande de mettre en place un système kiosque avec une interface graphique et vous devez désactiver cette fonctionnalité pour empêcher toute manipulation illicite du système. Vous décidez de créer un fichier de configuration
/etc/X11/xorg.conf.d/10-kiosk.conf
. En utilisant une sectionServerFlags
(utilisée pour définir les options globales de Xorg sur le serveur), quelle option faut-il spécifier ? Consultez la page de manuelxorg.conf(5)
pour trouver cette option.
Résumé
Cette leçon est consacrée au système X Window tel qu’il est utilisé sous Linux. Le système X Window est utilisé pour dessiner des images et du texte sur les écrans, tels qu’ils sont définis dans une série de fichiers de configuration. Le système X Window est souvent utilisé pour configurer les périphériques d’entrée tels que les souris et les claviers. Cette leçon aborde les points suivants :
-
L’architecture du système X Window à un niveau élevé.
-
Les fichiers de configuration utilisés pour configurer un système X Window et leur emplacement au sein du système de fichiers.
-
L’utilisation de la variable d’environnement
DISPLAY
sur un système qui tourne sous X. -
Une introduction rapide au protocole d’affichage Wayland.
Voici les commandes et les fichiers de configuration abordés :
-
Modifier la disposition du clavier dans une installation Xorg avec
setxkbmap
etlocalectl
. -
La commande
Xorg
pour créer un nouveau fichier de configuration/etc/X11/xorg.conf
. -
Le contenu des fichiers de configuration de Xorg situés dans :
/etc/X11/xorg.conf
,/etc/X11/xorg.conf.d/
et/usr/share/X11/xorg.conf.d/
. -
La commande
xdpyinfo
pour afficher des informations générales sur une session de serveur X en cours d’exécution.
Réponses aux exercices guidés
-
Quelle commande utiliseriez-vous pour déterminer les extensions Xorg disponibles sur un système ?
$ xdpyinfo
-
Vous venez d’acquérir une nouvelle souris à dix boutons pour votre ordinateur, mais elle nécessite une configuration supplémentaire pour que tous les boutons fonctionnent correctement. Sans modifier le reste de la configuration du serveur X, quel répertoire utiliseriez-vous pour créer un nouveau fichier de configuration pour cette souris et quelle section de configuration précise serait utilisée dans ce fichier ?
Les configurations définies par l’utilisateur sont situées dans
/etc/X11/xorg.conf.d/
et la section dédiée à la configuration de la souris estInputDevice
. -
Quel composant d’une installation Linux est responsable du fonctionnement d’un serveur X ?
Le gestionnaire d’affichage.
-
Quelle option en ligne de commande est utilisée avec la commande
X
pour générer un nouveau fichier de configurationxorg.conf
?-configure
Rappelez-vous que la commande
X
est un lien symbolique vers la commandeXorg
.
Réponses aux exercices d’approfondissement
-
Quel serait le contenu de la variable d’environnement
DISPLAY
sur un système nommélab01
avec une configuration à un seul écran ? Admettons que la variable d’environnementDISPLAY
soit affichée dans un émulateur de terminal sur le troisième écran indépendant.$ echo $DISPLAY lab01:0.2
-
Quelle commande permet de créer un fichier de configuration du clavier pour le système X Window ?
$ localectl
-
Sur un système Linux classique, un utilisateur peut basculer vers une console virtuelle en appuyant sur les touches Ctrl+Alt+F1-F6 du clavier. On vous demande de mettre en place un système kiosque avec une interface graphique et vous devez désactiver cette fonctionnalité pour empêcher toute manipulation illicite du système. Vous décidez de créer un fichier de configuration
/etc/X11/xorg.conf.d/10-kiosk.conf
. En utilisant une sectionServerFlags
(utilisée pour définir les options globales de Xorg sur le serveur), quelle option faut-il spécifier ? Consultez la page de manuelxorg.conf(5)
pour trouver cette option.Section "ServerFlags" Option "DontVTSwitch" "True" EndSection