Guide pratique de l'utilisateur de X Window

Version française du The X Window User HOWTO

Yann Mombrun

Adaptation française

Jean-Philippe Guérard

Préparation de la publication de la v.f.

Version : 3.1.fr.1.0

3 Octobre 2006

Historique des versions
Version 3.1.fr.1.02006-10-03YM, XXX, JPG
Première traduction française. Conversion au format docbook 4.2.
Version v3.12002-10-10HB
Quelques petits ajouts et mises à jour. (Some minor additions and updates.)
Version v3.02002-03-06HB
Réécriture du document original. Convertion au format DocBook. Très nombreuses modifications. (Rewrite of the original document. Convert to DocBook. Many, many changes.)

Résumé

Ce document donne aux utilisateurs de Linux les informations de base pour comprendre et configurer le système X-Window. Le document est sensé être de niveau débutant. On part du principe que les bases en configuration de logiciels sont acquises, et que le système X Window est installé et fonctionne.


Table des matières

Introduction
Nouvelles version et journal des changements
À faire
Retour d'information
Au secours !!
Remerciements
Copyright
Avertissement d'usage
XFree86
Matériel
XF86Config
xvidtune et le réglage des fréquences de l'écran
Faire tourner X
startx
Gestionnaires d'affichage
Pour en savoir plus sur la configuration de X
Ressources X
xmodmap, le clavier et les souris
xset
Polices et Couleurs
Les polices démystifiées
Les couleurs
Gestionnaires de fenêtres et bureaux
Les gestionnaires de fenêtres
Les environnements graphiques
X et la ligne de commande
xterm et ses amis
X ; le réseau et la sécurité
Parlons performance
Le matériel
La mémoire
X sur le réseau
Autres astuces
10. Annexe
Terminologie et utilisation
Liens et autres références

Le système X-Window est un environnement avancé, de traitement graphique et de réseau, qui a été conçu depuis le début comme système multi-utilisateurs. La première version de X est sortie en 1984. Si vous ne connaissez pas les concepts de base qui s'appliquent à X et aux composants associés, il faut d'abord lire le X Window System Architecture Overview HOWTO, http://linuxdoc.org/HOWTO/XWindow-Overview-HOWTO/index.html, pour avoir une idée de la façon dont les divers composants s'assemblent. On y trouvera également des propositions de définitions de divers termes relatifs à X-Window dans l'annexe, si les concepts tels que « affichages » [displays] ou « clients X » vous posent problème dans ce contexte.

Dans ce document, nous aborderons la configuration et l'utilisation de base de X-Window sous Linux. Nous regarderons également la façon la plus courante de lancer X avec Linux, et comment on peut configurer le démarrage, ainsi que les questions qui s'y rattachent. Nous n'étudierons ni la configuration du gestionnaire de fenêtre (par exemple fvwm) ni celle de l'environnement graphique (KDE et GNOME). Il y a bien trop de variables et les changements sont trop fréquents. Bien évidement l'utilisateur interagit beaucoup plus directement avec ces composants que le serveur X lui-même ; des lectures complémentaires seraient donc bien utiles. Etudiez la documentation fournie en local et consultez les pages web respectives pour obtenir plus d'informations.

Voici quelques autres points importants à retenir :

  • X est un système client-serveur et multi-utilisateur à tout point de vue, et pas uniquement une interface graphique.

  • X n'est pas intégré dans le système d'exploitation, il s'installe au-dessus, comme les autres serveurs.

  • X est un standard ouvert, et tourne sur de nombreuses plateformes.

  • Ce que vous voyez en fait à l'écran est le résultat de divers composants, fonctionnant tous ensemble : le système d'exploitation, X, le gestionnaire de fenêtres, et le cas échéant, un environnement graphique comme GNOME ou KDE. Ceux-ci sont des composants prêts à l'emploi [plug-and-play], c'est-à-dire qu'il est possible de remplacer un composant particulier sans toucher aux autres.

  • Chacun de ces composants a sa propre configuration. Cela donne un système très souple et potentiellement très robuste. Cela ajoute également de la complexité.

L'intérêt sera ici uniquement porté sur X tel qu'il est implémenté par le projet le projet XFree86,, sous Linux. Il existe d'autres implémentations, notamment des versions commerciales. XFree86 v4.x est sortie depuis longtemps maintenant, nous parlerons donc de cette version. La majorité du document s'applique également à la version précédente (3.x), mais il peut y avoir parfois quelques différences.

Il est également à noter qu'il y a peut-être de nombreuses façons de démarrer X et de configurer un système Linux. Nous nous concentrerons sur les méthodes courantes que l'on trouve dans les distributions Linux. En outre, les revendeurs peuvent faire varier l'emplacement des fichiers de configuration et leur nom. Gardez ceci en tête si vous rencontrez de telles anomalies dans ce document. Si cela pose problème, votre revendeur a sûrement sa propre documentation. Et comme toujours, espérons que les pages de man correspondront à votre installation.

Nous verrons également de nombreux fichiers de configuration dans les sections suivantes. Ce sont tous des fichiers de type texte, vous pouvez les éditer avec votre éditeur préféré. Faites toujours une copie de sauvegarde avant d'éditer les fichiers importants, vu que les ennuis arrivent toujours quand on ne les attend pas (« par exemple cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.bak »).

La version officielle actuelle de ce guide est disponible sur le site du projet de documentation Linux (Linux Documentation Project http://www.linuxdoc.org/HOWTO/XWindow-User-HOWTO.html). Des versions béta peuvent être périodiquement disponibles sur http://feenix.burgiss.net/ldp/x-user/.

v3.1 : uniquement quelques petites modifications mineures. Comporte un lien vers http://www.plig.org/xwinman/ qui est très utile pour l'achat de gestionnaires de fenêtre. Ajout d'un lien vers la fluxbox, un gestionnaire de fenêtres avec onglets. Ajout d'une courte section sur l'amélioration des performances en réseau. Vérification du fonctionnement de tous les liens.

v3.0 : document largement remanié avec de nombreuses nouvelles sections. Certaines sections ont été supprimées, pour se concentrer maintenant exclusivement sur X proprement dit (et non plus les clients comme les gestionnaires de fenêtre). Nouveau responsable de la maintenance également :-)

v2.0 : comporte des corrections de Guus Bosch, Brian J. Miller, et de moi-même, ainsi que de nombreuses nouvelles mises à jour et informations.

v1.4 : comporte des corrections de Anthony J., et quelques très bon conseils pour la sécurité de Tomasz Motylewski.

Si vous avez des questions ou des commentaires à propos de ce document, n'hésitez pas à me contacter par courriel, Hal Burgiss, . Toutes suggestions, corrections ou ajouts sont les bienvenus. S'il y a des informations que vous souhaitez voir dans les prochaines versions, ou si vous souhaitez participer à une prochaine version, envoyez moi un message.

Copyright © 2002, Hal Burgiss.

Sauf indication contraire, les guides pratiques de Linux sont couverts par leurs droits d'auteur respectifs. Les guides pratiques de Linux peuvent être reproduits et distribués entièrement ou partiellement, avec tout média physique ou électronique, tant que cette notification de copyright est maintenue sur toutes les copies. La redistribution commerciale est permise et encouragée ; cependant, l'auteur voudrait être avisé de telles distributions.

Toutes les traductions, produits dérivés, ou des travaux d'agrégat incorporant n'importe quel guide pratique de Linux doivent être couverts sous cette notification de copyright. C'est-à-dire, vous ne pouvez pas produire un travail dérivé à partir d'un guide pratique et imposer des restrictions additionnelles à sa distribution. Il est possible d'accorder des exceptions à ces règles sous certaines conditions ; veuillez contacter le coordonnateur des guides pratiques de Linux pour plus d'information.

En bref, nous souhaitons favoriser la diffusion de cette information par autant de canaux que possibles. Cependant, nous souhaitons maintenir copyright sur les guides pratiques, et voudrions être avisés de tout projet pour redistribuer les guides pratiques, celui-ci en particulier !

Certaines des termes mentionnés dans ce document sont des noms de marque. Sauf indication contraire, toutes les marques déposées appartiennent à leurs propriètaires respectifs.

« X Window System » est une marque déposée par le X Consortium, Inc [devenu le OpenGroup ?].

« XFree86 » est une marque déposée par « The XFree86 Project, Inc ».

« Linux » est une marque déposée de Linus Torvalds.

Quasiment toutes les distributions Linux sont fournies avec une implémentation du système X-Window de XFree86. C'est un projet qui nous fournit évidemment le serveur X, mais qui comporte également une suite étendue d'utilitaires et d'applications pour permettre l'implémentation d'un environnement entièrement fonctionnel de l'interface graphique.

En fait, la liste serait tout simplement trop longue s'il fallait énumérer tout ce qui est fourni avec XFree86. En plus du serveur X lui-même, voici quelques-uns des utilitaires les plus remarquables :

xdm le gestionnaire d'affichage de X.
xfs - le serveur de police de X.
twm - gestionnaire de fenêtre léger.
xterm - l'émulateur de terminal le plus connu. Egalement, xterm3d et nxterm.
xwd - utilitaire pour faire les captures d'écran et de fenêtre.
xf86config - utilitaire de configuration du serveur X.
xdpyinfo -utilitaire donnant des informations sur X. Il montre des informations très détaillées sur le serveur X.
xlsclients - liste des clients actuellement connectés au serveur X.
xlsfonts - liste des polices disponibles pour X.
appres - liste des « ressources » X qu'un programme va utiliser.
xfontsel - application permettant de voir ou de choisir les polices.
xprop - outil pour afficher les propriétés de la fenêtre, comme par exemple le nom de la classe du client.
xset - paramètre les préférences de l'utilisateur pour beaucoup de choses, y compris la souris, le clavier ou le son (sonnerie, sonnette)...
xsetroot - programme pour changer l'aspect de la « fenêtre root », par exemple changer la couleur de fond.
xvidtune - application pour adapter les modes vidéo du serveur X et les paramètres liés à l'écran.
xwininfo - affichage d'informations sur une « fenêtre » sélectionnée.
xmodmap - utilitaire pour manipuler les valeurs/affectations des touches du clavier et celles des boutons de la souris
Enormément de polices. Et pas mal de documentation également.

Il y a en beaucoup d'autres. Nous n'aborderons que quelques uns de ces utilitaires ici. Mais n'hésitez pas à tester les autres. La plupart doivent avoir leurs propres pages de man.

Le serveur X commande les dispositifs d'entrée (clavier, souris, etc.) et de rendu (affichage, écran).

La compatibilité matérielle est un sujet difficile, puisque c'est toujours très évolutif. Nous sommes forcés ici d'éviter les détails, puisqu'ils auront sûrement changés avant que vous ayez lu ceci. Et ce serait long et fastidieux de toute façon.

Commençons donc par quelques généralités. La plupart du matériel de type PC est compatible à un degré ou à un autre. Très utile ; -)

Principe de base : s'il s'agit d'un système qui utilise un protocole de longue date et banal (par exemple PS/2), la compatibilité devrait être bonne. Réciproquement, s'il utilise quelque chose de relativement nouveau, avec de la technologie innovante, il risque d'y avoir des problèmes. C'est dans la nature de la bête, avec d'un côté le développement des logiciels libres et de l'autre les fabricants qui s'intéressent surtout aux plateformes les plus répandues. Quelques fabricants sont plus coopératifs que d'autres aussi.

Maintenant, quelques indications générales:

Vous pouvez vérifier « la liste de compatibilité matérielle » sur le site Web de votre distribution également. Ceci devrait donner une idée assez précise de ce qui devrait fonctionner avec votre version.

Les nouvelles versions de XFree86 auront évidemment une meilleure compatibilité matérielle. Si vous utilisez une version plus ancienne de Linux et n'avez pas la compatibilité matérielle totale, il faudrait regarder comment mettre à jour XFree86. Vérifiez d'abord si votre distribution a des mises à jour pour votre version.

Le fichier principal de configuration pour XFree86 est XF86Config, qui peut exister sur votre système sous le nom de XF86Config-4 pour XFree86 v4.x, ou peut-être d'autres variantes (voir la page de man). Il est en général placé dans /etc/X11/XF86Config, bien que, encore une fois, le chemin puisse varier. Si un XF86Config-4 et XF86Config existent, XFree86 v4.x utilisera le premier. C'est un fichier indispensable.

