Le Serveur X

État : {a_reli}

Retour au document principal

Pré-requis

Objectifs

Introduction

Le système X Window était à l'origine le composant d'affichage graphique du projet Athena développé au MIT (Massachusetts Institute of Technology). C'est l'environnement graphique des systèmes UNIX. La version Linux du système X Window est basée sur l'adaptation libre de X Window version 11 révision 6 que l'on appelle couramment X11R6.

On appelle l'adaptation libre xfree86 pour les systèmes 80386/80486 et suivants. Depuis Xfree86 a été adapté sur d'autres plate-formes comme System V/386 et 386BSD.

Illustration : Composants de X11R6 et sections de configuration

Composants de X11R6 et sections de configuration

L'image précédente nous montre les différents composants du serveur X11R6. Le mot Section se réfère aux parties du fichier de configuration XF86Config que nous verrons plus loin.

Le deux clients représentés au dessus du serveur sont typiquement deux applications x comme x-term ou xclock. Le gestionnaire d'affichage (wm ou window manager) est également un client. Les gestionnaires d'affichage permettent de gérer les applications x comme des fenêtres : déplacement, sélection, réduction (iconification), etc.

Remarque

La configuration du serveur X11R6 est indépendante des clients du serveur. On configure les clients dans des fichiers de configuration spécifiques ou dans des fichiers globaux comme Xdefaults ou Xresources. La configuration du serveur contient uniquement ce qui touche au serveur de polices et les répertoires contenant les polices, à la souris, au clavier, aux résolutions prises en charge par le moniteur et à la profondeur des couleurs.

Configuration de X11R6

Xfree86 fourni en standard deux outils de configuration : XF86Setup et xf86config. D'autres éditeurs proposent leur outils spécifiques comme :

Une fois le serveur configuré, on peut changer les paramètres horizontaux et verticaux du moniteur avec xvidtune.

Tous les outils que nous venons de mentionner créent et modifient le fichier de configuration XF86Config. Le serveur X lit ce fichier au démarrage, ce qui détermine son comportement. Il se situe généralement dans /etc/X11/XF86Config.

Il y a 11 sections de configuration dans ce fichier :

Remarque

Les noms de sections Keyboard et Pointer sont obsolètes mais sont encore reconnues pour des raisons de compatibilité. Elles ont été remplacées par les sections InputDevice.

L'une des premières section est la Section Files. Le mot clé FontPath indique s'il faut récupérer les polices à partir d'un répertoire local ou d'un serveur de polices. Le mot clé RgbPath est utilisé pour indiquer le chemin absolu vers le fichier rgb utilisé pour faire le lien entre les noms de couleurs et la notation RGB :

Section “Files”
        FontPath “/chemi/vers/repertoire/des/polices/”
        FontPath “trans/hote:port”
        RgbPath   "/chemin/vers/rgb"
EndSection

trans est le type de transport unix, hôte est le nom de domaine pleinement qualifié du serveur de polices, et port est le port de connexion, généralement 7100.

Exemple :

FontPath “unix/:7100”   # Serveur de police local
FontPath “unix/myfontserver.mydomain.com:7100”

Voici un exemple de fichier XF86Config :

Section "Files"
   RgbPath    "/usr/X11R6/lib/X11/rgb"
   FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled,/usr/X11R6/lib/X11/fonts/75dpi:unscaled,/usr/X11R6/lib/X11/fonts/100dpi:unscaled,/usr/X11R6/lib/X11/fonts/misc/"
EndSection
 
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "IMPS/2"
        Option      "Device" "/dev/psaux"
        Option      "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
   Identifier      "Primary Monitor"
   VendorName      "Unknown"
   ModelName       "Unknown"
   HorizSync       31.5-37.9
   VertRefresh     55-90
   Modeline  "800x600"    40.00 800 840 968 1056 600 601 605 628 +hsync +vsync
EndSection

Section "Device"
   Identifier      "Primary Card"
   VendorName      "Unknown"
   BoardName       "None"
   VideoRam        2048
EndSection

