Next Previous Contents

2. Configuration et utilisation d'XDM

Par Chris Carlson et Mark Lielsen mark@gtltd.com

Cet article est basé sur deux articles parus dans le numéro 43 de la Linux Gazette : An xdm session par Chris Carlson et Configuring XDM - a graphical login interface for linux or Unix par Mark Lielsen.

2.1 Qu'est ce qu'XDM?

Pour être simple, Xdm est juste un écran de login graphique servant à impressionner collaborateurs et patrons, en leur montrant que vous n'avez pas une console ennuyeuse comme fenêtre de login à l'allumage du PC. Cela rend Linux un peu plus convivial que l'on aurait pu le penser auparavant.

Pour la suite, je considère que votre système fonctionne correctement, et qu'X-Window est correctement configuré. Vous avez aussi configuré votre système pour qu'XDM se lance automatiquement avec le run state par défaut à 5 [NdR: man runlevel]. Maintenant vous voulez donc configurer votre fenêtre de login personnelle pour que certaines applications se lancent juste après que vous vous loguiez.

Au travail, j'aime me déloguer du système chaque soir avant de rentrer, comme cela d'autres peuvent se logger quand je ne suis pas là. Cela n'arrive pas souvent, mais je ne veux pas que quelqu'un rentre dans mon bureau et utilise ma session à ma place. Vous ne savez jamais quand quelqu'un devient curieux et regarde par exemple les courriers électroniques sauvegardés. Le problème est : je veux que certaines applications se lancent automatiquement, comme ma liste de choses à faire, et mon programme de calendrier.

Dans cet article, je vais expliquer comment se déroule une session X-Window, comment elle commence, et comment la configurer. Cela va vous montrer comment lancer automatiquement le gestionnaire de fenêtres (Window Manager) de votre choix, comment lancer automatiquement des applications, et configurer les couleurs et les fontes comme vous voulez. Depuis que X-Window est quasiment identique sur les differentes plateformes, beaucoup de ce que je vais décrire fonctionnera sur d'autres version qu'XFree86 sur Linux. D'une manière pratique, je ferai quelques comparaisons entre les version XFree86 qui proviennent de la RedHat 5.x et celles qui proviennent d'IRIX Silicon Graphics. Vous pourrez noter que les fichiers dont je parle ont le même nom mais ne se situent pas dans les mêmes répertoires.

Je me rend compte que d'autres articles ont été écrits sur le sujet à propos de la configuration d'X-Window, comme par exemple l'excellent article de Jay Ts dans le numéro de décembre 1998 intitulé "L'administration système d'X-Window". X-Window est un environement graphique extrèmement souple et, à cause de cela, peut être réllement très complexe. Pour cette raison, je crois que cela nécessite différents articles qui se chevauchent, mais qui procurent chacun des perspectives différentes. Cet article est déstiné à se placer d'un point de vue utilisateur, plutôt que d'un point de vue administrateur.

Pour éviter à cet article de devenir un livre, je pars du principe que :

2.2 Initialisation et fin des sessions utilisateurs

Quand le serveur X est automatiquement lancé par xdm, l'utilisateur est accueilli par un écran de login. Quand un utilisateur s'est logué via cet écran, xdm lance la session utilisateur. Cette session est un shell script qui, une fois fini, termine la session utilisateur avant qu'xdm ne réinitialise le serveur X pour revenir à l'écran de login.

Avant de lancer la session, xdm lance un petit script avec les privilèges root pour effectuer les quelques initialisations qui peuvent être requises. Couramment, ce fichier, /etc/X11/xdm/GiveConsole, change le propriétaire de /dev/console pour que l'utilisateur puisse voir les messages envoyés. De la même manière, quand la session se termine, xdm lance un autre petit script de sortie avec les privilèges root pour effacer tout ce qui aurait été installé par le script de lancement. Courament ce script, /etc/X11/xdm/TakeConsole, change le propriétaire de /dev/console pour root.

Notez que ces 2 fichiers sont /var/X11/xdm/GiveConsole et /var/X11/xdm/TakeConsole sur SGI.

Le sujet de cet article est le lancement de la session de l'utilisateur. Ici xdm lance un sous-processus en lançant le script /etc/X11/xdm/Xsession (/var/X11/xdm/Xsession sur SGI) et attend sa fin pour sortir. Quand il sort, xdm lance le sous-processus de sortie et retourne à l'écran de login. Ce script de session est lancé avec les privilèges utilisateur.