Le fichier XF86Config définit les dispositifs matériels, et d'autres composants cruciaux de l'environnement du serveur X.

Alors qu'il s'agit d'un fichier texte, et qu'il est modifiable, il est le plus souvent créé pendant l'installation par tout utilitaire que votre éditeur utilise dans ce but. XFree86 inclut également l'utilitaire xf86config pour faire cela, mais beaucoup de distributions ont leurs propres utilitaires similaires. Ces utilitaires peuvent être lancés après l'installation si besoin est, pour changer la configuration, ou si un nouveau matériel est installé. Commencez par lire la documentation installée en local. Si vous essayez d'éditer à la main ce fichier, n'oubliez surtout pas de faire d'abord une copie de sauvegarde puisque X ne démarrera pas si ce fichier n'est pas à son goût ; -)

Ce fichier contient diverses « sections ». Chaque section définit un certain aspect fondamental de XFree86, tel que « InputDevice » (souris, clavier, joystick, etc.), « moniteur », ou « écran ». La page de man de XF86Config décrit les sections et les valeurs communes pour chacun d'eux. Notez que les valeurs énumérées dans la page de man n'est pas une liste exhaustive. Il y a beaucoup d' « options » spécifiques à chaque dispositif. Visitez le site http://xfree86.org où vous trouverez des notes et des astuces pour votre matériel.

Le XF86Config-4 actuel de l'auteur, tel qu'il a été généré par le programme d'installation de RedHat pour XFree86 4.1 :

Section "ServerLayout"
	Identifier "XFree86 Configured"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
   # L'emplacement de la base de données RGB.
   RgbPath     "/usr/X11R6/lib/X11/rgb"

   # Les entrées multiples de FontPath sont permises, elles sont
   # concaténées.
   # Par défaut, Red Hat 6.0 et suivantes utilisent maintenant un serveur de polices
   # indépendant du serveur X pour rendre les polices.
   FontPath "unix/:7100"
EndSection

# Section chargement des modules

Section "Module"
	Load  "dbe"		# Double mise en mémoire tampon
	Load  "GLcore"		# Support de OpenGL
	Load  "dri"		# Infrastucture de rendu direct
	Load  "glx"		# Interface pour le protocole OpenGL X
	Load  "extmod"		# Diverses extensions requises
	Load  "v4l"		# Vidéo pour Linux
#    Load  "fbdevhw"
     Load  "pex5"
     Load  "record"
     Load  "xie"
EndSection


Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "keyboard"
	Option      "XkbLayout"	"us"

#    Option  "AutoRepeat"    "500 5"

# Si vous utilisez XQUEUE, commentez la ligne ci-dessus, et décommentez la 
# ligne suivante.
#    Option  "Protocol"      "Xqueue"

# Spécifiez quelles diodes électroluminescentes du clavier peuvent être contrôlées par
# l'utilisateur (par exemple, avec xset(1))
#    Option  "Xleds"         "1 2 3"

# Pour désactiver l'extension XKEYBOARD, décommentez XkbDisable.
#    Option  "XkbDisable"

# Pour personnaliser les paramètres XKB en fonction de votre clavier, modifiez les lignes
# ci-dessous (qui sont par défaut).  Par exemple, pour un clavier non U.S.
# vous allez probablement utiliser :
#   Option  "XkbModel"      "pc102"
# Si vous avec un clavier US Microsoft Natural, vous pouvez utiliser :
#   Option  "XkbModel"      "microsoft"
EndSection

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

Section "Monitor"
	Identifier "Sylvania F74"
	VendorName "Unknown"
	ModelName  "Unknown"
	HorizSync   30 - 70
	VertRefresh 55 - 120
	Option "dpms"
#    Le bloc Modeline s'insère ici si nécessaire. Utilisez xvidtune pour
#    obtenir les bonnes valeurs.
EndSection

Section "Device"
	Identifier "ATI Rage 128"
	Driver "r128"
	BoardName "Unknown"
EndSection

Section "Device"
	Identifier "Linux Frame Buffer"
	Driver "fbdev"
	BoardName "Unknown"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device "ATI Rage 128"
	Monitor "Sylvania F74"
	DefaultDepth 24
	Subsection "Display"
		Depth 24
		Modes "1400x1050" "1280x1024" "1152x864" "1024x768" "800x600"
	EndSubSection
	Subsection "Display"
		Depth 16
		Modes "1600x1200" "1400x1050" "1280x1024" "1152x864" "1024x768" "800x600"
	EndSubSection
	Subsection "Display"
		Depth 8
		Modes "1024x768" "800x600" "640x480"
	EndSubSection
EndSection

Section "DRI"
	Mode 0666
EndSection
 

Le vôtre peut paraître tout à fait différent. Il s'agit juste d'une configuration possible avec des commentaires ajoutés gracieusement par RedHat (et par moi), et ce, pour une installation assez ordinaire. Il n'y a rien d'exotique ici, comme des écrans ou affichages multiples.

Il n'entre pas dans le cadre de ce document de donner des explications détaillées. Jetez un oeil à la page de man de XF86Config. Et en outre, pensez à visiter xfree86.org et à y rechercher les options spécifiques qui pourraient s'appliquer à votre carte ou à tout autre matériel.

Juste une petite note à propos de la section « Screen » ci-dessus. Remarquez qu'elle se décompose en trois sous-sections, identifiées par « Display ». Chaque sous-section a une « Depth [profondeur] » différente indiquée (il y a un autre nom : ColorDepth). Les « Modes » varient également légèrement selon leur paramètre respectif de « Depth ». La sous-section active de « Display » qui sera utilisée, est déterminée par le paramètre « DefaultDepth » (sauf s'il est surchargé en ligne de commande). La valeur par défaut définie dans cet exemple est « 24 », c'est donc la première sous-section qui sera utilisée. En outre, le « Mode » le plus élevé cité dans cette sous-section sera le mode par défaut (résolution), qui ici est le premier cité. Le premier mode cité détermine également la zone d'écran visualisable, qui peut être plus petite que le mode (résolution) lui-même. Dans ce cas, vous auriez un bureau virtuel qui serait plus grand que l'écran visualisable. Pour faire concorder la résolution et l'écran visualisable, choisissez la plus grande valeur comme première valeur énumérée dans chaque « Mode ».

Voici une deuxième note sur les « Modes » : ce que vous voyez est le résultat de mes choix pendant la configuration de Xconfigurator de RedHat. Ce sont des résolutions standard, mais ce n'est pas obligatoire ! La seule limite est ce que votre matériel peut accepter. Et il n'est pas obligatoire non plus d'utiliser des rapports standard hauteur/largeur. Quelque chose du genre 1355x1112 constitue un paramètrage valide (si votre matériel l'accepte et que vogue le navire !).

Le serveur de X rejettera tous les « Modes » qu'il juge erronés/invalides. Vous pouvez faire un tour des modes valides pour changer la résolution d'écran avec Ctrl+Alt++ et Ctrl+Alt+- (avec les touches + et - du clavier).

Dans les versions précédant la v4.x, vous verriez également beaucoup de blocs « Modeline » qui permettaient de définir les possibilités du moniteur. Ces blocs pourraient ressembler à ceci :

 # 1024x768 @ 100Hz, 80.21 kHz hsync
 Modeline "1024x768"  115.5  1024 1056 1248 1440  768  771  781  802 -HSync -VSync
 

La définition explicite du « Modeline » n'est plus requise depuis les versions de 4.x ;-) Il fallait parfois éditer à la main pour obtenir les valeurs optimales dans des versions antérieures de XFree86, cela n'est généralement plus nécessaire avec v4.x. Le guide pratique des synchronisations vidéo sous XFree86, http://www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO/index.html en propose une explication intéressante, mais assez technique.

Si l'utilitaire de configuration que vous employez, quel qu'il soit, n'identifie pas automatiquement votre carte vidéo ou les caractéristiques de votre écran correctement, vous avez peu de chances d'obtenir une configuration optimale. Dans ce cas, il vous faudra peut-être entrer manuellement les valeurs correctes. Ca devrait se trouver dans votre manuel de l'utilisateur (que vous avez gardé, hein ?). Sinon, jetez un oeil au site Web du fabricant.

Encore une fois, l'édition manuelle du fichier est généralement inutile. Si vous pensez qu'il faut tout de même le faire, faites attention. Une toute petite erreur peut faire planter X. Toute modification de ce fichier nécessitera de redémarrer X pour qu'elle prenne effet.

Utiliser le fichier du XF86Config de quelqu'un d'autre, est généralement une mauvaise idée puisqu'il est peu probable qu'il ait exactement le même matériel que vous.

Vous voulez probablement obtenir le meilleur de votre matériel. Si X n'est pas configuré de façon optimale, pensez à réexécuter l'utilitaire de configuration de X de votre fournisseur pour essayer d'obtenir de meilleurs résultats. Il est très peu probable que vous puissiez endommager quoi que ce soit en faisant des essais. La plupart des écrans modernes ont maintenant des protections qui permettent d'éviter la fusion/l'accident nucléaire ; -)

Si vous en faites un peu trop cependant, X peut ne pas pouvoir démarrer. Pour cette raison, je préfère employer la commande « startx » pour démarrer X (voir ci-dessous) pendant les « essais ». De cette façon si X plante, le gestionnaire d'affichage (connexion de l'interface graphique) ne fera pas une boucle en vous donnant des maux de tête épouvantables. La commande startx va juste tranquillement retourner à un écran de console texte, où un message d'erreur sera affiché.

Une autre manière de peaufiner les paramètres associés à cet écran est d'utiliser le programme xvidtune de XFree86. Il est interactif et peut être utilisé pour ajuster divers paramètres (voir la page de man). La boîte de dialogue simple possède des glisseurs et boutons qui permettent à l'utilisateur d'entrer des paramètres et de les régler. La partie supérieure gauche permet de faire le paramètrage horizontal de l'écran, et celle de droite le paramètrage vertical. Les boutons juste au-dessous des glisseurs peuvent être utilisés pour les régler. .

On l'utilise parfois pour ajuster la zone d'écran visualisable, par exemple pour la centrer, ou augmenter sa taille jusqu'à la bordure de l'écran. Quand le xvidtune est lancé, il prend par défaut les paramètres en cours.

Le coin inférieur gauche possède les boutons nécessaires pour appliquer [« Apply »] de nouveaux paramètres, pour tester [« Test »] de nouveaux paramètres, ou pour montrer [« Show »] les paramètres (c.-à-d. les afficher à l'écran), entre autres. Aucun changement fait ici n'est enregistré. Si les nouveaux paramètres sont « appliqués », ils le sont juste pour la session courante. Exemple de résultat donné par « Show » de xvidtune :

 Vendor: Unknown, Model: Unknown
 Num hsync: 1, Num vsync: 1
 hsync range 0:  30.00 -  70.00
 vsync range 0:  55.00 - 120.00
 "1400x1050"   122.00   1400 1488 1640 1880   1050 1052 1064 1082 +hsync +vsync
 

La dernière ligne est le « Modeline » employé pour piloter l'écran courant. Voir Le guide pratique des synchronisations vidéo sous XFree86, http://www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO/index.html, pour en savoir plus sur les « Modelines ».

Vous pouvez tester les modifications, et les appliquer à la session courante. Pour que les modifications deviennent permanentes, elles devront être ajoutées manuellement dans la section « Monitor » de XF86Config (ou de XF86Config-4 pour v.4.x) avec un éditeur de texte.

xvidtune va dûment vous avertir des risques liés au jeu avec les paramètres de l'écran. Il est peu probable que vous endommagiez quelque chose avec les écrans modernes. Mais il est préférable de ne l'utiliser que pour faire des ajustements mineurs. A utiliser à vos risques et périls !

Le démarrage d'une session de X peut se faire de deux manières : soit on démarre la session de X via un gestionnaire d'affichage (comme xdm), et l'utilisateur se connecte via un écran d'interface graphique. Soit l'utilisateur démarre X manuellement en se connectant via une console texte, ce qui se fait, de manière classique, avec la commande startx, qui est un script shell simple contenant un xinit. X tourne avec les droits de superutilisateur dans les deux cas, puisqu'il a besoin de l'accès direct au matériel.

Il faut savoir que le choix de la méthode utilisée dépend du système « runlevel ». Le runlevel par défaut qui se lance au démarrage se trouve généralement dans /etc/inittab sous Linux :

# Lancer xdm en runlevel 5
x:5:respawn:/etc/X11/xdm ~nodaemon
 

Cela lancera xdm, et donc X, avec le runlevel 5. Il redémarrera s'il meurt ou s'arrête quelle qu'en soit la raison. On peut également utiliser la commande init pour changer de runlevel sans redémarrer (voir la page de man).

Voyons brièvement les deux approches, puis un peu de configuration supplémentaire pour paramètrer l'environnement de travail de l'utilisateur.

startx démarrera X en appelant d'abord xinit. En soit, cette action vous donnera un bureau vide, flou et réduit au strict minimum sans qu'aucun gestionnaire de fenêtres n'ait été chargé. A la base, xinit prend deux ensembles d'arguments en ligne de commande : les caractéristiques du client (les programmes qui vont être lancés, etc.), et les caractéristiques du serveur (les options du serveur X), séparés par « -- ». Si aucun programme de client n'est indiqué dans la ligne de commande, xinit cherchera un fichier .xinitrc dans le répertoire local de l'utilisateur, à exécuter comme script shell. S'il le trouve, celui-ci, à son tour, exécutera les commandes personnalisées de l'utilisateur nécessaires pour configurer son environnement, ou lancera les programmes que le fichier contient. Si ce fichier n'existe pas, xinit emploiera la commande initiale suivante :

 xterm -geometry +1+1 -n login -display :0
 

Si aucun .xserverrc n'est trouvé dans le répertoire local de l'utilisateur, X lui-même sera lancé par la commande suivante :

 X :0
 

Comme vous voyez, ce n'est pas très utile car il ne lance qu'un seul xterm. startx fournit plus de fonctionnalité et de souplesse à xinit. startx appellera xinit pour nous, et fournira également quelques options simples de configuration. Vous pouvez également lancer des commandes telles que la suivante, par exemple :

 startx -- -dpi 100 -depth 16   #pousse X à 100 points par pouces
                                #et la profondeur de couleur à 16 (syntaxe X v4)
 

Tout ce qu'il y a après les doubles tirets est passé comme argument directement au serveur X par l'intermédiaire de xinit. Dans cet exemple, vous pouvez forcer X à la résolution de votre choix, mais il continuera quand même à utiliser les fichiers de configuration dont nous parlerons plus tard dans ce document. Voir la page de man de Xserver pour plus d'options en ligne de commande.

Au lieu de lancer la même ligne de commande à chaque fois, il est plus facile d'utiliser les fichiers de configuration pour qu'ils nous stockent ce type d'information.

Si on jette un coup d'oeil au script startx (/usr/X11R6/bin/startx sur mon système), on voit qu'il emploie deux fichiers de configuration par défaut pour permettre d'établir l'environnement de X : xinitrc et xserverrc. Il regarde d'abord dans /etc/X11/xinit/, pour les gros fichiers systèmes. Il cherche ensuite dans le répertoire local de l'utilisateur des fichiers semblables, qui seront prioritaires s'il les trouve. Notez que ces derniers sont des fichiers « point » de type Unix (par exemple ~/.xinitrc), et sont des scripts shell exécutables.

Normalement on n'aura pas besoin d'éditer les gros fichiers systèmes, mais si on veut on peut les copier dans le répertoire local comme point de départ, ou simplement démarrer à partir de zéro. Comme vous pouvez le deviner grâce aux noms, l'un permet de configurer le serveur X, et l'autre configure xinit en exécutant des commandes, en préparant l'environnement et éventuellement en lançant des programmes client comme xterm ou un gestionnaire de fenêtres (oui, c'est un client également).

xinitrc s'emploie pour établir un environnement X approprié, et pour lancer d'autres programmes, qu'on appelle aussi des « clients » que l'on souhaitera peut-être avoir disponibles dès le démarrage de X. Vous avez probablement un fichier système xinitrc pour démarrer un ensemble prédéfini de programmes. Pour personnaliser, créez votre propre fichier dans votre répertoire local. Nommez le .xinitrc, assurez- vous que c'est un script exécutable, et faites chmod +x. Un exemple (à partir de l'original sur mon système, légèrement modifié) :

#!/bin/sh
# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap

# fusionne les événements de touche par défaut avec les personnalisées
if [ -f $userresources ]; then
    xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
    xmodmap $usermodmap
fi

if [ -z "$BROWSER" ] ; then
	# nous avons besoin d'un navigateur sur le système
	BROWSER=`which netscape`
	if [ -z "$BROWSER" ] || [ ! -e "$BROWSER" ] ; then
	# pas encore trouvé
		BROWSER=
	fi
fi
if [ -z "$BROWSER" ] ; then
	# nous avons besoin d'un navigateur sur le système
	BROWSER=`which lynx`
	if [ -z "$BROWSER" ] || [ ! -e "$BROWSER" ] ; then
	# pas encore trouvé
		BROWSER=
	else
		BROWSER="xterm -font 9x15 -e lynx"
	fi
fi

export BROWSER

# Démarre quelques programmes sympas
if [ -f $HOME/.Xclients ]; then
    exec $HOME/.Xclients
else
    xclock -geometry 50x50-1+1 &
    xterm -geometry 80x50+494+51 &
    if [ -f /usr/X11R6/bin/fvwm ]; then
        exec fvwm
    else
        exec twm
    fi
fi

#eof 
 

