TIP Customisation de XDM

Un article de Gentoo Linux Wiki.

Sommaire

[modifier] Introduction

Depuis que j'utilise des gestionnaires de fenêtres et gestionnaires de bureaux légers (comme xfce4) je préfère ne pas surcharger mon système avec de gros gestionnaires de connexion (comme GDM ou KDM) mais plutôt utiliser le simple (et léger) XDM, livré avec xorg.

Le paramétrage par défaut de ce programme donne une interface de connexion laide (minimaliste, diraient certains), et après un certain temps, on serait tenté d'utiliser un de ses gros cousins juste pour avoir un peu de couleurs sur l'écran.

Le but de ce document est simplement de montrer que ce n'est pas nécessaire. Avec un minimum d'effort de configuration, vous pouvez obtenir un agréable, coloré (et dans une certaine mesure, avec plein de fonctionnalités) gestionnaire de connexion en utilisant XDM.

Attention : je ne suis pas un artiste ni un hacker de X. N'attendez donc pas de trouver ici des conseils hyper avancés ou hyper spécialisés sur comment créer le Gestionnaire de Connexion Ultime. Ce n'est pas le but de ce document.

[modifier] Configuration de XDM

Les fichiers de configuration et les scripts utilisés par XDM peuvent être trouvés dans /etc/X11/xdm/. Si vous fouillez ce répertoire, vous verrez qu'il y en a un certain nombre. Ils sont tous décrits dans la page de manuel de XDM

man xdm

Mais pour le présent document, nous n'allons modifier qu'un de ceux-là, /etc/X11/xdm/xdm-config. C'est le fichier de configuration principal. Il définit les fichiers utilisés par xdm pour ses différentes actions. Editez ce fichier et modifiez ces trois lignes (vous pouvez revenir facilement à la configuration d'origine en commentant les lignes originales et en en créant de nouvelles).

Fichier : /etc/X11/xdm/xdm-config
...
DisplayManager._0.setup:        /etc/X11/xdm/Xsetup_my
DisplayManager._0.startup:      /etc/X11/xdm/GiveConsole_my
DisplayManager*resources:       /etc/X11/xdm/Xresources_my
...

Par ce biais, nous disons à XDM d'utiliser des fichiers différents pour afficher le login graphique. Pour réduire les intéractions avec portage et sa gestion automatique des fichiers de configuration, il vaut mieux créer de nouveaux fichiers et ne pas modifier les originaux.

Trois fichiers sont donc créés.

/etc/X11/xdm/Xsetup_my est un script, exécuté par XDM, pour paramétrer les différentes applications qui vont garnir l'écran de login.

/etc/X11/xdm/GiveConsole_my est un fichier exécuté par XDM quand un utilisateur s'est connecté avec succès ; nous allons l'utiliser pour nettoyer l'écran avant de passer la main à l'utilisateur.

Enfin, dans /etc/X11/xdm/Xresources_my sont énumérées les options qui affectent le comportement des différents programmes lancés par XDM. Nous l'utiliserons pour customiser l'apparence des fenêtres.


[modifier] Démarrer les programmes nécessaires

/etc/X11/xdm/Xsetup_my lance différents programmes qui apparaissent sur l'écran de connexion graphique. Son utilisation typique est pour afficher une image en fond d'écran. Mais vous pouvez, en principe, faire tout ce que vous faites dans une session X. Nous resterons ici au strict minimum. Voici le fichier que j'utilise :

Fichier : /etc/X11/xdm/Xsetup_my
#--- set a fullscreen image in background
xsetbg -fullscreen /etc/X11/xdm/background_my.jpg

#--- log messages in background
root-tail -f -geometry 500x150+1090+10 -fn fixed /var/log/messages,purple

#--- set Shutdown/Reboot buttons
(
xmessage -buttons Shutdown:20,Reboot:21 "" ;
CONTROL=$?;
if [ "$CONTROL" = 20 ] ; then
  /sbin/shutdown -h now 2>/dev/console >/dev/console;
elif [ "$CONTROL" = 21 ] ; then
  /sbin/shutdown -r now 2>/dev/console >/dev/console;
else
 echo "Xessage closed on `date`";
fi
)&

NdT : pour permettre à un utilisateur de pouvoir redémarrer ou éteindre la machine, vous pouvez voir ce HowTo.