Une ressource a été instituée qui provoque le passage du paramètre "failsafe" à la session de l'utilisateur si celui-ci utilise la touche F1 au lieu de la touche Enter pour se loguer. Cela peut être très utile si l'utisateur fait une erreur dans son script de session qui rend impossible le login. Coment peut-on prendre avantage de cette possibilité est expliquée plus bas. Il faut noter que j'ai trouvé cette ressource définie sous Linux et sous SGI et qu'elle est utilisée de la même manière sur les deux systèmes.

2.3 Le Fichier Xsession

Le fichier /etc/X11/xdm/Xsession fourni par RedHat est très simple, spécialement quand on le compare au /var/X11/xdm/Xsession fourni par SGI. Ce fichier est un shell script standard bash qui exécute tout les lancements et les initialisations que l'administrateur système veut effectuer pour tout les utilisateurs.

Comme décrit plus haut, si l'utilisateur se logue et tape la touche F1 à la place de Enter, le paramètre "failsafe" est passé au fichier session. La première chose que le fichier /etc/X11/xdm/Xsession fait est de vérifier si ce paramètre existe et s'il existe, de lancer un xterm. Ceci se passe avant toute autre initialisation et offre à l'utilisateur un terminal sur lequel il peut travailler. Noter que c'est une bonne méthode pour un utilisateur qui a fait une erreur en modifiant son propre fichier de session , ce qui l'empêche de se loguer.