Section "Screen"
   Driver          "Accel"
   Device          "Primary Card"
   Monitor         "Primary Monitor"
   DefaultColorDepth 24
   BlankTime       0
   SuspendTime     0
   OffTime         0
    
   SubSection "Display"
      Depth        24
      Modes        "800x600"
   EndSubSection
   SubSection "Display"
      Depth        32
      Modes        "800x600"

Contrôle des clients X

Paramétrage des polices et des couleurs

Les clients X sont configurés via les fichiers .Xresources et .Xdefaults, situés dans les répertoires utilisateurs. Ils ne sont pas automatiquement créés, puisque des paramètres système par défaut sont également disponibles pour chaque programme.

Voici un extrait d'un .Xresources :

xterm_color*background: Black
xterm_color*foreground: Wheat
xterm_color*cursorColor: Orchid
xterm_color*reverseVideo: false
xterm_color*scrollBar: true
xterm_color*saveLines: 5000
xterm_color*reverseWrap: true
xterm_color*font: fixed
xterm_color.geometry: 80x25+20+20
xterm_color*fullCursor: true
xterm_color*scrollTtyOutput: off
xterm_color*scrollKey: on
xterm_color*VT100.Translations: #override\n\
<KeyPress>Prior : scroll-back(1,page)\n\
<KeyPress>Next : scroll-forw(1,page)
xterm_color*titleBar: false

Chacune de ces directives décrit comment un client est affiché. Chaque ligne est composée du nom du client suivi d'un astérisque et du paramètre X Window. Les utilisateurs peuvent donc personnaliser l'affichage des clients en configurant (avec attention) ce fichier.

La variable DISPLAY

Lorsqu'on lance une application (ou un client) X, il ou elle a besoin de savoir sur quel serveur il est lancé. Un serveur X est référencé comme un "display" (affichage). Par exemple, le premier serveur X que vous démarrez (disons avec startx) est appelé :0, le second serait :1 et ainsi de suite. Le premier serveur X (ou display) sur l'hôte 192.168.1.99 est appelé 192.168.1.99:0.

La plupart des clients X natifs comme xterm ou xclock disposent d'une option -display que l'on peut utiliser pour définir le serveur souhaité. Mais la méthode la plus simple est de définir la variable d'environnement DISPLAY.

Les deux commandes suivantes sont équivalentes :

xclock -display 192.168.1.99:0

DISPLAY=192.168.1.99:0 xclock

Cependant, le serveur X de l'hôte 192.168.1.99 n'autorisera pas le lancement de cette application tant que l'utilisateur qui a lancé le serveur X sur 192.168.1.99 ne l'aura pas explicitement autorisé en utilisant la commande xhost. Cette commande ajoute ou supprime des hôtes d'une liste de contrôle d'accès (ACL).

Exemple : Autoriser les clients X à partir de 192.168.1.7 de s'exécuter sur le serveur local

xhost + 192.168.1.7
     192.168.1.7 being added to access control list

Remarque

xhost doit être utilisé avec xauth (qui n'est pas au programme de l'examen). Pour lancer un client de 192.168.1.7 sur notre serveur local, il nous faut encore taper les commandes suivantes sur le serveur :

xauth extract - $DISPLAY | ssh 192.168.1.7 xauth merge -

(En assumant que les noms d'utilisateurs sont les mêmes et que le nom d'hôte de la variable $DISPLAY peut être résolu).

Lancement du serveur X

On peut démarrer une session X à partir des deux méthodes suivantes :

  1. En ligne de commande, une fois connecté sur la console, l'utilisateur lance le serveur X en tapant startx

  2. Le système utilise un gestionnaire d'affichage, qui demande à l'utilisateur son nom d'utilisateur et son mot de passe. Cette méthode est généralement disponible pour un niveau d'exécution spécifique (sur les distributions de la famille RedHat, c'est le niveau d'exécution 5).

À partir de la ligne de commande

Le script startx lance xinit. Le script xinit prend eux rpincipaux paramètres (a) le serveur X et (b) le script xinitrc. Le script xinitrc lit (NdT : au sens de "source", man bash) les fichiers Xresources (qui contrôlent les applications X) et Xclients (choix du gestionnaire de fenêtres). La séquence de démarrage est donc la suivante :