Premièrement, il commence par mettre une image /etc/X11/xdm/background_my.jpg en fond d'écran. Modifiez cette ligne pour spécifier votre image. Deuxièmement, il utilise root-tail pour afficher en arrière plan les log du système. Notez que c'est un possible trou de sécurité, ne l'utilisez donc que dans un environnement sûr. Et enfin, il crée un shell secondaire (c'est la signification de (...)& qui utilise l'utilitaire simple xmessage (trouvé dans xorg) pour afficher deux boutons sur l'écran. Tous ces programmes sont hautement configurables et possèdent beaucoup de fonctions. Voyez les pages de manuel pour de plus amples détails.

En plus des programmes démarrés par /etc/X11/xdm/Xsetup_my, XDM placera aussi un module d'authentification, c'est une fenêtre où l'utilisateur est supposé y entrer son nom d'utilisateur et son mot de passe pour s'authentifier.

C'est tout pour le premier fichier. Allons maintenant à /etc/X11/xdm/Xresources_my. Ce fichier est extrèmement important car il définit la manière dont les précédentes fenêtres vont être affichées.

[modifier] Adapter le comportement des programmes

La configuration par défaut des fichiers fournis par xorg est un peu compliquée, puisqu'elle doit être générique afin de fournir une configuration cohérente pour des serveurs X avec différentes caractéristiques. En particulier, il contient plusieurs sections (séparées par #if...) qui s'appliquent à différentes résolutions d'écran et intensités de couleurs. Puisque nous allons en faire une version adaptée, nous pouvons éviter ces complications et simplement adapter la configuration à nos besoins. Dans ce qui suit, je supposerai que votre écran utilise une résolution de 1600x1220 (ce qu'utilise mon écran). Merci d'adapter si ce n'est pas votre cas.

Commençons par la configuration du module d'authentification, appelé xlogin. Premièrement, nous devons permettre l'édition dans ce module. On peut donc faire un copier-coller de la configuration par défaut de /etc/X11/xdm/Xresources pour avoir :

Fichier : /etc/X11/xdm/Xresources_my
! bind actions to particular keys sequences
! -----------------------------------------

xlogin*login.translations: #override \
        Ctrl<Key>R: abort-display()\n\
        <Key>F1: set-session-argument(failsafe) finish-field()\n\
        <Key>Delete: delete-character()\n\
        <Key>Left: move-backward-character()\n\
        <Key>Right: move-forward-character()\n\
        <Key>Home: move-to-begining()\n\
        <Key>End: move-to-end()\n\
        Ctrl<Key>KP_Enter: set-session-argument(failsafe) finish-field()\n\
        <Key>KP_Enter: set-session-argument() finish-field()\n\
        Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\
        <Key>Return: set-session-argument() finish-field()

Ensuite, nous devons choisir la position et la couleur, dans mon cas j'ai mis :

Fichier : /etc/X11/xdm/Xresources_my
! position
xlogin*geometry: 430x200+180+10

! colors
xlogin*background:  white
xlogin*foreground:  darkgray
xlogin*greetColor:  darkgray
xlogin*promptColor: darkgray
xlogin*failColor:   red

Ce qui donne un module de 430 pixels de largeur et de 200 de haut et placé à côté du coin en haut à gauche (+180+10). Le fond est en blanc avec le texte en gris foncé. Si l'utilisateur rate son authentification, un message est affiché en rouge.

La partie suivante configure le texte des différents messages et la police utilisée :

Fichier : /etc/X11/xdm/Xresources_my
! prompts
Xlogin*titleMessage:     Xlogin
xlogin*greeting:         Welcome to CLIENTHOST! Authentication required
xlogin*namePrompt:       Username:\040
xlogin*passwdPrompt:     Password:\040
xlogin*fail:             -- Permission Denied --

! fonts
xlogin*font:       -microsoft-comic sans ms-medium-r-normal--16-*-100-100-p-*-is
o8859-15
xlogin*greetFont:  -microsoft-comic sans ms-medium-r-normal--16-*-100-100-p-*-is
o8859-15
xlogin*promptFont: -microsoft-comic sans ms-medium-r-normal--16-*-100-100-p-*-is
o8859-15
xlogin*failFont:   -microsoft-comic sans ms-medium-r-normal--16-*-100-100-p-*-is
o8859-15

J'utilise une police homogène, comic sans en 16pt, mais vous pouvez bien sûr choisir une autre police. Notez le code \040 à l'authentification. Il représente un caractère vide et je l'utilise pour séparer d'un espace le curseur des deux-points. Enfin, vous pouvez adapter les bordures et le cadre du module. J'ai choisi la simplicité avec :

Fichier : /etc/X11/xdm/Xresources_my
! shape
xlogin*borderWidth:      0
xlogin*frameWidth:       0
xlogin*innerFramesWidth: 0

Il y a plusieurs autres options que vous pourriez ajouter, voir la page de manuel de XDM pour la longue liste. La prochaine étape est de modifier l'apparence de la fenêtre xmessage où les boutons Shutdown et Reboot sont affichés. Les propriétés de cette fenêtre (taille, position, couleurs et polices) peuvent être spécifiées avec une liste d'options. Mon choix est :

Fichier : /etc/X11/xdm/Xresources_my
! xmessage resources
! ==================

Xmessage*geometry:              150x30+1100+1160
Xmessage*background:            white
Xmessage*foreground:            darkgrey
Xmessage*Font:                  -microsoft-comic sans ms-medium-r-normal--16-*-1
00-100-p-*-iso8859-15
Xmessage*borderWidth:           0

Xmessage*message.scrollVertical:        Never
Xmessage*message.scrollHorizontal:      Never

Xmessage*Text*background:       white
Xmessage*Text*foreground:       darkgrey
Xmessage*Text.borderColor:      white
Xmessage*Text.borderWidth:      0
Xmessage*Text*font:             -microsoft-comic sans ms-medium-r-normal--16-*-1
00-100-p-*-iso8859-15

NdT : pour une résolution de 1280x1024 vous pouvez remplacer :

Fichier : /etc/X11/xdm/Xresources_my

Xmessage*geometry: 150x30+1100+1160

par :

Fichier : /etc/X11/xdm/Xresources_my

Xmessage*geometry: 150x30+1110+980

Notez que je retire les ascenseurs horizontaux et verticaux (avec Never) et, pour l'homogénéité, j'utilise la même police que pour la fenêtre xlogin. Enfin, si vous utilisez aussi XDM pour des connexions distantes, vous devriez mettre une configuration précise pour la fenêtre chooser. Les connexions à distance peuvent être épineuses, et c'est clairement en dehors du but de cet article, je copie et colle simplement à partir du fichier par défaut :

Fichier : /etc/X11/xdm/Xresources_my
! chooser resources
! ==================

Chooser*geometry:               700x500+300+200
Chooser*allowShellResize:       false
Chooser*viewport.forceBars:     true
Chooser*label.font:             *-new century schoolbook-bold-i-normal-*-240-*
Chooser*label.label:            XDMCP Host Menu from CLIENTHOST
Chooser*list.font:              -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1
Chooser*Command.font:           *-new century schoolbook-bold-r-normal-*-180-*

[modifier] Nettoyage

Après une authentification réussie, le contrôle du serveur X est donné à l'utilisateur. Cependant, avant ça, nous devons nettoyer l'écran des applications démarrées précédemment. C'est le travail du dernier fichier que nous allons faire /etc/X11/xdm/GiveConsole_my. L'idée est simple : prendre le fichier par défaut /etc/X11/xdm/GiveConsole et ajouter simplement un kill pour retirer toutes les applications démarrées par /etc/X11/xdm/Xsetup_my :

Fichier : /etc/X11/xdm/GiveConsole_my
chown $USER /dev/console

#remove root-tail
killall root-tail

#remove the xmessage buttons
killall xmessage

J'ai vu des choses plus sophistiquées, comme enregistrer le PID des différents programmes et utiliser un kill sélectif pour les tuer, mais, pour moi, ce script fonctionne parfaitement.

[modifier] Redémarrer XDM

Quand il n'y a plus rien à modifier, il est temps de redémarrer XDM

#/etc/init.d/xdm restart

Et appréciez le résultat. Voici une image de ce que j'obtiens avec cette configuration.


XDM avec une oeuvre d'art du fils de l'auteur original
XDM avec une oeuvre d'art du fils de l'auteur original

[modifier] Liens

Traduit de l'article sur le Wiki anglais.