Sommaire.
Introduction.Ce document explique comment choisir l'environnement graphique par défaut (GNOME, KDE, AnotherLevel) qui sera démarré par gdm. Gdm est le programme qui demande le nom du compte utilisateur et son mot de passe sous X Window, et qui permet le choix entre GNOME, KDE, quelques gestionnaires de fenêtres et un environnement "Default". C'est ce dernier qui nous intéresse, et nous allons voir comment faire pour que cet environnement par défaut soit celui que l'utilisateur préfère.
J'ai trouvé cette façon de procéder en étudiant le fonctionnement des
scripts /usr/X11R6/bin/startx et
/etc/X11/xinit/xinitrc.
Les indications sont données telles quelles, sans garantie d'aucune sorte, ni explicite, ni implicite. En aucun cas je ne pourrai être tenu pour responsable de pertes de données ou de casse de matériel.
Je suppose que :
x:5:respawn:/etc/X11/prefdm -nodaemon
Si ces conditions ne sont pas remplies, les explications données ici ne fonctionneront certainement pas. Il vous faudra soit les adapter, soit remettre votre système en ordre.
A propos d'ordre, vous allez devoir modifier un certains nombre de scripts. Je vous conseille vivement de sauvegarder les scripts originaux, en passant par exemple ce genre de commande :
cp nom_du_script nom_du_script.orig
Avant de commencer à toucher à la configuration, il vaut mieux vérifier que l'environnement graphique choisi a été correctement installé et paramétré. Pour cela, il suffit de le choisir explicitement dans le menu que l'on obtient en cliquant sur le bouton options de gdm. Si l'environnement graphique que vous souhaitez n'apparaît pas dans ce menu, il vous faudra l'ajouter. C'est l'objet du paragraphe suivant.
Ce paragraphe décrit comment ajouter un gestionnaire de fenêtres à la liste des environnements graphiques du menu options de gdm. Il ne décrit pas comment installer un gestionnaire de fenêtres (pour cela voyez la documentation associée à votre gestionnaire de fenêtres). On suppose que le gestionnaire de fenêtres en question est installé et configuré, qu'il s'appelle Mgdfp (Mon Gestionnaire De Fenêtres Préféré), et qu'il est démarré par la commande Runmgdfp.
Les manipulations décrites ici sont optionnelles. Elles vont permettre de valider le bon fonctionnement de Mgdfp. Si vous êtes un kamikaze, ou si vous voulez utiliser GNOME ou KDE, vous pouvez directement aller au paragraphe suivant.
Dans le répertoire /etc/X11/gdm/Sessions, dupliquez un fichier déjà existant, et donnez lui le nom Mgdfp, par exemple :
cd /etc/X11/gdm/Sessions
cp Gnome Mgdfp
Editez le fichier Mgdfp, et sur la dernière ligne (/etc/X11/xdm/Xsession gnome), remplacez gnome par mgdfp.
Il faut ensuite modifier le script /etc/X11/xdm/Xsession pour lui dire ce qu'il doit faire pour démarrer Mgdfp. Dans ce script, il y a un double case qui débute aux environs de la ligne 45 et qui énumère les différents gestionnaires possibles :
case $#
in 1)
case $1 in
failsafe)
exec xterm -geometry 80x24-0-0
;;
gnome)
exec gnome-session
;;
kde)
exec startkde
;;
anotherlevel)
# we assume that switchdesk is installed.
exec /usr/share/apps/switchdesk/Xclients.anotherlevel
;;
esac
esac
Nous allons y ajouter notre gestionnaire de fenêtres Mgdfp. Pour cela, entre le ;; qui termine le cas d'AnotherLevel et le esac qui termine le case $1, nous insérons les lignes suivantes :
mgdfp)
exec Runmgdfp
;;
Ce qui donne :
...
kde)
exec startkde
;;
anotherlevel)
# we assume that switchdesk is installed.
exec /usr/share/apps/switchdesk/Xclients.anotherlevel
;;
mgdfp)
exec Runmgdfp
;;
esac
esac
...
Attention aux majuscules et minuscules ! mgdfp doit correspondre à ce que vous avez mis dans le fichier /etc/X11/gdm/Sessions/Mgdfp
Nous pouvons maintenant vérifier le bon fonctionnement. Pour cela, quittez
le gestionnaire de fenêtres ou de bureau en cours et revenez au dialogue de
login gdm. Le menu options doit proposer un nouveau
choix, Mgdfp, que vous sélectionnez. Entrez un compte d'utilisateur
et son mot de passe, puis validez par [Entrée]. Le gestionnaire de
fenêtres choisi démarre.
Si ça ne marche pas :
Si vous avez installé LinuxPPC 2000, sous X, utilisez
switchdesk, choississez AnotherLevel et
quittez switchdesk.
Si vous êtes sous LinuxPPC 1999, vous devez créer le fichier
~/.Xclients comme ceci :
Si vous avez déjà un script ~/.Xclients, renommez le.
Créez un script ~/.Xclient à partir d'un script existant
(/etc/X11/xinit/Xclients) en le copiant dans le répertoire
~/. de l'utilisateur :
cp /etc/X11/xinit/Xclients ~/.Xclients
Suivant que vous utilisez LinuxPPC 1999 ou LinuxPPC 2000, éditez le
fichier ~/.Xclients ou le fichier
~/.Xclients-default (il a été créé par
switchdesk).
Le script ~/.Xclients commence comme suit :
#!/bin/bash
# (c) 1999 Red Hat Software, Inc.
# check to see if the user has a preferred desktop
PREFERRED=
if [ -f /etc/sysconfig/desktop ]; then
if [ -n "`grep -i GNOME /etc/sysconfig/desktop`" ]; then
PREFERRED=gnome-session
elif [ -n "`grep -i KDE /etc/sysconfig/desktop`" ]; then
PREFERRED=startkde
elif [ -n "`grep -i AnotherLevel /etc/sysconfig/desktop`" ]; then
PREFERRED=AnotherLevel
fi
fi
Sous LinuxPPC 1999, ce script est un script général qui va regarder dans
le fichier /etc/sysconfig/desktop quel gestionnaire de bureau
tous les utilisateurs vont utiliser. Comme nous voulons une configuration
propre à chaque utilisateur, quelques modifications vont être nécessaires.
Modifiez la ligne :
PREFERRED=
par
PREFERRED=gnome-session PREFERRED=startkde PREFERRED=AnotherLevel
suivant que l'utilisateur souhaite démarrer avec GNOME, KDE ou AnotherLevel, et supprimez les 9 lignes suivantes.
Si vous avez utilisé switchdesk, cette partie n'est pas
présente et vous n'avez donc rien à faire.
Un petit mot au sujet d'AnotherLevel. AnotherLevel est le gestionnaire de bureau qui fut le gestionnaire de bureau par défaut de la distribution RedHat 4. Comparé à GNOME ou KDE, je me demande en quoi il est un gestionnaire de bureau, mais il est bien pratique pour choisir le gestionnaire de fenêtres que l'on désire. Donc, si vous ne voulez ni GNOME ni KDE, indiquez AnotherLevel.
Si vous avez choisi GNOME ou KDE, le paramétrage s'arrête ici, le reste concerne AnotherLevel.
AnotherLevel va chercher le fichier ~/.wm_style et passer son
contenu en paramètre au script /usr/X11R6/bin/RunWM.
Créez, ou remplacez, le fichier ~/.wm_style en passant la
commande :
echo mgdfp >~/.wm_style
où mgdfp est Mon Gestionnaire De Fenêtres Préféré (cf le
paragraphe précédent).
Plus loin dans le script, il y a un autre test suivi d'un case :
# First thing - check the user preferences
if [ -f $HOME/.wm_style ] ; then
WMSTYLE=`cat $HOME/.wm_style`
case "$WMSTYLE" in
Afterstep | AfterStep)
exec /usr/X11R6/bin/RunWM --AfterStep
;;
WindowMaker | Windowmaker | WMaker | wmaker)
exec /usr/X11R6/bin/RunWM --WindowMaker
;;
Fvwm95 | fvwm95)
exec /usr/X11R6/bin/RunWM --Fvwm95
;;
Mwm | MWM | Lesstif)
exec /usr/X11R6/bin/RunWM --FvwmMWM
;;
esac
fi
Nous allons y insérer une option pour traiter le cas de notre gestionnaire de fenêtres, comme ceci :
if [ -f $HOME/.wm_style ] ; then
WMSTYLE=`cat $HOME/.wm_style`
case "$WMSTYLE" in
Mgdfp)
exec /usr/X11R6/bin/RunWM --mgdfp
;;
Afterstep | AfterStep)
exec /usr/X11R6/bin/RunWM --AfterStep
;;
WindowMaker | Windowmaker | WMaker | wmaker)
exec /usr/X11R6/bin/RunWM --WindowMaker
...
où Mgdfp) doit correspondre à ce que vous avez mis dans le
fichier ~/.wm_style. Attention aux majuscules et aux minuscules
!
C'est maintenant le tour du script /usr/X11R6/bin/RunWM.
Ce script est un peu sioux dans le sens où il fait un certain nombre de vérifications.
En premier lieu, ce script vérifie s'il connait le gestionnaire de fenêtres qu'on lui a passé en paramètre. Si le gestionnaire de fenêtre que vous avez choisi ne fait pas partie de ceux qu'il connait, il faudra l'ajouter. Par exemple, le test suivant :
...
if [ -n "$1" ] ; then
case "$1" in
--afterstep | --AfterStep | \
--windowmaker | --wmaker | --WindowMaker | \
--fvwm95 | --Fvwm95 | \
--fvwmMWM | --fvwmmwm | \
--MWM | --Mwm | --mwm )
KNOW_WM="yes"
WM_CHOICE=$1
shift ;;
...
sera modifié en :
...
if [ -n "$1" ] ; then
case "$1" in
--mgdfp | \
--afterstep | --AfterStep | \
--windowmaker | --wmaker | --WindowMaker | \
--fvwm95 | --Fvwm95 | \
--fvwmMWM | --fvwmmwm | \
--MWM | --Mwm | --mwm )
KNOW_WM="yes"
WM_CHOICE=$1
shift ;;
...
ATTENTION : vous devez ajouter le nom que vous avez mis
comme paramètre de RunWM dans le fichier ~/.Xclients ou
~/.Xclients-default, gare aux majuscules et minuscules.
Si vous voulez, vous pouvez aussi ajouter le message d'aide correspondant
dans le cas où l'utilisateur démarre le script avec le paramètre
--help, mais c'est facultatif.
C'est ici que les choses se compliquent, ou plus exactement qu'il y a du boulot. Dans ce script, un certain nombre de fonctions sont définies, une par gestionnaire de fenêtres connu du script :
Si le gestionnaire de fenêtres que vous avez choisi est connu de RunWM,
vous n'avez plus rien à faire. Vérifiez quand même le chemin d'accès, on ne
sait jamais. Par exemple, j'avais voulu voir si WindowMaker fonctionnait
mieux sous XF86 que sous Xpmac. Je n'ai pas été déçu, car dès le lancement,
WM m'a fait un joli core dump. Je n'ai pas abandonné pour autant, et j'ai
recompilé et installé une version non modifiée par RedHat. Cette nouvelle
installation s'est faite dans /usr/local, et comme RunWM
s'attend à trouver WM dans /usr, j'ai du modifier le script pour
le faire correspondre à mon système.
Si votre gestionnaire de fenêtres préféré n'est pas connu de RunWM, vous devez créer votre propre fonction Start_Mgdfp. pour cela, inspirez vous des autres fonctions. Vous pouvez aussi faire une version minimale comme celle-ci :
function Start_Mgdfp () {
eval "exec /<chemin d'accès à votre gestionnaire de fenêtres préféré>/Runmgdfp" > "$HOME"/.Mgdfp-errors 2>&1
}
Je rappelle que la commande pour lancer le gestionnaire de fenêtres
Mgdfp est Runmgdfp.
On respire un coup avant la dernière ligne droite (et oui, ce n'est pas fini ...)
Un peu plus loin dans le script RunWM, on trouve le commentaire suivant :
################### THE REAL WORK IS DNE HERE ################################
suivi de :
case "$WM_CHOICE" in --afterstep | --AfterStep) echo "AfterStep" > $HOME/.wm_style Start_AfterStep exit 0; ;; --windowmaker | --wmaker | --WindowMaker) echo "WindowMaker" > $HOME/.wm_style ...
Un dernier effort pour traiter le cas de notre gestionnaire de fenêtres.
Immédiatement après la ligne case "$WM_CHOICE" in, ajoutez les
lignes suivantes :
--mgdfp) echo "mgdfp" > $HOME/.wm_style Start_Mgdfp exit 0; ;;
Vous pouvez en fait ajouter ces lignes n'importe où dans le
case, pourvu que vous ne vous trompiez pas.
Et voilà, c'est tout pour le paramétrage.
Il n'y a plus qu'à quitter le gestionnaire de fenêtres en cours pour
revenir à gdm (le dialogue de login), de saisir le compte utilisateur pour
lequel on vient de faire le paramétrage, son mot de passe et de taper
doucement sur [Entrée], et d'admirer.
Si vous arrivez sous Fvwm95, soit vous l'avez choisi, soit ça ne marche
pas. Dans ce dernier cas, reprenez calmement les étapes depuis le début, et
vérifiez bien tout ce que vous avez fait et écrit. Vérifiez également que les
chemins d'accès à tous les exécutables de votre gestionnaire de fenêtres sont
connus de la variable système PATH (voyez le script
/etc/rc.d/rc.sysinit ou le fichier /etc/profile).
Si ce n'est pas le cas, ajoutez les. Au besoin, restaurez les scripts
originaux, que vous n'avez pas manqué de sauvegarder comme je vous l'ai
conseillé, et recommencez.
Pour changer l'image qui est en fond d'écran pendant le login, il suffit
d'aller regarder ce qui se passe dans le fichier
/etc/X11/X_setup_0.
Vous venez de faire un petit tour dans les arcanes de votre système, vous avez vu quelques notions de programmation en shell unix (bash, en l'occurrence), vous savez comment fixer le gestionnaire de fenêtres par défaut quand on démarre en runlevel 5. J'espère que cela a éveillé la curiosité des moins aguerris.
Devoir à la maison pour dans quinze jours : proposer un moyen pour faire la même chose, mais quand le Macintosh démarre en runlevel 3, et que X Window est démarré par startx. Une synthèse des contributions sera publiée dans ces pages.
Dernière mise à jour le 15/4/00.
les fichiers en téléchargement sont à ftp://ftp.linux-france.org/pub/macintosh/