Voici en deux mots ce que fait ce script : il installe notre environnement de travail, avec le xmodmap (clavier) et le xrdb (paramètres des ressources d'application). Nous en dirons plus un peu plus bas. Ensuite la variable $BROWSER du shell est affectée pour un environnement à interface graphique (Netscape dans cet exemple) de sorte que toutes les applications qui pourraient avoir besoin de celle-ci aient à leur disposition un choix raisonnable. Ensuite la présence du fichier Xclients est vérifiée, dans les dossiers systèmes ainsi que dans le répertoire local de l'utilisateur. Dans notre exemple, c'est dans ce fichier que toutes les applications clientes sont démarrées, y compris un gestionnaire de fenêtre (voir ci-dessous). Elles auraient pu tout aussi bien démarrer ici si nous l'avions voulu. Si un fichier Xclients ne peut être trouvé, un gestionnaire de fenêtre est démarré pour nous. fvwm si disponible, sinon twm, le gestionnaire de fenêtre minimaliste de XFree86. Si pour une raison ou pour une autre, aucun des deux ne pouvait être démarré, le script se fermerait, et X ne démarrerait pas.

Jusque là, le déroulement de l'ensemble des opérations s'est effectué d'une façon tout à fait classique et prévisible. Pour récapituler, nous avons appelé startx, qui a à son tour appelé xinit, qui a analysé le xinitrc pour les paramètres initiaux. La plupart des Linux devraient suivre cet ordre-là, bien que les différents valeurs et paramètres puissent différer.

Nous sommes maintenant au dernier maillon de la chaîne où l'utilisateur aura normalement indiqué ses préférences, y compris le gestionnaire de fenêtres et/ou l'environnement graphique à utiliser. Le système fournira par défaut des scripts raisonnables, bien que probablement inintéressants, si l'utilisateur ne l'a pas fait. C'est sans doute pourquoi vous êtes ici ; -)

Le gestionnaire de fenêtres, ou environnement graphique, est tout le temps l'application qui démarre en dernier. Si vous voulez qu'il y ait d'autres programmes à démarrer (comme xterm), ils doivent être démarrés avant le gestionnaire de fenêtres et mis en arrière-plan avec un « & ». Ceci peut être fait dans le ~/.xinitrc de l'utilisateur. Ou bien, comme dans l'exemple ci-dessus, les applications en question sont démarrées à partir d'encore un autre script. En voici un court à titre d'exemple, .Xclients :

#!/bin/bash
# ~/.Xclients, démarre mes programmes

xset s off s noblank
xset m 30/10 4
xset r rate 200 40

xscreensaver & 
rxvt -geometry 80x50-50+150 &

echo Démarrage du gestionnaire de fenêtres...

if [ -x /usr/X11R6/bin/wmaker ]; then
  echo `date` : Essai de /usr/X11R6/bin/wmaker... |tee -a ~/.wm-errors 2>&1
  exec /usr/X11R6/bin/wmaker >> ~/.wm-errors 2>&1
fi 

echo `date`: Echec, essai de fvwm... |tee -a ~/.wm-errors 2>&1

# Essayons maintenant le bon vieux fvwm (AnotherLevel ne fonctionne pas avec fvwm1).
if [ -n "$(type -path fvwm)" ]; then
  # si ça marche, nous arrêtons ici
  exec fvwm >> ~/.wm-errors 2>&1
fi

echo `date`: Echec, essai de twm... |tee -a ~/.wm-errors 2>&1

# Bon, fvwm n'est pas là non plu...
# Utilisation de twm en dernier recours.
exec twm >> ~/.wm-errors 2>&1

# Mort dans l'oeuf, X ne se lancera pas... pffff !
echo `date`: Impossible de lancer le gestionnaire de fenêtres... |tee -a ~/.wm-errors 2>&1

# eof 
 

Ca ne change pas beaucoup de ce que faisait xinitrc. Nous avons ajouté quelques gadgets, parmi lesquels le démarrage d'un écran de veille, un émulateur de console différent que cet utilisateur préfère (rxvt), avec encore plus de paramètrages de l'environnement (moniteur, souris et clavier) en utilisant xset cette fois, et un gestionnaire de fenêtres différent de celui qui était disponible avec les paramètres par défauts du système. Ce fichier étant dans le répertoire local de l'utilisateur, il ne sera pas écrasé pendant les mises à jour .

En fait, X est déjà démarré à ce stade. Nous nous contentons de mettre la dernière main à la configuration. Notez que le gestionnaire de fenêtres n'est pas mis en arrière plan avec « & » ici. C'est important ! Quelque chose doit être au premier plan, sinon X se fermera. Nous n'avons pas démarré d'environnement graphique comme KDE ou GNOME, dans cet exemple, mais si nous le faisions, là cette application finale devrait être gnome-session ou startkde. Puisque nous utilisons notre propre script ici, si nous voulions changer de gestionnaire de fenêtres, la seule chose à faire serait d'éditer ce fichier, et de redémarrer X. Les configurations données par les fournisseurs peuvent être plus complexes que ça, mais les mêmes principes s'appliquent.

Pour terminer sur ce point, ne pensez pas que, au démarrage, toutes les applications du client doivent être lancées comme nous l'avons fait ici. Ca, c'est l'approche traditionnelle, que certains peuvent préférer. La plupart des gestionnaires de fenêtres lancent à leur façon bien à eux les programmes au démarrage, ce que font KDE et GNOME. Voir les documentations respectives.

L'autre approche, plus commune, est l'ouverture de session via interface graphique, où X fonctionne avant l'ouverture de session. Cela se fait avec l'aide d'un « gestionnaire d'affichage », dont il y a de nombreuses implémentations. XFree86 inclut le xdm (gestionnaire d'affichage de X) dans ce but, cependant votre distribution peut en employer un autre tel que le gdm (GNOME) ou kdm (KDE).

Les gestionnaires d'affichage en font beaucoup plus que ne le permettent les ouvertures de sessions via interface graphique. On s'en sert également pour contrôler aussi bien « l'affichage » local que distant sur un réseau. Nous n'entrerons pas dans les détails ici, mais le sujet est bien traité dans Remote X Apps Mini HOWTO et XDMCP HOWTO (voir la section des liens). Pour ce que nous voulons faire ici, ils fournissent des services similaires comme getty et login, qui permettent à des utilisateurs de se connecter dans un système et de démarrer leur shell par défaut, mais dans un environnement à interface graphique.

Voici un exemple d'utilisation plus avancée d'un autre emploi possible d'un gestionnaire d'affichage, proposé par Diego Zamboni :

J'ai deux sessions de X fonctionnant avec des résolutions différentes. Je passe de l'une à l'autre selon que mon ordinateur portable est relié à un moniteur externe ou qu'il utilise son propre écran à cristaux liquides.

Voici mon fichier /usr/lib/X11/xdm/Xservers qui lance les deux affichages :

 :1 local /usr/X11R6/bin/X :1 -layout 1024x768
 :0 local /usr/X11R6/bin/X :0 -layout 1600x1200
 

Ensuite je définis pour le serveur l'apparence suivante [ServerLayout] : « 1024x768 » et « 1600x1200 » dans mon fichier /etc/X11/XF86Config-4, comme suit :

 Section "ServerLayout"
         Identifier     "1600x1200"
         Screen         "Screen0" 0 0
         InputDevice    "Mouse0" "CorePointer"
         InputDevice    "Keyboard0" "CoreKeyboard"
 EndSection
 
 Section "ServerLayout"
         Identifier     "1024x768"
         Screen         "Screen1" 0 0
         InputDevice    "Mouse0" "CorePointer"
         InputDevice    "Keyboard0" "CoreKeyboard"
 EndSection
   
 Section "Screen"
         Identifier   "Screen0"
         Device       "S3 Savage/MX"
         Monitor      "Monitor0"
         DefaultDepth 16
         
         Subsection "Display"
                 Depth  16
                 Modes  "1600x1200" "1280x1024" "1024x768"
         EndSubsection
 EndSection
 
?## et toc ! 

 Section "Screen"
         Identifier   "Screen1"
         Device       "S3 Savage/MX"
         Monitor      "Monitor0"
         DefaultDepth 16

         Subsection "Display"
                 Depth  16
                 Modes  "1024x768" "800x600"
         EndSubsection
 EndSection 
 

Notez l'utilisation des identifiants [Identifiers] ici. Diego démarre deux « affichages » séparés ici. Il peut alors choisir lequel il veut lorsqu'il se connecte.

La plupart des gestionnaires d'affichage viennent du vénérable xdm de XFree86, avec en plus leurs propres perfectionnements. Voyons rapidement les plus répandus d'entre eux.

xdm peut être configuré à l'aide des fichiers de configuration situés dans /etc/X11/xdm/, /usr/X11R6/lib/X11/xdm, ou à des emplacements semblables selon votre système. Ce sont de gros fichiers système. Le fichier xdm-config est le fichier principal de configuration, et décrit surtout où trouver les fichiers secondaires de configuration :

 ! $XConsortium: xdm-conf.cpp /main/3 1996/01/15 15:17:26 gildea $
 DisplayManager.errorLogFile:	/var/log/xdm-errors
 DisplayManager.servers:		/etc/X11/xdm/Xservers
 DisplayManager.accessFile:	/etc/X11/xdm/Xaccess
 ! Tous les affichages devraient utiliser une autorisation
 ! mais ce n'est pas absolument certain.
 ! Les terminaux X seront configurés de cette manière, donc par défaut
 ! n'utiliser d'autorisation que pour les affichages locaux 0, 1, etc.
 DisplayManager._0.authorize:	true
 DisplayManager._1.authorize:	true
 ! Les trois ressources suivantes définissent l'affichage 0
 ! comme console
 DisplayManager._0.setup:	/etc/X11/xdm/Xsetup_0
 DisplayManager._0.startup:	/etc/X11/xdm/GiveConsole
 DisplayManager._0.reset:	/etc/X11/xdm/TakeConsole
 !
 DisplayManager*resources:	/etc/X11/xdm/Xresources
 DisplayManager*session:		/etc/X11/xdm/Xsession
 !
 ! SECURITE : Ne tenez pas compte d'éventuelles requêtes de XDMCP ou de Chooser
 ! Commentez cette ligne si vous voulez gérer les terminaux X avec xdm
 DisplayManager.requestPort:	0 
 

« ! » signale les commentaires. La commande qui démarre le serveur X est située dans /etc/X11/xdm/Xservers dans cet exemple précis comme défini par « DisplayManager.servers », et est l'équivalent de xserverrc qui a été employé pour démarrer le serveur X avec startx, mais la syntaxe est légèrement différente ici. Le contenu du fichier /etc/X11/xdm/Xservers sur mon système est simplement :

 :0 local /usr/X11R6/bin/X 
 

Cela démarre X sur le premier affichage local (désigné par 0). C'est ici, à la fin, qu'il faut mettre les options en ligne de commande que vous souhaiteriez ajouter.

Ci-dessous un exemple du fichier /etc/X11/xdm/Xsetup_0 qui ne sert que pour configurer l'écran d'ouverture de session. Notez que nous utilisons un script shell, et qu'il appelle xv (un programme d'affichage graphique) pour avoir comme arrière-plan une belle image (à la place du triste arrière-plan noir et blanc), et si cela échoue, le xsetroot est alors appelé pour essayer au moins d'avoir comme arrière-plan une couleur bleue plus jolie. Ceci ne configure pas l'outil d'ouverture de session lui-même - mais juste d'autres choses que l'on souhaiterait avoir sur l'écran pendant l'ouverture de session.

 #!/bin/sh
 xconsole -geometry 480x100-0-0 -daemon -notify -verbose -fn \
   '-schumacher-clean-medium-r-*-*-10-*-*-*-*-*-*-*' -exitOnFail  &
 
 /usr/X11R6/bin/xv -quit -root /usr/share/pixmaps/Backgrounds/InDreams.jpg \
   || xsetroot -solid darkblue
 

Le fichier /etc/X11/xdm/Xresources contrôle les « ressources » de X utilisées pendant l'ouverture de session. Dans ce contexte, les « ressources » sont des préférences de l'utilisateur portant sur certains éléments comme la police ou les couleurs (décrites avec plus de détails ci-dessous). Ci-dessous un bout de code qui paramètre les polices pour l'outil d'ouverture de session :

 #if WIDTH > 800
 xlogin*greetFont: -adobe-helvetica-bold-o-normal--24-240-75-75-p-138-iso8859-1
 xlogin*font: -adobe-helvetica-medium-r-normal--18-180-75-75-p-103-iso8859-1
 xlogin*promptFont: -adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1
 xlogin*failFont: -adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1
 #else
 xlogin*greetFont: -adobe-helvetica-bold-o-normal--17-120-100-100-p-92-iso8859-1
 xlogin*font: -adobe-helvetica-medium-r-normal--12-120-75-75-p-69-iso8859-1
 xlogin*promptFont: -adobe-helvetica-bold-r-normal--12-120-75-75-p-69-iso8859-1
 xlogin*failFont: -adobe-helvetica-bold-o-normal--14-140-75-75-p-82-iso8859-1
 #endif
 

Comme vous pouvez le voir helvetica est utilisé comme police préférée, avec différentes tailles de point et de dpi (points par pouce) selon la taille d'écran. C'est personnalisable pour convenir à tous les besoins. (Voir ci-dessous pour en savoir plus sur les conventions concernant les noms de polices dans X). Divers autres aspects peuvent également être configurés.

/etc/X11/xdm/Xsession est à peu près l'équivalent du xinitrc pour le startx. Il établira également un environnement par défaut pour le clavier, etc. Il peut également démarrer KDE ou GNOME, ou tout autre programme client de X. C'est le fichier principal de configuration du système. Il doit également vérfier le répertoire local de l'utilisateur pour trouver un fichier ~/.xsession, et un éventuel fichier ~/.Xclients, qui contiendrait l'environnement et les programmes de démarrage préférés de l'utilisateur, tout comme ~/.xinitrc le faisait avec startx. Encore une fois, les fichiers dans le répertoire local de l'utilisateur peuvent être créés ou modifiés par l'utilisateur n'importe quand et doivent être des scripts shell exécutables.

Nous n'allons pas proposer d'exemple de fichier ~/.xsession, étant donné qu'il ressemblerait beaucoup aux exemples de fichiers ~/.xinitrc et ~/.Xclients présentés ci-dessus.

Nous avons vu rapidement les principaux fichiers de configuration de xdm. N'hésitez pas à lire la page de man, et à regarder ce qui est installé localement, pour plus d'informations. Voyons maintenant gdm et kdm. Nous surlignerons juste les différences significatives, étant donné qu'ils fournissent grosso modo les mêmes fonctionnalités.

Avant de jeter un oeil à divers mécanismes de configuration pour les serveurs et les clients X, il faut remarquer que les environnements graphiques comme KDE se sont répandus dès leur apparition en partie parce qu'ils peuvent gérer la plupart des configurations d'interactions utilisateurs, grâce à des commandes « faciles à utiliser » par interface graphique. Et en fait, les applications conformes qui font partie des bureaux respectifs seront mieux configurées par les outils de la configuration du bureau, ou par leurs propres méthodes de configuration graphique. Ainsi, par exemple, le gtop, une application cliente de GNOME, se configure mieux par l'intermédiaire de GNOME ou des menus gtop eux-mêmes. Mais ce n'est pas vrai pour toutes les applications de X.

Le serveur X peut stocker diverses valeurs de configuration pour les programmes clients de sorte qu'elles sont facilement disponibles si nécessaires. Si l'application est compatible, elle les emploiera en tant que valeurs par défaut à chaque fois que ce programme sera appelé. Ces valeurs sont connues sous le nom de « ressources [Resources] », et servent souvent pour définir les préférences utilisateurs, application par application, pour les polices, les couleurs, la position à l'écran (la géométrie) et divers autres attributs. Cela facilite la personnalisation des applications.

Les ressources sont de type chaîne de caractères (par exemple Netscape*blinkingEnabled:False) qui peut être lue à partir du disque dans divers endroits quand X se lance ; elles peuvent aussi être définies interactivement en ligne de commande. Les composants des programmes sont nommés hiérarchiquement, chaque objet dans la hiérarchie étant identifié par une classe ainsi que par un nom d'instance. Au niveau supérieur de la hiérarchie se trouvent la classe et le nom de l'instance de l'application elle-même. Le nom de la classe de l'application est toujours identique au nom du programme, mais avec la première lettre en majuscule (par exemple Vim ou Emacs) bien que quelques programmes qui commencent par la lettre « X » ont également leur deuxième lettre en majuscule pour des raisons historiques (par exemple XTerm). Chaque définition indiquera une classe (ou instance), avec la ressource et la valeur qui correspondent. Plus bas dans la hiérarchie se trouvent les divers attributs qui constituent les aspects paramètrables de l'application.

Traditionnellement la plupart des programmes X étaient configurés de la sorte. Ce n'est plus aussi vrai aujourd'hui avec l'arrivée des environnements graphiques qui ont souvent leurs propres mécanismes de configuration.

Par exemple, supposons que nous préférons lancer xterm avec un arrière-plan bleu. Donc si nous le lancions depuis la ligne de commande, nous le ferions ainsi :

 xterm -bg blue &
 

Si c'est notre préférence, il serait plus facile de mettre cette préférence dans un fichier quelque part, et faire utiliser notre préférence par le système. De cette façon chaque fois que nous démarrerions xterm, il utiliserait notre valeur préférée, et nous n'aurions plus besoin de la ligne de commande options (à moins de vouloir surcharger).

La syntaxe de base des ressources de X s'écrit comme suit :

 <program><binding><widget><binding><widget><...><resource>:<value>
 

Ce qui, dans la vraie vie, ressemble en général à ça :

 xterm*fontMenu*background: darkblue
 

Ce que cela fait devrait paraître évident. L'utilisation des « * » dans la définition s'appelle « liaison lâche [loose binding] » et joue le rôle de joker. Cela signifie qu'il peut y avoir des lacunes dans la hiérarchie des composants.

 xterm*background: darkblue
 

Ceci donnerait également un fond bleu foncé pour le fontMenu de xterm, mais également pour toutes les autres propriétés de xterm qui ont également un attribut « background » (par exemple window background, etc.), peu importe où ils peuvent être dans la hiérarchie des composants. De même :

 *background: darkblue
 

Ceci définirait le fond pour tous les programmes qui ont cette propriété (pas uniquement xterm). L'emploi d'un « . » au lieu d'une « * » sera plus précis, et permettra d'écarter les lacunes de joker dans la hiérarchie. En outre, l'application doit accepter l'attribut particulier du composant. Pour « Background », c'est à peu près sûr, mais beaucoup d'applications auront des ressources plus spécialisées qui ne sont pas aussi évidentes. Il est préférable de regarder la documentation locale (pages de man, etc.), ou regarder si une application a des exemples d'inclus. Par exemple, Netscape est généralement livré avec un fichier Netscape.ad qui a un ensemble très complet de définitions de ressource qui peuvent être adaptées.

On verra que les ressources de X sont stockées à plusieurs endroits (voir ci-dessous) et sont traitées par la commande xrdb (voir la page de man).

Une méthode pour stocker les ressources des applications préférées est d'utiliser les fichiers nommés pour l'application dans un dossier « app-defaults ». Par exemple, sur mon système, ceux-ci se trouvent dans /usr/X11R6/lib/X11/app-defaults/, cependant ce répertoire peut être différent selon les options que votre fournisseur a choisies. Ce répertoire contient un certain nombre de fichiers pour les applications X connues telles que le xterm, xclock, xcalc, xload, etc. Au final, c'est un nombre relativement petit d'applications au vu du système dans son ensemble. Par conséquent, toutes les applications n'utilisent pas cette méthode. En fait, la majorité ne l'utilise pas.

Chaque fichier contiendra la définition des ressources pour cette application. Le serveur X charge ceux-ci de lui-même pendant son démarrage. En court exemple tiré de XTerm-color :

 ! $XFree86$

 #include "XTerm"

 *VT100*colorMode: on
 *VT100*dynamicColors: on

 ! A décommenter pour utiliser de la couleur pour l'attribut "underline"
 !*VT100*colorULMode: on
 !*VT100*underLine: off

 ! A décommenter pour utiliser de la couleur pour l'attribut "bold"
 !*VT100*colorBDMode: on

 *VT100*color0: black
 *VT100*color1: red3
 *VT100*color2: green3
 *VT100*color3: yellow3
 *VT100*color4: blue3
 *VT100*color5: magenta3
 *VT100*color6: cyan3
 *VT100*color7: gray90
 *VT100*color8: gray30
 *VT100*color9: red
 *VT100*color10: green
 *VT100*color11: yellow
 *VT100*color12: blue
 *VT100*color13: magenta
 *VT100*color14: cyan
 *VT100*color15: white
 *VT100*colorUL: yellow
 *VT100*colorBD: white
 

Ici on a surtout différentes définitions de couleur. Le classname de l'application n'est pas explicitement énoncé, et est déterminé par le nom de fichier. Il faut donc faire comme si chaque ligne commence par XTerm-color*. En outre, remarquez en haut, la ligne #include "XTerm", qui « inclut » les définitions de ressource pour XTerm, fichier beaucoup plus long avec un ensemble de définitions plus divers. (On ne l'a pas inclus ici du fait de sa longueur, mais ça vaut le coup de regarder.) Ces fichiers fournissent les paramètres par défaut du système, et d'une manière générale, sont rarement édités par l'utilisateur.

Une autre méthode couramment pratiquée pour l'obtention des préférences au niveau ressources, est d'utiliser un fichier Xdefaults, nommé parfois Xresources. Celui-ci peut exister comme fichier système, par exemple /etc/X11/Xresources. Naturellement, l'utilisateur est libre de créer une version personnelle dans son répertoire local, par exemple ~/.Xdefaults. La version de l'utilisateur surchargera tout paramètre des fichiers système, et restera inchangé après les mises à niveau du système. Evidemment, c'est là que vous mettrez vos propres préférences.

Les fichiers Xresources sont lus pour la base de donnée des ressources avec la commande xrdb. Par exemple:

 xrdb -merge ~/.Xresources
 

Ceci peut être fait interactivement à la ligne de commande, ou être placé dans un script et être lancé automatiquement au démarrage de la session X. Dans le cas des fichiers système, ceci devrait être pris en charge par les scripts de démarrage fourni par la distribution. Généralement, ces derniers vérfieront également le répertoire local de l'utilisateur (voir l'exemple de xinitrc ci-dessus). Du coup, on aura probablement rien d'autre à faire que de créer le fichier avec un éditeur de texte.

Voici un exemple pour vous montrer une infime partie de tout ce qu'on pourrait faire avec un fichier .Xdefaults :

 ! Ceci est un commentaire ;-)

 #ifdef COLOR
 *customization: -color
 #endif

 !! Ratissons large, pour récupérer toutes les applications compatibles
 !! Signal visuel, et non sonore
 *visualBell: True
 *scrollTtyOutput: False
 *scrollKey:       True

 ! Voir Netscape.ad pour plus de ressources paramètrables
 Netscape*noAboutSplash:	True
 Netscape*documentFonts.sizeIncrement: 5
 Netscape*documentFonts.xResolution*iso-8859-1: 120
 Netscape*documentFonts.yResolution*iso-8859-1: 120
 netscape-navigator*geometry: 960x820+240+140

 emacs*Background: DarkBlue
 emacs*Foreground: Wheat
 emacs*pointerColor: Orchid
 emacs*cursorColor: Orchid
 emacs*bitmapIcon: on
 emacs*font: 10x20

 ! Couleurs pour GVim, etc.
 !! Les versions GTK de gvim n'utiliseront pas ces paramètres.
 Vim*useSchemes:         all
 Vim*sgiMode:            true
 Vim*useEnhancedFSB:     true
 Vim.foreground:         Black
 !Vim.background:        lightyellow2
 Vim*background:         white
 ! geometry: largeur x hauteur
 Vim.geometry:  88x40
 Vim*font:  -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15-*5
 Vim*menuBackground: yellow
 Vim*menuForeground: black

 rxvt*backspacekey: ^?
 rxvt*background: Black
 rxvt*foreground: wheat
 rxvt*cursorColor: Orchid
 rxvt*geometry: 100x18+40+300 
 rxvt*title: Linux
 rxvt*reverseVideo: false
 !rxvt*backgroundPixmap: ~/penguinitis.xpm
 rxvt*scrollBar: true
 rxvt*reverseWrap: true
 rxvt*font: -*-lucidatypewriter-medium-*-*-*-14-*-*-*-*-*-*-*
 rxvt*fullCursor: true
 rxvt*saveLines:  1500
 rxvt*menu: ~/rxvt.menu

 XTerm*saveLines:    1500
 ! Ne pas effacer l'écran après la fermeture du programme
 XTerm*VT100*titeInhibit: true

 ! Corrige les affectations de touche pour xterm 
 xterm*VT100.translations:	#override \
       <Key>BackSpace:    string(0x7F) \n\
       <Key>Insert:       string(0x1b) string("[2~")\n\
       <Key>Delete:       string(0x1b) string("[3~")\n\
       <Key>Home:         string(0x1b) string("[1~")\n\
       <Key>End:	     string(0x1b) string("[4~")\n\
       <Key>Page_Up:      string(0x1b) string("[5~")\n\
       <Key>Page_Down:    string(0x1b) string("[6~")\n\
       <KeyPress>Prior : scroll-back(1,page)\n\
       <KeyPress>Next : scroll-forw(1,page)

 ! Ghostview
 Ghostview*Font: *-helvetica-bold-r-normal--12-*-*-*-*-*-*
 Ghostview*BorderColor:  white
 Ghostview*Text*Font:    rk14
 Ghostview*Background:   #d9d9d9
 !Ghostview*Foreground:  white
 ghostview.form.pageview.page.background: white
 ghostview.form.pageview.page.foreground: black
 .ghostview.zoom.form.page.background: white
 .ghostview.zoom.form.page.foreground: black

 ! xscreensaver !
 ! Temps dépassé au bout de 12 minutes, mode cycle toutes les 2 minutes
 xscreensaver.timeout: 12
 xscreensaver.cycle: 5
 ! Tourner en priorité faible, et fondu entre les modes
 xscreensaver.nice: 12
 xscreensaver.fadeSeconds: 2

 XFontsel.menu.options.showUnselectable: False 
 

Si tout va bien, ces quelques exemples vous donneront quelques idées pour démarrer. X n'a pas besoin d'être redémarré si xrdb est utilisé interactivement en ligne de commande après des modifications. Les effets sont immédiats.

Les ressources sont parfois également disponibles comme options en ligne de commande. Voir ci-après. Les options en ligne de commande surchargeront toutes les définitions existantes de ressource.

Le clavier et la souris, ainsi que d'autres périphériques d'entrée possibles, sont définis dans XF86Config (ou XF86Config-4). Il y a une disposition des touches du clavier qui est définie à partir de la langue préférée :

 Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "keyboard"
	Option      "XkbLayout"	"us"
 EndSection
 

Ceci nous donne notre disposition de clavier par défaut. Une liste des étiquettes valides de disposition se trouve dans /usr/X11R6/lib/X11/xkb/symbols. En outre, l'utilitaire setxkbmap peut être employé pour faire des modifications interactivement.

Avec X, les possibilités de personnalisation sont énormes, et on peut modifier les actions des touches du clavier et du pointeur de la souris à notre convenance. L'utilitaire pour ce faire est xmodmap (voir la page de man). Vous n'aimez pas l'emplacement de la touche de verrouillage majuscule ? Déplacez là !! ; -)

Comme xrdb, xmodmap peut être lancé en ligne de commande. Autre possibilité : les paramètres préférés peuvent être stockés dans un fichier. En général, c'est le fichier ~/.Xmodmap, ou quelque chose de similaire. Si les scripts de démarrage de votre X n'analysent pas ces fichiers, faites les modifications qu'il faut pour qu'ils le fassent (probablement à partir de ~/.xinitrc ou de ~/.xsession).

On peut visualiser les actions du pointeur et des touches avec : xmodmap - pk - pp |less. Toutes les valeurs actives de « keycode » s'afficheront, avec les valeurs correspondantes de « keysym », et tous les noms de keysym que le xmodmap connaît (par exemple « retour arrière » [BackSpace]). Cela devrait également vous donner une idée de la façon dont le xmodmap comprend les événements touches et souris. Il y a deux « keysyms » par « keycode ». La seconde est la valeur lorsque la « majuscule » est activée. L'utilitaire xev de XFree86 peut être employé pour afficher interactivement beaucoup d'informations sur les touches et les événements souris. Faites attention à la valeur de « keycode ». C'est ce que vous devrez connaêtre afin de modifier les actions.

xmodmap est souvent utilisé pour faire des petites améliorations clavier, par exemple pour avoir des fonctions retour arrière/supprimer [BackSpace/Delete] bien adaptées. Il peut également être utilisé pour faire des modifications importantes comme les mappages internationaux. On peut seulement modifier les mappages des touches et des événements souris -- on ne peut pas affecter des macros aux événements touches (il se pourrait que votre gestionnaire de fenêtre ou votre environnement graphique ait en partie cette fonctionnalité).

L'installation de claviers internationaux est bien expliquée dans http://www.linuxdoc.org/HOWTO/mini/Intkeyb/index.html. En outre, une recherche dans http://google.com/linux donnera beaucoup d'exemples utiles.

La page de man possède de nombreux exemples rapides sur diverses approches. Voici ce à quoi pourrait ressembler un ~/.Xmodmap hypothétique :


 ! /home/hal/.Xmodmap, dernier changement 03/10/01
 !
 ! Définir le retour arrière à 22 et la touche "supprimer" à 111
 keycode 22 = BackSpace
 keycode 111 = Delete
 !
 ! Mon clavier gère les touches Maj gauche et droite différemment.
 ! Faire que la droite agisse comme la gauche pour éviter la gymnastique
 ! des doigts.

 keycode 63 = Alt_L
 keycode 113 = Meta_L
 !
 ! Coder en dur les valeurs des touches du pavé numérique en chiffres
 ! comme si le Verr Num était toujours activé
 ! puisque je ne l'utilise jamais pour autre chose
 keycode 79=7
 keycode 80=8
 keycode 81=9
 keycode 83=4
 keycode 84=5
 keycode 85=6
 keycode 87=1
 keycode 88=2
 keycode 89=3
 keycode 90=0
 keycode 91=period
 keycode 86 = plus
 ! Désactiver le Ver Num vu qu'on en a plus besoin
 keycode 77 =
 !
 ! Verr maj est près de tab. Je la tape par erreur de temps en temps, 
 ! et ne l'utilise pas de toute façon. Donc faire Verr Num agir comme Tab. keycode 66 = Tab
 clear lock
 !
 ! Inversion des boutons de la souris pour les gauchers
 pointer = 3 2 1 
 