startx --> xinit --> X -> xinitrc -> Xclients

En utilisant un gestionnaire d'affichage

Dans ce cas, le gestionnaire d'affichage est automatiquement lancé à un certain niveau d'exécution (5 pour RedHat). Nous allons tout d'abord décrire le processus de connexion, nous verrons les fonctionnalités plus avancées des gestionnaires d'affichage ensuite. Le processus de connexion se déroule selon les étapes suivantes :

xdm --> xlogin --> Xsession --> (facultatif) Xclients ou ~/.Xclients

Les différentes versions de gestionnaires d'affichage ainsi que les différentes distributions Linux peuvent suivre des étapes légèrement différentes. Vous noterez cependant, qu'en général, startx utilise xinit alors que xdm utilise Xsession.

Personnalisation

Chaque utilisateur peut personnaliser son environnement en utilisant un fichier .xinitrc. Ce fichier est fusionné avec le fichier système xinitrc.

La commande switchdesk permet aux utilisateurs de se créer un fichier .Xclients personnalisé

Le gestionnaire d'affichage (display manager)

Les 3 principaux gestionnaires d'affichage sont xdm (génrique), gdm (GNOME) et kdm (KDE). D'après les objectifs des LPI, les fichiers de configurations se trouvent dans les répertoires suivants :

Cependant, il est plus courant de trouver les fichiers de configuration pour kdm dans /usr/share/config/kdm (nous le voyons juste ci-dessous).

KDM

Ce gestionnaire d'affichage est installé avec l'environnement KDE. Il est basé sur le gestionnaire d'affichage générique xdm avec lequel il partage plusieurs fichiers de configuration. On retrouve ces fichiers de configuration dans /usr/share/config/kdm. Le fichier de configuration le plus important est kdmrc.

Le chemin d'accès au binaire est /usr/bin/kdm.

Fichiers de configuration pour KDM :

GDM

Ce gestionnaire d'affichage est distribué avec l'environnement de bureau GNOME. Le fichier de configuration principal est gdm.conf.

Le chemin d'accès au binaire est /usr/bin/gdm.

Fichiers de configuration de GDM (/etc/X11/gdm) :

XDM

Le gestionnaire d'affichage xdm fait partir de l'application Xfree86. Le fichier de configuration principal est xdm-config.

Le chemin d'accès au binaire est /usr/bin/xdm.

Fichiers de configuration de XDM :

Nous verrons les fichiers de configuration de xdm plus en détail un peu plus loin.

En général, les gestionnaires d'affichages sont utilisés dans le niveau d'exécution 5 (NdT : pour les distributions de la famille RedHat)

Pour paramétrer le niveau d'exécution par défaut sur 5 dans /etc/inittab :

id:5:initdefault:

Les gestionnaires d'affichage permettent aux utilisateurs locaux de se connecter sur le système à partir d'une interface graphique. Mais on peut également les utiliser pour des connexions graphiques sur le réseau. Pour ce faire, ils utilisent le protocole XDMCP (X Display Manager Control Protocol). Par défaut, XDMCP est désactivé (nous l'activerons dans un exercice).

Le serveur X et le gestionnaire d'affichage

Le serveur X et le gestionnaire d'affichage

Fichiers de configuration

Le fichier Xaccess

The Xaccess file
# $XConsortium: Xaccess,v 1.5 91/08/26 11:52:51 rws Exp $
#
# Access control file for XDMCP connections
# To control Direct and Broadcast access:
#
#       pattern
#
# To control Indirect queries:
#
#       pattern         list of hostnames and/or macros ...
#
# To use the chooser:
#
#       pattern         CHOOSER BROADCAST
#
# or
#
#       pattern         CHOOSER list of hostnames and/or macros ...
#
# To define macros:
#
#       %name           list of hosts ...
#
# The first form tells xdm which displays to respond to itself.
# The second form tells xdm to forward indirect queries from hosts matching
# the specified pattern to the indicated list of hosts.
# The third form tells xdm to handle indirect queries using the chooser;
# the chooser is directed to send its own queries out via the broadcast
# address and display the results on the terminal.
# The fourth form is similar to the third, except instead of using the
# broadcast address, it sends DirectQuerys to each of the hosts in the list
#
# In all cases, xdm uses the first entry which matches the terminal;
# for IndirectQuery messages only entries with right hand sides can
# match, for Direct and Broadcast Query messages, only entries without
# right hand sides can match.
#

*                                       #any host can get a login window

#
# To hardwire a specific terminal to a specific host, you can
# leave the terminal sending indirect queries to this host, and
# use an entry of the form:
#

#terminal-a     host-a

# The nicest way to run the chooser is to just ask it to broadcast
# requests to the network - that way new hosts show up automatically.
# Sometimes, however, the chooser can't figure out how to broadcast,
# so this may not work in all environments.
#

*               CHOOSER BROADCAST       #any indirect host can get a chooser

# If you'd prefer to configure the set of hosts each terminal sees,
# then just uncomment these lines (and comment the CHOOSER line above)
# and edit the %hostlist line as appropriate
#
#%hostlist      host-a host-b
#*              CHOOSER %hostlist       #

Le fichier Xervers

# $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $
#
#
# $XFree86: xc/programs/xdm/config/Xserv.ws.cpp,v 1.1.1.1.12.2 1998/10/04 15:23:14 hohndel Exp $
#
# Xservers file, workstation prototype
#
# This file should contain an entry to start the server on the
# local display; if you have more than one display (not screen),
# you can add entries to the list (one per line).  If you also
# have some X terminals connected which do not support XDMCP,
# you can add them here as well.  Each X terminal line should
# look like:
#       XTerminalName:0 foreign
#
:0 local /usr/X11R6/bin/X

Un fichier Xrescources

Le gestionnaire d'affichage étant lui-même un client x, le fichier Xressources est similaire au fichier .Xressources à l'execpetion qu'il contrôle l'affichage de l'écran de connexion.

! $XConsortium: Xresources /main/8 1996/11/11 09:24:46 swick $
xlogin*borderWidth: 3
xlogin*greeting: CLIENTHOST
xlogin*namePrompt: login:\040
xlogin*fail: Login incorrect
#ifdef COLOR
xlogin*greetColor: CadetBlue
xlogin*failColor: red
*Foreground: black
*Background: #fffff0
#else
xlogin*Foreground: black
xlogin*Background: white
#endif

XConsole.text.geometry: 480x130
XConsole.verbose:       true
XConsole*iconic:        true
XConsole*font:          fixed

Un fichier xdm-config

! $XFree86: xc/programs/xdm/config/xdm-conf.cpp,v 1.1.1.2.4.2 1999/10/12 18:33:29 hohndel Exp $
!
DisplayManager.servers:         /etc/X11/xdm/Xservers
DisplayManager.accessFile:      /etc/X11/xdm/Xaccess
! All displays should use authorization, but we cannot be sure
! X terminals will be configured that way, so by default
! use authorization only for local displays :0, :1, etc.
DisplayManager._0.authorize:    true
DisplayManager._1.authorize:    true
!
DisplayManager*resources:       /etc/X11/xdm/Xresources
DisplayManager*session:         /etc/X11/xdm/Xsession
DisplayManager*authComplain:    false
! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
DisplayManager.requestPort:     0

Dépannage les clients X

Il arrive que les clients X ne se ferment pas correctement et laissent des processus zombies. Un processus est dit zombie quand son parent s'est terminé et qu'il ne peut plus effacer les références au processus fils. On peut voir lorsque un processus père s'est fermé sans fermer le processus fils, en lançant la commande ps qui révèle que le processus fils appartient au PID 1 (init). Il faut tuer ces processus parce qu'ils consomment des ressources. Seul l'utilisateur qui a lancé le processus ou le root peuvent le tuer et il peut être nécessaire d'utiliser le signal -9 pour tuer ce type de processus.

Choix d'un gestionnaire de fenêtres

Dans le monde X Window, le bureau est généralement appelé l'écran. Il couvre complètement la zone d'affichage de votre moniteur. La fenêtre principale est le fond d'écran, typiquement utilisé pour afficher une couleur d'arrière plan ou une image. Le gestionnaire de fenêtres fourni une interface entre l'utilisateur et le serveur X. Il est presque impossible d'utiliser X sans gestionnaire de fenêtres, puisqu'il fournit la barre de titre et l'ensemble des boutons avec les quels vous manipules votre écran.

Le site http://xwinman.org regroupe des informations sur les gestionnaires de fenêtres. De nombreuses versions de ces gestionnaires de fenêtres sont disponibles sur ftp://metalab.unc.edu/pub/Linux/X11/window-managers (NdT : et notamment dans vos distributions GNU/Linux).

Voici une liste de gestionnaires de fenêtres :

Résumé et exercices

Questions de révision

Oui ou Non

  1. Le fichier de configuration du gestionnaire de fenêtres est XF86Config : _

  2. Un client x peut être configuré pour être lancé sur n'importe quel serveur X accessible sur le réseau : _

  3. Le gestionnaire d'affichage est un programme qui gère l'affichage des pixels de votre interface graphique : _

  4. Un utilisateur qui a lancé un serveur X peut désactiver le contrôle d'accès avec la commande xhost : _

  5. Le protocole XDMCP est utilisé par les gestionnaires d'affichage pour afficher l'écran de connexion sur des hôtes distants : _

  6. Sur un système qui n'utilise pas de gestionnaire d'affichage, on lance généralement l'interface graphique avec la commande xinit : _

Voir les réponses

Glossaire

Terme

Description

DISPLAY

variable d'environnement du shell utilisée pour indiquer aux clients X sur quel affichage (display), donc quel serveur X elles sont lancées

XDMCP

protocole fournissant un mécanisme standard permettant à un terminal de se connecter sur un serveur X distant

niveau d'exécution (runlevel)

configuration système qui permet de ne lancer qu'un groupe de processus - voir init (8)

client x ou application x

dans ce cours, on utilise ces termes pour les applications comme xterm ou xclock qui fonctionnent dans un environnement X

environnement de bureau

suite de programme comprenant un gestionnaire de fenêtre conçue à l'origine pour utiliser l'écran comme un 'bureau". Ces applications intégrées offrent généralement des fonctionnalités comme les copier/coller, couper/coller, glisser/déposer, etc. Par exemple, XFCE, GNOME et KDE sont des environnements de bureau.

gestionnaire d'affichage

application X lancée à un niveau d'exécution spécifique (5 dans le monde RedHat) affichant un écran de connexion graphique. Les gestionnaires d'affichage gèrent également le protocole XDMCP. Les gestionnaires d'affichage les plus courants sont xdm (générique, fourni avec X11R6), gdm (qui fait partie de la suite GNOME), et kdm (qui fait partie de la suite KDE)

gestionnaire de fenêtres

application X qui permet de déplacer, redimmensionner et "iconifier" les fenêtres. Certains gestionnaires de fenêtres proposent aussi une barre de tâches ainsi que des menus déroulants pour le lancement des applications. twm, fluxbox, icewm etc. sont des gestionnaires de fenêtre

gestionnaire de session

application qui permet d'enregistrer la session graphique lorsque l'utilisateur se déconnecte

Fichier de configuration de X11

Fichier

Description

XF86Config

fichier de configuration du serveur X11R6

Fichiers de configuration des gestionnaires d'affichage

Fichier

Description

gdm.conf

fichier de configuration de gdm

kdmrc

fichier de configuration de kdm

Xaccess

un des fichiers utilisé pour autoriser / interdire les accès XDMCP

xdm-config

fichier de configuration principal pour xdm

Xrescources

fichier permettant de personnaliser les gestionnaires d'affichage

Xservers

configure le nombre de gestionnaires d'affichage à lancer sur le système. Le fichier relie un "display" (:0 par défaut) à un serveur (en général X11R6)

Xsession

script utilisé par les gestionnaires d'affichage pour lancer un environnement graphique spécifique

Xclients

script utilisé par Xsession ainsi que xdm pour lancer le gestionnaire de fenêtre système

Fichiers de personnalisation

Fichier

Description

~/.Xresources ~/.Xdefaults

fichiers utilisés pour personnaliser l'affichage des applications X (position, taille de police, couleur, etc.)

~/.xinitrc

fichier utilisé par startx dans lequel l'utilisateur peut préciser le gestionnaire de fenêtre ou l'environnement de bureau à lancer

~/.Xclients

fichier utilisé par les gestionnaires d'affichage dans lequel l'utilisateur peut préciser le gestionnaire de fenêtre ou l'environnement de bureau à lancer

Commandes

Commande

Description (apropos)

gdm

gdm(1) -GDM se substitue à XDM. Contrairement à ses concurrents (X3DM, KDM, WDM), GDM a été écrit à partir de zéro et ne contient aucune ligne de code de XDM. GDM lance et gère les serveurs X, qu'il soient locaux ou distants (avec XDMCP)

kdm

gestionnaire d'affichage fourni avec l'environnement de bureau KDE. Il utilise de nombreux fichiers de configuration de xdm

startx

script qui appelle xinit et lance un serveur X avec le gestionnaire de fenêtre et le bureau

xauth

(ne fait pas partie des objectifs LPI) xauth(1) - Le programme xauth permet d'éditer les informations d'autorisation utilisées à la connexion au serveur X. Normalement, xauth n'est pas utilisé pour créer le fichier d'autorisation, c'est xdm qui s'en charge. Pour de plus amples informations, consultez pam_xauth(8)

xdm

X Display Manager, gestionnaire d'affichage faisant partie du serveur X

xf86config

script de configuration du serveur X : crée le fichier XF86Config

XF86Setup

programme qui crée ou modifie le fichier XF86Config

xhost

xhost(1) - la commande xhost est utilisée pour ajouter ou supprimer des noms d'utilisateurs ou des noms d'hôtes de la liste autorisée à se connecter au serveur X. Pour les hôtes, c'est un contrôle de sécurité assez rudimentaire, uniquement suffisant pour une station de travail mono-utilisateur

xinit

xinit(1) - le programme xinit est utilisé pour lancer le serveur X Window et le premier client X (en général, un gestionnaire de fenêtre) sur les systèmes qui ne lancent pas X directement à partir de /etc/init.d ou dans les environnements qui utilisent plusieurs systèmes graphiques. Lorsque ce premier client se ferme, xinit tue le serveur X et se termine

xinitrc

script lancé par xinit contenant une liste de clients X à démarrer. Les clients supplémentaire, comme les terminaux, xclock, etc., devraient être lancés en tâche de fond, alors que le premier client, en général, le gestionnaire de fenêtre, devrait être lancé au premier plan, de façon à éviter qu'xinitrc se ferme (voir xinit (1))

xvidtune

xvidtune(1) - sans option, présente à l'utilisateur une interface lui permettant d'ajuster les modes vidéo. Il affiche également les paramètres dans un format permettant leur inclusion dans le fichier XF86Config

Travaux pratiques

NdT : Ces travaux pratiques ont été prévus pour des stations de travail en environnement de type RedHat.

Avant de commencer, assurez vous que vous êtes en niveau d'exécution 3.

Réponses aux questions

  1. non : XF86Config est le fichier de configuration du serveur X. En général, les fichiers de configuration des gestionnaires d'affichage se trouvent dans des sous-répertoires du répertoire utilisateur

  2. oui, même si les pare-feu peuvent empêcher les clients X d'accéder aux serveurs distants.

  3. non, les gestionnaires d'affichage gèrent l'affichage des écrans de connexion sur le serveur X local ou sur des serveurs distants avec XDMCP

  4. oui, vous noterez que sur la plupart des distributions Linux récentes, vous devrez utiliser xauth avec xauth

  5. oui

  6. non, on utilise généralement startx

Page consultée 796 fois

Site hébergé sur un Cloud Public IKOULA Ikoula