Pour ceux qui ne comprennent pas la fonction de exec, c'est une commande standard offertes par la majorité des interpréteurs de commande en ligne (shells). Elle provoque l'éxecution du programme en lieu et place du shell. De cette facon, le shell ne reprend jamais la main (à moins que le programme ne se lance pas à cause d'un problème quelconque) et le processus parent n'est pas avertis des changement effectués dans les processus enfants. Le programme exec retient l'ID du processus du shell et lorsqu'il se termine, cela se passe comme si le shell et la session utilisateur étaient terminée. Pensant que failsafe n'est pas un paramètre passé à Xsession, le script continue en redirigeant stderr vers un fichier erreur. Si il peut écrire dans celui-ci, ce fichier utilisera .xsession-errors dans le repertoire /home de l'utilisateur. Si Xsession ne peut pas écrire dans le répertoire de l'utilisateur, ou que ce fichier est protégé en écriture pour une raison quelconque, le script tentera d'écrire sur /tmp/xses-$USER, ou $USER est le nom de login de l'utilisateur.

Ce fichier d'erreur est trés utile pour déterminer les problèmes durant la session de l'utilisateur. Toutes les erreurs générées par les application qui sont lancées (incluant le gestionnaire de fenêtre et les applications lancées par celui-ci) seront envoyées dans ce fichier. Si l'utilisateur a des problèmes en lancant une session après s'être logué, il peut effectuer un login "failsafe" (comme décrit plus haut) et regarder dans ce fichier. Les messages d'erreurs peuvent être utile pour déterminer le problème.

Enfin, le fichier standard Xsession donne la main à un ensemble de scripts shell, pour peu qu'ils existent et soient exécutables. Cela est effectué via la commande exec, qui , quelque soit le programme lancé, prend la main sur Xsession, et devient la nouvelle session de l'utilisateur. Les scripts shell sont :

Quelques points sont intéressants à remarquer en comparant les scripts utilisés sur n'importe quel ordinateur SGI. SGI ne requiert pas que les scripts soient éxécutables et lancera /bin/sh sur eux s'ils ne le sont pas. De même, SGI regarde seulement $HOME/.xsession. Si ce fichier n'existe pas, le fichier Xsession fournit par SGI par défaut sera considéré comme l'environnement utilisateur. RedHat a choisit de scinder le processus de session en deux et donc l'installation standard fournit aussi /etc/X11/xinit/Xclients.

Si aucun des trois fichiers mentionnés au dessus n'existe (ou n'est exécutable), alors le fichier .Xresources est chargé (s'il existe) et le programme xsm est lancé. xsm est l'un des nombreux gestionnaires de fenêtres fournis par RedHat.

2.4 Configurer le fichier Xsession

Comme vous devez l'avoir deviné dans l'explication du fichier système Xsession, l'utilisateur peut créer son propre shell script qui sera lancé comme la session utilisateur. C'est une propriété très puissante et qui fournit à chaque utilisateur la possibilité d'effectuer n'importe quelle tâche qu'il désire à chaque fois qu'il se logue via X. Dans ce script, l'utilisateur peut lancer des applications diverses, configurer les ressources de la fenêtre root, définir des variables d'environnement, changer la definition du clavier et choisir un gestionnaire de fenêtre.

La manière la plus simple de définir votre fichier Xsession personnel est de copier le fichier système /etc/X11/xinit/Xclients dans votre repertoire $HOME sous le nom .xsession ou .Xclients (qu'au futur, je nommerais le fichier Xsession utilisateur) puis l'éditer comme vous le souhaitez. Je n'irai pas trop loin dans le contenu du fichier /etc/X11/xinit/Xclient, vous pourrez regarder par vous même. J'expliquerai juste quelques trucs que vous voudriez peut-être faire.

La chose la plus importante est de charger les ressources desirées dans la fenêtre root. C'est généralement effectué par les commandes suivantes :


resources=$HOME/.Xresources
if [-f "$resources"]; then
     /usr/bin/X11/xrdb -load "$resources"
fi

Une autre chose que l'utilisateur peut vouloir est de changer le fond d'écran. Cela peut-être effectué par la commande /usr/bin/X11/xsetroot. Par exemple, mon fond d'écran est défini comme tel: /usr/bin/X11/xsetroot -solid DarkSeaGreen4.

Noter que cette commande peut aussi être utilisée pour configurer le curseur par défaut, et la couleur du curseur pour la fenêtre root, un motif deux-tons pour le fond d'écran ou un bitmap X pouvant être utilisé.

Il existe aussi la commande /usr/bin/X11/xset qui peut être utilisée pour définir le volume du buzzer, les touches, la sauvegarde d'énergie et les paramètres de la souris. Par exemple, j'aime être capable d'accéder au jeu de caractère complet ISO 8859-1 et insérer des caractères internationaux dans mes documents. Linux aime définir [Shift]F1 comme F11 et [Shift]F2 comme F12, je préfère le définir comme F13 et F14. Pour régler ceci, j'ai défini $HOME/.xmodmaprc qui contient:


keycode 113 = Multi_key
keysym F1 = F1 F13
keysym F2 = F2 F14
keysym F3 = F3 F15
keysym F4 = F4 F16
...
keysym F10 = F10 F22
keycode 95 = F11 F23
keycode 96 = F12 F24

Puis dans mon fichier $HOME/.xsession j'ajoute :


if[ -r $HOME/.xmodmaprc]; then
      /usr/bin/X11/xmodmap $HOME/.xmodmaprc
fi

Enfin, le plus important est de lancer un gestionnaire de fenêtre. RedHat préfère lancer fvwm car il peut être configuré pour ressembler à Windows 95. Depuis que j'utilise beaucoup des stations SGI, je préfère Motif (qui est payant et n'est pas livré avec les distributions Linux courantes). Il existe aussi xsm et twm. Vous voudrez peut-être consulter les man pages pour déterminer lequel vous préférez.

S'il le veut, l'utilisateur peut éxécuter le gestionnaire de fenêtre comme la dernière commande dans le fichier Xsession. Cela signifie que l'utilisateur doit fermer le gestionnaire de fenètre pour fermer la session et retourner sur l'écran de login. Je préfère lancer le gestionnaire de fenètre comme un processus de fond et éxécuter un xterm en dernier. De cette façon, quand je quitte la session xterm, la session de l'utilisateur va se terminer et l'écran de login va apparaitre. Notez que le gestionnaire de fenêtre et toutes les application en dépendant vont être fermés car le DISPLAY X va être fermé. Toute application non X lancée comme un processus ne sera pas terminée et continuera à s'executer après la fin de la session de l'utilisateur.

Je commence ma session Motif par /usr/bin/X11/mwm et je lance xterm par nxterm -geometry 80x50+10+10 -ls.

Ceci crée une version de xterm qui supporte la couleur. Elle sera de 80 colonnes sur 50 lignes. La fenêtre sera positionnée dans le coin en haut à gauche de l'écran. La dernière commande oblige a lancer le shell en temps que login shell.

A partir du fichier Xsession de l'utilisateur, vous pouvez lancer un certain nombre de xterm, xlock ou autre, qui seront lancés automatiquement au login. Soyez sûr de spécifier un environnement avec -geometry pour avoir vos applications positionnées sur l'écran où vous le voulez.

Souvenez vous aussi de lancer les applications en tâches de fond (en terminant la ligne avec '&'), sinon le fichier Xsession attendra la fin de la tâche avant de continuer.

2.5 Astuces Importantes

Je voulais vous parler ici de quelques astuces importantes qui peuvent être utilisées a partir du fichier de configuration Xsession.

Tous les gestionnaires de fenêtre peuvent éxécuter des programmes provenant d'un menu déroulant. Quelquefois ces programmes ont besoin de variables d'environnement spéciales definie avant leur éxécution (par exemple, Netscape peut avoir besoin de SOCKS_NS). Comme les variables d'environnement de l'utilisateurs ne sont pas obligatoirement configurées tant qu'un shell n'est pas lancé, le gestionnaire de fenêtres et tous les programmes lancés par lui n'auront pas de variables d'environnement définie. Essayer de les configurer dans $HOME/.cshrc, $HOME/.profile ou $HOME/.login n'y fera rien.

Une astuce est de définir ces variables d'environnements dans le fichier Xsession. En effet il est nécessaire de configurer ces variables d'environnement avent de lancer votre gestionnaire de fenêtres.

Une autre astuce comme je les aime est de definir XUSERFILESEARCHPATH dans mon fichier Xsession. Beaucoup d'application y regardent et utilisent un fichier de ressources d'application. souvent trouvé dans /usr/lib/X11/app-defaults. Par example, Netscape utilise le fichier /usr/lib/X11/app-defaults/Netscape pour la configuration de ses ressources d'application. Si vous décider de changer n'importe laquelle de ces variables pour votre environnement personnel, vous pouvez copier ces fichiers dans votre répertoire home et les modifier. La prochaine fois que vous lancerez Netscape, il trouvera d'abord celui situé dans votre répertoire et l'utilisera de préférence à celui par défaut.

J'ai trouvé mon répertoire home submergé par des fichiers de configuration et j'ai eu envie de les mettre dans mon propre app-defaults privé. Je l'ai fait en créant un répertoire et en y copiant tout les fichiers de configurations. Ensuite, j'ai défini XUSERFILESEARCHPATH comme /home/carlson/app-defaults/%N:/usr/lbi/X11/%L/app-defaults/%N:/usr/lib/X11/a

Cela fait chercher les fichiers dans /home/carlson/app-defaults avant d'aller dans le répertoire default : /usr/lib/X11.

Une dernière astuce pour ceux qui ont plusieurs ordinateurs qui fonctionnent tous sous X. Chez moi j'ai une station O2 et une machine sous Linux. Quand je me logue à distance sur mon O2, je suis capable de lancer des applications X et de les utiliser sur le DISPLAY de ma machine linux. Pour cela, je dois lancer xhost chaque fois que je me logue sur ma machine linux, pour permettre le login à distance vers l'O2.

Dans mon fichier Xsession Utilisateur, j'ai donc: /usr/bin/X11/xhost +moonlight

Ceci configure mon serveur X Linux pour autoriser l'accès de moonlight, le nom de mon O2.

2.6 Conclusion

J'espère que vous avez trouvé ces informations utiles et interessantes. J'ai essayé de montrer comment créer votre propre fichier utilisateur Xsession pour lancer des applications, configurer des variables d'environnements et lancer votre propre gestionnaire de fenêtres. Je suis sûr que vous aurez bien d'autres idées.

J'ai écrit un utilitaire très utile, appelé userenv, inspiré d'une application similaire sur SGI. Cette application crée un shell de login comme un fils et affiche son environnement. Cet environnement est collecté, et est envoyé sur sdtout dans une forme qui peut être executée pour créer le même environnement que le shell.

Dans mon fichier Xsession Utilisateur, j'ai la ligne suivante : eval 'userenv'

Celle-ci récupère mon environnement utilisateur et le stocke dans une forme réutilisable par le shell pour recréer le même environnement. La commande eval fait évaluer le resultat de userenv par le shell.

Vous êtes les bienvenus pour récuperer une copie des sources de ce programme sur mon site Web, http://member.home.net/cwcarlson/files./utilities.tar.gz

Xdm est vraiment cool. C'est l'ancienne manière de realiser les choses. Je recommande d'essayer gdm ou un autre. Pour xdm, je donne un B-. Il manque juste ce que j'ai toujours voulu, pour m'apercevoir que gdm les avaient !!! J'expliquerai gdm la prochaine fois. Gdm a la capacité de vous laisser le choix du Gestionnaire de fichier au login. Je donne a gdm un B+, qui se transformera en A s'il devient mieux documenté.

2.7 Exemples de fichiers de configurations


/etc/X11/xdm/Xsetup_0
/etc/X11/xdm/Xresources
/etc/X11/xdm/GiveConsole
/etc/rc.d/rc.change_graphic
/etc/rc.d/rc.local
/etc/inittab

et les fichiers gif dans /etc/X11/xdm/graphics/.

Pour la suite, je veux changer xdm pour avoir xeyes, santa, xclock, une image, et le choix de l'écran de fond à l'écran avant de se logger. Après le log, je veux que santa s'arrète. Cruel non ?

Bon, faisons cela dans les règles:

Voici donc mes fichiers de configuration :

Articles parus dans le numéro 43 de la Linux Gazette, juin 1999.

Version Francaise et adaptation: David Le Roy david.leroy@univ-reims.fr.


Next Previous Contents