Comme dans beaucoup de fichiers XFree86, « ! » représente un commentaire. Une autre utilisation possible, est de redéfinir ces touches « Windows », qui sont agaçantes, pour qu'elles servent à quelque chose. J'espère que cela donne une idée des choses qu'on pourrait faire, si on en a envie, pour avoir un clavier plus agréable.

En parlant de la touche Verr Num, X la neutralisera systématiquement lorsqu'il démarrera. Qu'importe la façon dont on a paramètré le BIOS, ou Linux avant que X se lance. Les indications données ci-dessus ne représentent donc qu'une façon de faire. Il y a également un utilitaire de disponible sur Internet qui s'appelle soit numlockx, soit setnumlock, si votre distribution ne comporte ni l'un ou ni l'autre. Il peut se mettre dans un fichier de démarrage pour activer Verr Num automatiquement, c'est comme on veut.

Les gestionnaires de fenêtres et les environnements bureau permettent également la personnalisation du clavier et de la souris (dans la mesure ou X la reconnaît correctement). Cela peut être une méthode plus facile pour configurer certaines personnalisations.

Ainsi que cela a déjà été dit, Linux et Unix font une utilisation massive des trois boutons de la souris. Si une souris a seulement deux boutons, alors le troisième bouton (c.-à-d. celui du milieu) peut être simulé en appuyant sur les deux boutons en même temps. C'est une option de configuration qui se trouve dans XF86Config sous le nom de directive « Emulate3Buttons  » :

 Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option      "Device" "/dev/mouse"
	Option      "Protocol" "PS/2"
	Option      "Emulate3Buttons" "on"
 EndSection
 

Au bout du compte, un troisième bouton est très pratique et je recommanderais personnellement d'en avoir un. Sur les souris à molette, la «  molette  » agit en tant que le troisième bouton, si on appuie dessus. Beaucoup de souris à molette standard semblent utiliser le protocole «  IMPS/2  ».

Plus particulièrement, le troisième bouton (milieu) est, dans pratiquement toutes les applications Linux, le bouton pour «  coller  ». Le copier/coller fonctionne un peu différement sous Linux. Le bouton gauche est le bouton de copie. Maintenez le et sélectionnez le texte. Il est automatiquement copié dans le «  presse-papiers  » de X. Puis, le bouton du milieu collera à partir de ce dernier. C'est un processus très simple. En double-cliquant on copiera les mots un par un, et en triple-cliquant on copiera chaque ligne d'un texte. Si pour une raison ou pour une autre, cela ne fonctionne pas, c'est soit une application mal implémentée, soit un bogue quelconque. Certaines anciennes versions de Netscape posaient des problèmes, par exemple. Pour coller depuis le clavier, il faut faire maj+insert.

Le «  glisser/déposer » n'est pas une fonction native de X lui-même. Mais, il est implémenté par certaines boîtes à outils et environnements graphiques. Il ne faut pas s'attendre à ce que ça marche avec des applications non conformes (c.-à-d. les applications non-KDE dans KDEpar exemple).

Comprendre les polices et les couleurs peut être plus difficile dans X que dans les autres systèmes.

X connaît divers types de police, y compris les bitmaps, les Type 1, et depuis la v4.x, les TrueType. Soit le serveur X peut gérer les polices lui-même, soit parfois cette tâche est concédée à un serveur de police (il en existe un grand nombre). xfs (X Font Server) est le serveur de police le plus couramment utilisé sous Linux.

Un serveur de police n'est pas obligatoire, car X peut gérer la plupart des rendus de police. Les serveurs de police sont traditionnellement utilisés pour servir les polices de multiples hôtes sur un réseau, mais ils sont parfois également utilisés pour fournir des fonctionnalités supplémentaires. De plus, un serveur de police peut fournir une légère amélioration des performances du fait qu'il permet de transférer le rendu des polices à un processus séparé.

X reconnaît les polices en fonction des polices qui se trouvent dans le «  FontPath  ». Ceci est paramètré initialement dans XF86Config. Si le serveur X gère lui-même les tâches liées aux polices (c.-à-d. sans serveur de police), on aura une liste de répertoires qui contiennent les fichiers de police, par exemple :

 FontPath        "/usr/X11R6/lib/X11/fonts/misc:unscaled"
 FontPath        "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
 FontPath        "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
 FontPath        "/usr/X11R6/lib/X11/fonts/Type1"
 FontPath        "/usr/X11R6/lib/X11/fonts/misc"
 FontPath        "/usr/X11R6/lib/X11/fonts/100dpi"
 FontPath        "/usr/X11R6/lib/X11/fonts/75dpi"
 

Si un serveur de police est utilisé, le «  FontPath  » se dirigera vers l'interface de connexion [socket] que le serveur de police écoute (voici un exemple possible) :

 FontPath "unix/:7101"
 

Dans ce dernier cas, les répertoires de police qui se trouvent être disponibles seront configurés dans le serveur de police (voir la documentation locale), qui emploiera un schéma semblable de type répertoire comme on l'a montré pour XF86Config.

Une fois que des polices appropriées ont été installées, elles doivent «  être préparées  ». Pour la plupart des polices, ceci signifie lancer (en super utilisateur) l'utilitaire mkfontdir (voir la page de man) dans le répertoire où les polices sont situées. Les polices de type 1 et de TrueType nécessitent des étapes supplémentaires (voir ci-dessous). Votre fournisseur l'a fait pour toutes les polices qui sont incluses dans votre distribution. Cela devra donc seulement être fait pour les polices que vous ajouterez. Pour que les polices nouvellement ajoutées deviennent visibles pour X, vous devrez lancez les commandes de xset appropriées pour soit modifier le FontPath existant, soir le relire (voir la page de man). Ou, réinitialiser votre serveur de police.

Exemple : Préparation des polices, et réinitialisation du serveur de police après avoir ajouté de nouvelles polices :

 su 
 <mot de passe>
 mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/
 /etc/init.d/xfs restart 
 

La première commande peut ne pas être nécessaire sur les distributions les plus récentes (puisque le script init le fait dans certains cas). Et la configuration de serveur de police devrait être modifiée, si c'est un nouveau répertoire. Exemple : réinitialisation sans serveur de police :

 su 
 <mot de passe>
 mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/
 xset +fp /usr/X11R6/lib/X11/fonts/my_new_fonts/
 xset fp rehash 
 

Le « xset +fp » n'est pas nécessaire si le répertoire fait déjà partie du FontPath.

xlsfonts | less peut être utilisé pour faire la liste des polices connues, et donc disponibles, pour X et ses clients. Lancez xlsfonts | less, et vous pourrez également avoir une idée de la définition de police telle que l'entend X. Les ressources de police sont indiquées tout à fait explicitement, et cela peut sembler complexe au début. La description logique de police de X (X Logical Font Description, «  XLFD  ») est la description complète pour n'importe quelle police donnée. Le XLFD ressemble à ceci :

 -adobe-helvetica-medium-r-normal-*-*-120-*-*-p-*-iso10646-1
 

Où chaque champ de gauche à droite est :

fndry - font foundry, fonderie de police, la société ou la personne qui a fait cette police.
fmly - font family, famille de police, le surnom courant de cette police.
wght - font weight, graisse de police (gras, moyen, etc.)
slant - font slant, inclinaison de la police (italique, oblique, romain (normal), etc.)
sWdth - font width, largeur de police (normal, condensé, étendu, etc.)
adstyl - additional style, style supplémentaire (sans serif, serif, etc.)
pxlsz - pixel size, taille en pixel, le nombre de pixels verticaux dans un caractère.
ptSz - point size, taille approximative en point du texte (similaire à pxlsz).
resx - résolution horizontale, en dpi.
resy - résolution verticale, in dpi.
spc - spacing, espacement, seulement utile, apparemment avec les polices Schumacher.
avgWidth - average width, largeur moyenne d'un caractère de la police.
rgstry - registry, le registre reconnu qui cite cette police.
encdng - encoding, encodage de nationalité.

«  *  » agit comme un caractère joker. En fait, si tous les champs ne sont pas indiqués, le serveur de X prendra la première police correspondante qu'il trouvera dans le FontPath. C'est pourquoi il est préférable de classer les polices, dans le FontPath, en mettant les polices préférées en premier puisque certains programmes donneront des indications délibérément « vagues » sur les polices de sorte que votre système ait une certaine liberté.

Le programme xfontsel (X Font Selector) peut être utile. Vous allez voir en le lançant maintenant. Vous ne verrez rien d'utile dans la fenêtre principale au début, mais voyez ce que ça donne en maintenant le bouton gauche enfoncé sur le bouton fndry. Si toutes vos polices sont en règle, vous verrez un menu avec des choix tels que adobe, b&h, bitstream et ainsi de suite. Choisissez en comme par exemple b&h et vous remarquerez que la police dans la fenêtre du bas se transforme en quelque chose d'intelligible. C'est comme ça qu'on choisit les polices avec ce programme ; en commençant par la gauche, qui offre le choix le plus général, et en se déplaçant vers la droite, jusqu'aux options les plus spécifiques. Le choix d'une option de l'extrémité droite n'aura pas beaucoup de sens avant que la fonderie, par exemple, ne soit sélectionnée, parce que les options sont généralement ordonnées selon leurs dépendances les unes envers les autres.

Quand vous choisissez dans fmly, vous verrez la plupart des options grisées, et seulement trois restantes. Cela signifie que ces trois-là sont les seules familles de la police faites par cette fonderie. Certaines familles apparaissent dans plus d'une fonderie, par exemple, Adobe et Bitstream font tous deux une version de la police Courier. Maintenant vous pouvez choisir le wght, et ainsi de suite. Après un certain temps, vous arriverez finalement à la police que vous voulez. Vous n'avez pas nécessairement besoin de complèter toutes les options pour choisir une seule police, il n'y pas autant de polices que ça sur votre système ! Les options que vous ne choisissez pas seront représentées par une * indiquant que n'importe quelle option fera l'affaire, et donne à X une certaine marge.

Quand vous êtes satisfait de votre choix de police, appuyez sur le bouton select, et votre choix sera placé dans le presse-papiers de X, prêt à être collé dans votre document ou dans ce que vous êtes en train de faire. Par exemple, ouvrez une fenêtre xterm et saisissez quelque chose comme xterm -font suivi d'un guillemet d'ouverture. Dirigez ensuite le curseur sur cette tâche à l'écran, et cliquez avec le bouton du milieu de votre souris (ou cliquez sur les deux, le gauche et le droit, si vous êtes handicapé du bouton du milieu). Cela collera le choix à partir du presse-papiers, qui devrait être la police que vous avez précédemment choisie. Entrez ensuite le guillemet de fermeture, et faites Entrée. Par exemple, un xterm avec une police Courier ressemblerait à ceci : xterm -font "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*". C'est pas joli, ça ?

Si vous avez trouvé une police qui vous plaît, ceci peut être utilisé de manière permanente en plaçant la définition de la police dans le fichier de configuration approprié (voir ci-dessus).

Notez que, pour que xfontsel ne montre qu'un nombre limité de police, on utilisera l'option en ligne de commande -pattern, suivie des spécifications de police entre guillemets, comme on l'a expliqué ci-dessus.

L'utilitaire xfd est également utile pour examiner les polices individuellement. Si on le lance avec une ligne de commande telle que xfd -fn fixed, il montrera le jeu de caractères complet pour cette police.

KDE et GNOME ont leurs propres utilitaires qui montrent un peu plus de finesse ; -)

Les polices fournies avec XFree86 sont d'une utilité limitée pour un bon nombre d'entre nous, étant donné qu'à peu près le seul endroit où vous trouverez des polices de ce type, c'est dans le système de fenêtre X lui-même. Malheureusement, parmi les accros des médias, les concepteurs de sites Web et les fous de police, nombreux sont ceux qui travaillent avec des systèmes d'exploitation qui reposent sur d'autres formats. Et puis, il ne semble pas que les distributions s'efforcent beaucoup de rendre les polices par défaut plus belles non plus.

Les polices de type 1, généralement les plus utilisées avec les formats de document Postscript, sont la norme traditionnelle dans des environnements d'Unix et de Linux. On a normalement un choix relativement intéressant pour démarrer. Sinon, c'est extrèmement facile d'en trouver d'autres gratuitement sur Internet ; pour démarrer, essayez ftp://ftp.cdrom.com/pub/os2/fonts/. Les types 1 sont des polices extensibles, et présentent en grande partie les mêmes avantages que les polices TrueType plus connues. Si le choix de polices TrueType installé n'est pas intéressant, le type 1 est ce qu'il vous faut pour la plupart des applications à interface graphique. Mais répétons-le, ce n'est pas standard sur les autres plateformes, et cela peut présenter des problèmes lors de la consultation des documents (par exemple des pages Web) qui sont conçus pour «  d'autres plateformes  ».

Les polices TrueType ont été lancées par Apple, et ont été par la suite mises sous licence par Microsoft. Les gens venant des plateformes autres qu'Unix connaissent donc déjà ces polices de qualité. Malheureusement, il n'y a pas beaucoup de polices TrueType de qualité sous une licence appropriée, et il n'y en a donc pas beaucoup d'incluses avec les distributions de Linux. Et celles qui le sont, ne sont pas souvent d'aussi bonne qualité. En outre malheureusement, TrueType est un peu devenu une norme sur le Web et en d'autres lieux, et ne pas avoir de bonnes polices TrueType peut être un inconvénient. Avec XFree86, il semble également que TrueType donne un meilleur résultat que Type1.

Ca, c'était la mauvaise nouvelle. La bonne nouvelle, c'est que n'importe quelle police TrueType incluse avec n'importe quelle version de Windows, ou avec n'importe quelle application Windows, devrait fonctionner sous Linux. Cependant il faudra prendre quelques mesures supplémentaires pour les intégrer. Cela est particulièrement utile quand, en parcourant le Web, les polices bitmaps de X s'ajustent mal.

Nous n'entrerons pas dans les détails d'installation et de configuration des polices ici, car cela est bien détaillé dans d'autres documents. Voir le Font HOWTO , http://www.linuxdoc.org/HOWTO/Font-HOWTO.html, pour des informations générales sur les polices, et des astuces pour le Type 1. Voir le Font De-Uglification Mini HOWTO, http://www.linuxdoc.org/HOWTO/mini/FDU/index.html, pour diverses astuces en rapport avec X, et particulièrement pour TrueType.

Retournons à notre terminal et essayons quelque chose. Ouvrez un xterm avec une ligne de commande comme suit :

  xterm -fg DarkSteelBlue1 -bg red3 &
 

Aïe ! ça n'est peut-être pas très joli, et on ne va sans doute pas faire un excellent travail avec ça, il n'empèche que ça montre bien un aspect intéressant de la configuration de X : les noms de couleur. même si cela n'est pas particulièrement précis, c'est une manière simple de se rappeler de nombreuses de couleurs. Notez que les noms de couleur ne sont jamais sensibles à la casse.

Le serveur X traitera en fait les valeurs des couleurs avec une notation sous forme hexadécimale Rouge-Vert-Bleu (RVB). Cela ressemble à quelque chose comme « #0aff0a » en hexadécimal. Pas aussi simple à se rappeler. Mais X donne une méthode mnémotechnique pour se rappeler des définitions de couleurs valides. Celles-ci sont stockées dans une table de texte, par exemple /usr/X11R6/lib/X11/rgb.txt, qui est définie dans XF86Config dans la section « files ».

Si vous êtes intéressés, allez jeter un oeil avec un éditeur de texte. Il y a beaucoup, beaucoup de nuances définies. J'ai compté 83 nuances de bleu dans le mien, par exemple. Petit échantillon :

 176 226 255             LightSkyBlue1
 164 211 238             LightSkyBlue2
 141 182 205             LightSkyBlue3
  96 123 139             LightSkyBlue4
 202 225 255             LightSteelBlue1
 188 210 238             LightSteelBlue2
 162 181 205             LightSteelBlue3
 110 123 139             LightSteelBlue4
 191 239 255             LightBlue1
 178 223 238             LightBlue2
 154 192 205             LightBlue3
 104 131 139             LightBlue4
 

Ce fichier peut être adapté à vos besoins si vous le désirez, mais cela est rarement nécessaire pour la plupart d'entre nous. Cependant, il est important de l'avoir, puisque quelques applications dépendent de lui.

Les environnements graphiques ont un utilitaire avec interface graphique pour choisir les couleurs.

Nous ne nous étalerons pas sur la configuration des gestionnaires de fenêtres et des environnements. Il y a tout simplement trop à dire pour essayer de couvrir cela dans un seul document. Il est important de se rendre compte que ce sont deux choses différentes. Il y a beaucoup, beaucoup de gestionnaires de fenêtres disponibles.

Les possibilités de configuration des gestionnaires de fenêtres sont énormes. De nombreux aspects de l'interaction avec l'utilisateur peuvent être gérés par le gestionnaire de fenêtres.

Quelques-uns des gestionnaires de fenêtres les plus répandus :

aewm : http://www.red-bean.com/~decklin/aewm/
AfterStep : http://www.afterstep.org/
BlackBox : http://sourceforge.net/projects/blackboxwm
Enlightenment : http://www.enlightenment.org/pages/main.html
Fluxbox : http://fluxbox.sourceforge.net/
fvwm : http://www.fvwm.org/
IceWM : http://www.icewm.org/
olwm (OpenLook Window Manager) : http://www.plig.org/xwinman/olvwm.html
Sawmill : http://sawmill.sourceforge.net/
WindowMaker : http://www.windowmaker.org/
XFce : http://xfce.org/

Il en existe également beaucoup, beaucoup de moins connus. http://www.plig.org/xwinman/ a une liste à jour des gestionnaires de fenêtres, et d'informations sur le sujet. Il y a toujours freshmeat aussi.

GNOME ainsi que KDE ont leur gestionnaire de fenêtres par défaut, mais en acceptent d'autres également s'ils sont conformes. Votre distribution en a probablement plusieurs. Essayez les tous si vous n'avez pas déjà un favori. Votre distribution a probablement également une méthode de changement dynamique entre les gestionnaires de fenêtres (et entre les environnements graphiques également).

Les environnements graphiques ne sont pas vraiment nouveaux, mais leur popularité a augmenté avec l'arrivée des deux grands noms : KDE et GNOME. Dans une certaine mesure, la fonctionnalité d'environnement graphique recouvre celle du gestionnaire de fenêtres. Tous les deux peuvent gérer l'arrière plan des fenêtres du super utilisateur, du menu des fenêtres du super utilisateur, des icones, des barres d'outils, etc. D'une manière générale, si un environnement graphique est en cours d'exécution, il gère tout ça. C'est le principe des environnements graphiques : intégrer les divers composants avec cohésion et cohérence. Les environnements graphiques apportent également des caractéristiques au niveau de l'interopérabilité et de la facilité d'utilisation qu'un gestionnaire de fenêtres simple n'a pas.

Ah, autre point : les environnements graphiques essayent également de configurer autant que possible les sessions de X. N'importe lequel de leurs clients conformes pourra plus que probablement être configuré par l'environnement graphique, ou aura sa propre configuration qui s'adapte au style de l'environnement graphique. Le but est au moins d'éviter en partie la configuration de fichiers textes à l'apparence désordonnés que nous avons vue dans les sections ci-dessus, et de faciliter un tant soit peu la vie de l'utilisateur.

Cette fonctionnalité supplémentaire repose sur un compromis, car elle consomme des ressources mémoire et système pour surveiller tout ceci. Si votre ordinateur a beaucoup de mémoire et qu'il est rapide, ce n'est pas un problème. Mais si vous avez peu de mémoire, cela peut causer un ralentissement (voir la section performance ci-dessous). Un minimum de 64M de RAM est probablement limite avec KDE ou GNOME.

Alors, avez-vous besoin d'un environnement graphique ? C'est à l'utilisateur de choisir. Ils ne sont certainement pas indispensables pour lancer X, mais c'est vrai qu'ils apportent des fonctionnalités que beaucoup d'utilisateurs veulent ou attendent dans une interface graphique. Lequel est le meilleur ? Eh bien, c'est à vous de décider !

KDE existe depuis plus longtemps que GNOME, et certains diraient peut-être qu'il est un peu plus mûr. KDE est basé sur la boîte à outils de composants QT. Voici une citation de la page d'accueil de KDE :

KDE est un environnement graphique Open Source puissant pour les postes de travail Unix. Il combine la facilité d'utilisation, des fonctionnalités modernes, et un design graphique exceptionnel avec la supériorité technologique du système d'exploitation Unix.

KDE est une suite d'environnement graphique mature fournissant une base solide à un nombre toujours croissant d'applications pour les postes de travail Unix. KDE a développé un cadre de développement de qualité pour Unix, qui permet la création rapide et efficace d'applications.

GNOME est basé sur la boîte à outils GTK+. Et voici une citation de la page d'accueil de GNOME :

GNOME signifie «  GNU Network Object Model Environment  ». Le projet GNOME a pour but de construire un environnement graphique complet et convivial basé entièrement sur les logiciels libres. GNOME fait partie du projet GNU, et GNOME fait partie du mouvement Open Source (tm). L'environnement graphique se compose de petits utilitaires et d'applications de taille plus importante sous un même aspect et une convivialité cohérents. GNOME emploie GTK+ comme boîte à outils d'interface graphique pour toutes les applications compatibles GNOME.

XFce est un environnement graphique plus léger, moins fourni en fonctionnalités, qui ne se fait pas autant remarquer que les autres. XFce est également basé sur la boîte à outils GTK+. Et voici une citation de la page d'accueil de XFce :

Le projet XFce a au départ été lancé parce que j'avais besoin d'un environnement simple, léger et efficace pour mon système Linux.

Je crois que l'environnement graphique doit être fait pour augmenter la productivité des utilisateurs. Par conséquent, le but est de garder la plupart des ressources système pour les applications, et de ne pas consommer toute la mémoire et les capacités de l'UC pour l'environnement graphique.

Ils ont tous leur propre documentation bien détaillée. S'il vous manque quelque chose dont vous avez besoin sur votre système, jetez un oeil à leurs pages d'accueil respectives.

Que serait un système d'exploitation de type Unix sans interface en ligne de commande ? La ligne de commande peut être utile, et elle est disponible d'office avec le X. En fait, pour beaucoup, elle fait partie intégrante de leur environnement de travail de X.

