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 (...)& code> qui utilise l'utilitaire simple xmessage code> (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... code>) 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 code>. 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 code> à 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 code>) et, pour l'homogénéité, j'utilise la même police que pour la fenêtre xlogin code>. Enfin, si vous utilisez aussi XDM pour des connexions distantes, vous devriez mettre une configuration précise pour la fenêtre chooser code>. 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.
[modifier] Liens
Traduit de l'article sur le Wiki anglais.
