Maîtriser le démarrage d'X Window

De Lea Linux
Aller à la navigation Aller à la recherche

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


Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Martial Daumas le 16/09/2001.

Copyright

Copyright © 16/09/2001, Martial Daumas

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
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/