Tout programme de X peut être lancé directement en ligne de commande juste en tapant le nom du programme dans une console xterm, ou dans toute autre terminal. La plupart des applications ont un ensemble très complet d'options en ligne de commande, comme la couleur d'arrière plan, la police, la géométrie (positionnement à l'écran), etc. Les options en ligne de commande surchargent les paramètres compilés par défauts, et les paramètres des ressources système.

Beaucoup de programmes traditionnels de X utiliseront les mêmes noms de base pour les options en ligne de commande. Toutes les applications écrites en utilisant le MIT X Toolkit Intrinsics (Xt) (comme ceux fournis avec XFree86) acceptent automatiquement les options suivantes. Certaines applications non-Xt utilisent également ces dernières, ou quelque chose de proche. Par exemple, «  géométrie  » n'est pas loin d'être une option universellement admise.

-display [hôte]:display[.écran]

Cette option indique au serveur X les affichages à utiliser. C'est fréquemment utilisé lorsque les applications s'exécutent sur un système et sont affichées sur un autre. L'application doit savoir s'afficher. ça peut se faire également avec la variable «  $DISPLAY  », qui emploie la même syntaxe.

-geometry geometrie

Taille et position initiales de la fenêtre, dans un format tel que width x height +horz_offset +vert_offset ou +horz_offset -vert_offset. Notez que si vous indiquez un décalage négatif horizontal ou vertical, la fenêtre sera placée en comptant vers l'arrière à partir de la droite ou du bas de l'écran, respectivement, au lieu de partir du coin supérieur gauche.

-font nom de police

Police à utiliser pour afficher le texte dans votre fenêtre (voir la section police ci-dessous).

-bg couleur

Couleur à utiliser comme arrière-plan de la fenêtre. En fait, il s'agit d'un « nom de couleur » (voir ci-dessous).

-fg couleur

Couleur à utiliser pour le premier plan de la fenêtre (c.à.d. la police, etc.).

-name nm de ressource

Utile pour indiquer le nom sous lequel les ressources de cette application se trouveront (par exemple comme indiqué dans .Xdefaults). C'est utile pour distinguer deux appels de la même application. Par exemple, deux xterms peuvent «  être nommés  » différement de sorte qu'ils puissent hériter de différentes ressources basées sur les noms indiqués dans la base de données des ressources.

-title chaîne de caractère

Il s'agit du titre qui sera utilisé pour la fenêtre dans votre affichage. Il est généralement utilisé par votre gestionnaire de fenêtre pour donner un titre explicite en haut de la fenêtre. A ne pas confondre avec l'option « -name ».

-iconic

Ouvre la fenêtre sous forme d'icône.

-xrm chaîne de caractère-ressource

Cette option indique un nom et une valeur de ressource pour surcharger tous paramètres par défauts qui pourraient avoir été spécifiés (c.-à-d. par l'intermédiaire de .Xresources ou semblable). En outre utile pour paramètrer les ressources de X qui n'ont pas d'option explicite en ligne de commande. Par exemple, la ligne de commande « xterm -xrm xterm*background: blue & » est pareille au niveau fonctionnel que « xterm -bg blue & ».

Ce sont les plus importantes. Il y en a d'autres. Beaucoup de programmes auront leurs propres options supplémentaires qui leur sont spécifiques. Aujourd'hui, beaucoup d'applications plus récentes n'adhèrent pas nécessairement aux normes Xt, et utilisent leurs propres options, ou celles fournies par leur boîte à outils respective. Au pire, les pages de man sont une bonne référence pour la syntaxe de commande, et il faut les compter parmi vos amis. Autre possibilité : l'application dispose d'une option en ligne de commande «  --usage  » ou «  --help  » pour donner la liste des options disponibles.

 $ gnome-terminal --usage
 Usage: gnome-terminal [-?] [--disable-sound] [--enable-sound]
   [--espeaker=HOSTNAME:PORT] [--version] [--usage] [--gdk-debug=FLAGS]
   [--gdk-no-debug=FLAGS] [--display=DISPLAY] [--sync] [--no-xshm]
   [--name=NAME] [--class=CLASS] [--gxid_host=HOST] [--gxid_port=PORT]
   [--xim-preedit=STYLE] [--xim-status=STYLE] [--gtk-debug=FLAGS]
   [--gtk-no-debug=FLAGS] [--g-fatal-warnings] [--gtk-module=MODULE]
   [--disable-crash-dialog] [--sm-client-id=ID] [--sm-config-prefix=PREFIX]
   [--sm-disable] [--tclass=TCLASS] [--font=FONT] [--nologin] [--login]
   [--geometry=GEOMETRY] [-e COMMAND] [-x COMMAND] [--foreground=COLOR]
   [--background=COLOR] [--solid] [--pixmap=PIXMAP] [--bgscroll]
   [--bgnoscroll] [--shaded] [--noshaded] [--transparent] [--utmp]
   [--noutmp] [--wtmp] [--nowtmp] [--lastlog] [--nolastlog] [-t TITLE]
   [--icon=ICON] [--termname=TERMNAME] [--start-factory-server]
   [--use-factory]
 

Tôt ou tard, la plupart d'entre nous avons besoin d'accéder à la «  ligne de commande  » pour une raison ou une autre. Pour certains, cela pourrait même être une habitude de travail avec X. En plus de pouvoir lancer des applications de X depuis l'invite de commande, il y a également de nombreux programmes qui fonctionnent en «  mode texte  » sous Linux.

C'est possible par l'intermédiaire «  des émulateurs de terminaux  » comme xterm. Chez Microsoft, son homologue le plus proche, celle qui porte le nom de commande MS-DOS, qui est un jeu d'enfant à coté. Les consoles Linux permettent la couleur, le copié/collé à la souris (et quelques souris à mollette), les arrières-plans pseudo transparent et utilisant pixmap, les barres de défilement, les menus et généralement un tas d'autres dispositifs. Tandis que xterm est l'émulateur de terminal le plus connu, il y a beaucoup de programmes similaires. Pour en citer quelques uns : Eterm, rxvt, aterm, konsole (KDE) et gnome-terminal.

Le cas typique, c'est que quand une fenêtre d'émulateur de terminal est ouverte, un shell est lancé pour que l'utilisateur interagisse avec. Le shell par défaut pour quasiment tous les Linux, est bash. Donc, en fin de compte, l'utilisateur interagit avec X, le terminal, et le shell en même temps. Chacun peut avoir sa propre influence. Par exemple, comment les frappes sur les touches sont gérées puisqu'elles passent du matériel, au serveur X, au terminal, au shell et finalement sont retournées à l'utilisateur.

La configuration du terminal se fait vite et facilement par l'intermédiaire de la variable «  $TERM  », qui est définie dans un des fichiers de configuration du shell de l'utilisateur. Sinon le terminal lui-même en aura une de compilée par défaut. La valeur par défaut en est le plus souvent «  xterm  » :

 $ echo $TERM
 xterm
 

Normalement c'est suffisant, car l'installation faite par votre fournisseur est a priori correcte. La variable de «  $TERM  » est en fait une référence à une entrée de la base de données «  termcap  » (man termcap), qui se trouve en principe dans /etc/termcap. A moins que vous fassiez quelque chose de vraiment peu commun, vous n'aurez probablement rien à changer. Certaines configurations supplémentaires des terminaux peuvent être faits avec la commande stty (voir la page de man). La configuration des terminaux n'entre pas du tout dans le cadre de ce document.

L'application de terminal elle-même (par exemple xterm) aura également diverses options de configuration. Le mieux pour les paramètres permanents est qu'ils soient stockés dans un ~/.Xdefaults ou dans un fichier semblable pour celles de ces applications qui l'acceptent. D'une manière générale, les applications pouvant être configurées via une interface graphique (par exemple gnome-terminal), le seront ainsi.

En outre, vous interagissez aussi avec le shell, qui peut avoir ses propres effets, en particulier sur la façon dont les frappes de touches sont gérées par l'invite de commande. Pour bash, le réglage se fera dans ~/.inputrc. Là encore, ceci n'entre pas dans le cadre de ce document, mais jetez un oeil aux références locales ou en ligne de bash (ou d'autre shell).

Les émulateurs de terminaux comme xterm exigent une police à espacement constant. Oubliez alors les polices de TrueType ou Type 1.

Ainsi qu'il a été mentionné, X est essentiellement un protocole de gestion de réseau avec des capacités d'affichage graphique. Cela rend possible certaines utilisations intéressantes. Et signifie également qu'il y a des aspects de sécurité inhérents, comme il en est avec n'importe quel environnement en réseau. Et si jamais vous vous connectez à l'Internet, vous vous retrouvez en plein dans un réseau énorme, et hostile ; -)

Les clients X se relient aux serveurs X par l'intermédiaire de divers protocoles de gestion de réseau, y compris TCP/IP. même avec des connexions simplement locales. Les utilisations possibles ici sont d'exécuter une application sur un ordinateur, et de l'afficher sur d'autres. Ou bien même, de vous connecter à un système distant, et avoir son affichage sur votre écran local, avec les applications cliente qui utilisent l'unité centrale et la RAM de l'ordinateur distant.

Sans précautions, ceci peut vous laisser complètement exposé à toutes sortes d'actes de malveillance et d'abus. Par exemple, tout utilisateur connecté à votre système peut accéder à votre «  affichage  », ce qui signifie qu'il peut voir ce que vous faites s'il veut. Heureusement, la plupart des versions récentes de Linux sortent avec par défaut quelques protections au niveau sécurité. Mais il est préférable de s'assurer soi-même qu'on est bien protégé.

La gestion de réseau et la sécurité de X sont bien expliquées dans le The Remote X Apps Mini HOWTO, http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html, nous n'aurons donc pas besoin d'essayer de rebrasser tout ça ici. Sa lecture en est recommandée. Voir d'autres références dans la section consacrée aux liens dans l'annexe plus bas.

Quelques précautions à prendre :

  • Ne jamais lancer X comme super utilisateur. Le nombre de choses désagréables qui peuvent se produire, augmente très nettement une fois connecté en super utilisateur. Apprenez à lancer autant que possible en tant que simple utilisateur, et utilisez «  su  » pour être super utilisateur seulement si nécessaire. Ceci peut sembler faire beaucoup de travail en plus (et c'est probablement le cas au début), mais une fois qu'on a appris comment faire les choses correctement, cela devient vite une deuxième nature.

    Petite anecdote racontée par un ami : il a eu un client dont le nouveau système s'est arrêté de «  fonctionner  ». Curieusement, il a constaté que le répertoire entier /dev était absent, il l'a réinstallé et tout est revenu dans l'ordre. De retour quelques jours plus tard, il a constaté que le système était connecté en super utilisateur à X, et que quelqu'un avait cliqué sur /dev dans le gestionnaire de fichier, et l'avait déplacé vers son bureau. Joli coup !

  • S'il vous arrive de vous connecter à un réseau avec des utilisateurs non sûrs, veillez à bien avoir un pare-feu entre eux et vous. C'est encore plus vrai avec Internet. La configuration des pare-feux n'entre pas dans le cadre de ce document, mais est traitée dans beaucoup d'autres endroits, y compris le site Web de votre fournisseur. http://linuxdoc.org a de nombreux guides sur la sécurité qui peuvent également vous aider. http://linuxsecurity.com/docs/ est intéressant également.

  • Vous pouvez désactiver les connexions TCP avec la ligne de commande de serveur X «  -nolisten tcp  ». Cependant ceci n'est d'aucune aide pour les connexions locales. Pour xinit/startx :

     exec X :0 -dpi 100 -nolisten tcp
       

    Se trouve dans ~/.xserverrc. Et pour xdm, dans /usr/lib/X11/xdm/Xservers :

     :0 local /usr/X11R6/bin/X :0 -nolisten tcp
       

Comme on l'a dit, ce que nous appelons X, est en fait une convergence de divers composants : le serveur X, le gestionnaire de fenêtres, l'environnement graphique, etc. Avec Windows, l'interface graphique de l'environnement est étroitement intégrée dans le système d'exploitation lui-même. Ce n'est pas le cas de Linux qui suit la tradition d'Unix de combiner divers composants indépendants pour aboutir à un certain résultat final. Nous avons donc des choix avec chaque composant, sa configuration et son implémentation. En bref, beaucoup de souplesse. C'est là que vous intervenez. Vous pouvez essayer diverses possibilités et voir celle qui vous en donnera pour votre argent.

Pour le matériel peu performant, cela donne beaucoup de latitude pour diminuer la demande sur les ressources système disponibles. C'est bien parce que, s'il en a l'occasion, X peut être tout à fait gourmand en ressources système. Si vous avez récemment installé une nouvelle distribution Linux, on vous a probablement donné un environnement graphique par défaut avec plein d'accessoires. Et quelque chose qui aura besoin probablement d'une quantité considérable de mémoire et d'unité centrale pour arriver à un niveau convenable de performance. Si vous avez un ordinateur puissant, ceci ne devrait pas être un problème.

On dit souvent que Linux fonctionne très bien avec relativement peu de mémoire. C'est vrai jusqu'à un certain point. Cela ne signifie pas cependant que ce sera le cas avec toute configuration. Donc si vous voulez utiliser des applications gourmandes en mémoire, vous devrez avoir de la mémoire. Ou alors vous devrez faire des sacrifices pour obtenir un niveau satisfaisant de performance. Il est tout à fait possible de faire tourner X avec des performances convenables sur 16 mégas de RAM, et même moins si vous voulez vraiment pousser. Mais vous devrez vous imposer quelques restrictions.

Voyons certains des composants et comment diminuer la demande sur les ressources système, au cas où vous seriez avec du matériel peu puissant, ou si la performance n'est pas au niveau de vos espérances.

Plus vous avez de mémoire, mieux c'est. X utilise beaucoup le cache pour améliorer la performance. Mais mettre en cache exige de la mémoire, et s'il n'y en a pas beaucoup au départ, il faudra réduire les besoins en mémoire. Quelques astuces pour ceux avec peu de mémoire ou avec des problèmes de performances :

Il y a quelques concepts et terminologies de base qu'il faut bien connaître. Ces termes apparaîtront ici, dans les pages de manuel, et dans les fichiers d'aide et de documentation.