Maîtriser le démarrage d'X Window
Maîtriser le démarrage de X
par Martial Daumas
Comment démarrer X facilement à partir de la console, et comment configurer les fichiers relatifs.
Introduction
Si vous débutez sous Linux, le système pour lancer une simple session X peut vous paraître obscur.
En fait tout va bien, en général, jusqu'au jour ou vous vous mettez en tête de personnaliser un petit peu les méthodes. Cela vient du fait que certaines distributions personnalisent les fichiers. Ce n'est pas une mauvaise chose en soi, car cela permet d'utiliser Linux directement après une première installation, sans avoir à toucher au moindre fichier de configuration (ce qui peut être délicat à faire quand on découvre). Cela dit, les méthodes mises en oeuvre rendent parfois des modifications personnelles assez difficiles (et c'est quand même là que se situe un des avantage de Linux).
Nous allons donc voir des méthodes simples pour s'en sortir, en nous basant tout simplement sur les très bons fichiers de configurations fournis avec X quand il est installé à partir des sources.
Avertissement
Étant donné la très grande diversité des approches et organisations des fichiers selon les distributions (note de Jice : vivement la généralisation du FHS - Filesystem Hierarchy Standard !), il plus que que recommandé, si vous n'êtes pas certain à 100% de ce que vous faites, de faire une copie préalable de ce qui sera modifié, afin de pouvoir revenir à l'état précédent, ou revenir à la méthode livrée avec votre distribution si vous changez d'avis après coup.
Tout ce qui est dit ici concerne XFree86 dans sa version 4.1.0, tenez en compte si votre version diffère.
Théorie
Les fichiers et répertoires en jeu
Avant de personnaliser, essayons de voir en gros comment est organisé X. Voici tout d'abord le contenu du répertoire /etc/X11 :
app-defaults | On trouve ici les configurations par défaut pour les applications X comme xterm, xedit, xclock... | |
fs | Font server. Le fichier config détermine la taille du cache du serveur de fontes, l'emplacement des fichiers de log, etc. | |
lbxproxy | Pas abordé ici. | |
proxymngr | Pas abordé ici. | |
rstart | Pas abordé ici. | |
twm | twm est le gestionnaire de fenêtres par défaut de X. Il est minimaliste mais très configurable. | |
xdm | X display manager. Gestionnaire de login (sessions X) par défaut. kdm et gdm (gestionnaires de login de KDE et Gnome respectivement) se servent de aussi de ce fichier. | |
xinit | Programme pour initialiser une session X à partir de la console. Peut être lancé via la commande startx. | |
xkb | Concerne le clavier. | |
xserver | Permet de configurer la sécurité de serveur. | |
xsm | X session manager. C'est ce qui permet d'avoir plusieurs profils (à travers xdm par exemple). | |
XF86Config | Le fichier de configuration du/des serveurs graphiques. | |
XftConfig | Configuration du serveur de fontes. |
Nous partons du principe que votre carte graphique est déjà bien configurée.
On voit déjà qu'il y aurait plus d'une méthode pour arriver à nos fins, mais nous allons simplement utiliser xinit, qui convient parfaitement à une utilisation simple.
Le répertoire xinit contient par défaut uniquement le fichier xinitrc que voici (commenté) :
# définition fichiers système / utilisateur à chercher userresources=$HOME/.Xresources usermodmap=$HOME/.Xmodmap sysresources=/usr/X11R6/lib/X11/xinit/.Xresources sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap # merge in defaults and keymaps # teste l'existence des fichiers prédéfinis, et les # prend en compte si besoin. if [ -f $sysresources ]; then xrdb -merge $sysresources fi if [ -f $sysmodmap ]; then xmodmap $sysmodmap fi if [ -f $userresources ]; then xrdb -merge $userresources fi if [ -f $usermodmap ]; then xmodmap $usermodmap fi # start some nice programs # l'environnement X par défaut. Si vous lancez X par un # simple startx, c'est ce qui est lancé. twm & xclock -geometry 50x50-1+1 & xterm -geometry 80x50+494+51 & xterm -geometry 80x20+494-0 & exec xterm -geometry 80x66+0+0 -name login
Nous voyons donc pourquoi l'appel à startx lance par défaut twm avec des xterm et l'horloge. En fait, startx est un simple script Bash qui se charge d'appeler xinit à votre place, en lui passant éventuellement un certain nombre de paramètres.
Voici un fichier /usr/X11R6/startx par défaut :
#!/bin/sh userclientrc=$HOME/.xinitrc userserverrc=$HOME/.xserverrc sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc defaultclientargs="" defaultserverargs="" clientargs="" serverargs="" if [ -f $userclientrc ]; then defaultclientargs=$userclientrc else if [ -f $sysclientrc ]; then defaultclientargs=$sysclientrc fi fi if [ -f $userserverrc ]; then defaultserverargs=$userserverrc else if [ -f $sysserverrc ]; then defaultserverargs=$sysserverrc fi fi display=:0 whoseargs="client" while [ "x$1" != "x" ]; do case "$1" in --) whoseargs="server" ;; *) if [ "$whoseargs" = "client" ]; then clientargs="$clientargs $1" else serverargs="$serverargs $1" case "$1" in :[0-9]*) display="$1" ;; esac fi ;; esac shift done if [ x"$clientargs" = x ]; then clientargs="$defaultclientargs" fi if [ x"$serverargs" = x ]; then serverargs="$defaultserverargs" fi if [ X"$XAUTHORITY" = X ]; then export XAUTHORITY=$HOME/.Xauthority fi removelist= # set up default Xauth info for this machine mcookie=`mcookie` for displayname in $display `hostname -f`$display; do if ! xauth list "$displayname" | grep "$displayname " >/dev/null 2>&1; then xauth add $displayname . $mcookie removelist="$displayname $removelist" fi done xinit $clientargs -- $serverargs if [ x"$removelist" != x ]; then xauth remove $removelist fi if command -v deallocvt > /dev/null 2>&1; then deallocvt fi
Pas besoin de commenter ce script assez simple, retenons simplement cette ligne:
xinit $clientargs -- $serverargs
Et nous comprenons que pour l'instant, il n'y qu'un environnement accessible à la ligne de commande. Les paramètres $clientargs -- $serverargs permettant de jouer sur le serveur graphique (quel serveur, résolution etc....) mais pas de choisir un window manager, qui est pourtant souvent notre souhait.
Nous allons maintenant voir plusieurs cas qui peuvent vous intéresser.
Pratique
Les deux premiers cas concernent les logins dits "texte", lorsque votre ordinateur ne démarre pas en mode graphique par défaut.
login texte, un seul WM.
C'est le cas le plus simple : il suffit de choisir un window manager par défaut pour tous les utilisateurs et de modifier en conséquence les fichiers.
Modifiez la fin de xinitrc pour qu'il ressemble à ça :
# start some nice programs # l'environnement X par défaut. Si vous lancez X par un # simple startx, c'est ce qui est lancé. # lançons un window manager (ça peut être ce qu'on veut: xfce, # sawfish, gnome-session etc...) exec wmaker # si vous voulez que soit lancez des programmes décommentez # cela ou rajoutez des commandes (ça peut être utile dans # certains cas) #xclock -geometry 50x50-1+1 & #xterm -geometry 80x50+494+51 & #xterm -geometry 80x20+494-0 & #exec xterm -geometry 80x66+0+0 -name login
Pour lancer le window manager choisi, vous n'avez plus qu'à taper startx ou xinit. Pour que chaque utilisateur ait son propre profil, il suffit de créer un fichier .xinitrc dans son répertoire $HOME (répertoire /home/utilisateur), il remplacera alors le fichier général /etc/X11/xinit/xinitrc.
A noter : si vous voulez passer un paramètre au serveur, utilisez plutôt startx.
login texte, multi WM
Vous voulez lancer des sessions X, mais pas toujours avec le même window manager ? C'est très simple, il y a plein de manières de le faire. Voici la méthode la plus simple :
Créez un fichier $HOME/.xinitrc en remplaçant les dernières lignes des exemples précédents par :
exec $1
Vous pourrez ainsi appeler xinit en lui passant comme paramètre le window manager à lancer ($1). Par exemple, pour lancer KDE, tapez:
xinit startkde
et pour lancer windowmaker, tapez:
xinit wmaker
Si vous trouvez cela pénible à taper à chaque fois, créez des raccourcis dans un fichier de configuration de votre shell. Pour bash, créez ou modifier un fichier $HOME/.bashrc et ajoutez y ces lignes:
alias KDE='xinit startkde' alias WM='xinit wmaker' alias GNO='xinit gnome-session' ...et ainsi de suite.....
Comme cela, la simple saisie de KDE vous lancera kde. On peut difficilement faire plus simple ;o) On pourrait même faire un petit menu qui présente les différentes possibilités, ou ne faire apparaître ce menu que sur une console donnée.
Autologin
Si vous voulez qu'un environnement prédéfini démarre dès que vous avez donné votre login / password, il suffit de rajouter ceci dans votre .bashrc (plutôt à la fin) :
WM_DEFAUT=wmaker xinit $WM_DEFAUT
IL faut donc que les alias apparaissent avant cette commande dans le fichier. Tel quel, c'est inutilisable, car ça va faire une erreur à chaque ouverture de console texte ou de xterm supplémentaire, une session X étant déjà en cours. Nous allons juste rajouter un test qui ne déclenchera X que si on se logue sur une console donnée. étant donné que la console qui vous est présentée par défaut au démarrage est tty1, tenez en compte pour choisir sur quelle console faire le test. Pour un utilisation occasionnelle de X, utilisez plutôt tty2 (jusqu'à 12). Ainsi, CTRL+ALT+F2 vous passera sur tty2, login / password et X.
if [ `tty` == /dev/tty1 ]; then WM_DEFAUT=wmaker xinit $WM_DEFAUT fi
Si vous voulez que la console réservé au lancement de X reste accessible une fois X lancé, remplacez:
xinit $WM_DEFAUT
par :
xinit $WM_DEFAUT &
Login graphique : possibilités
Touchons juste un mot des gestionnaires de login (ou gestionnaire d'écran, an anglais display manager) graphiques.
Le plus fréquent est kdm, qui fait partie de KDE. Pas grand chose à dire sinon que c'est sans doute le plus convivial, mais il prend beaucoup de ressources et est donc à éviter sur de petites machines (KDE aussi d'ailleurs).
Il y a aussi gdm, le login qui vient avec Gnome, plus léger, assez simple a configurer.
Reste enfin le standard qu'est xdm : bien que kdm et gdm soit des frontends a xdm, il est différent, car il a une notion de sessions X qui est très éloignée de celle vues avec KDE ou GNOME. Il est plutôt à réserver à des situations de connexions par réseau et conjointement à divers logiciels ou applications spécialisées.
Il existe d'autres solutions moins connues, pas toutes stables. Je ne mentionnerai ici qu'un seul cas : selectwm, c'est celui dont je me sers car il est très léger, super simple, convivial et rapide. Pour une utilisation normale, je trouve qu'il surpasse de loin tout les autres. Je le recommande vivement, essayez-le au moins une fois, il pourrait bien vous convaincre. Il faut glib et gtk+ (librairies livrées avec Gnome) pour compiler ou installer ce soft.
Avec ce que nous avons vu, vous n'aurez aucun mal personnaliser selectwm, et à l'installer comme bon vous semble. Pour remplacer définitivement kdm, il vous faudra sans doute créer un script de remplacement à celui qui gère kdm dans /etc/init.d/ ou /etc/rc.d/init.d/ (en tant que service), mais c'est tout simple à faire.
Notes
Pour que tous ces exemples marchent, il est impératif que les programmes appelés soit dans votre path (le chemin de recherche des exécutables, qui se matérialise sous la forme de la variable d'environnement $PATH). Il faut donc que /etc/X11R6/bin fasse partie de votre path pour que les programmes soient trouvés sans le chemin complet. Cela vaut aussi pour les différents window managers. Pour savoir si un exécutable fait partie de votre $PATH, taper :
$ type -p commande
et pour modifier le path dans un fichier de configuration du bash (ex : .bashrc) :
export PATH=$PATH:/nouveau/chemin/bin
Autres ressources
@ Retour à la rubrique Environnement graphique
Copyright
Copyright © 16/09/2001, Martial Daumas
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique, Contexte non commercial 2.0 : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ |