Fixer l'environnement graphique par défaut avec gdm sous LinuxPPC.




Sommaire.

Introduction.
Conditions initiales.
Ajouter un gestionnaire de fenêtres.
   Le répertoire /etc/X11/gdm/Sessions.
Fixer l'environnement graphique par défaut.
   Le script ~/.Xclients.
   Le script RunWM.
Conclusion.



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.

Conditions initiales.

Je suppose que :

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.

Ajouter un gestionnaire de fenêtres.

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.

Le répertoire /etc/X11/gdm/Sessions.

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 :

Fixer l'environnement graphique par défaut.

Le script ~/.Xclients.

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

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
...

Mgdfp) doit correspondre à ce que vous avez mis dans le fichier ~/.wm_style. Attention aux majuscules et aux minuscules !

Le script RunWM.

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.

Bonus.

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.

Conclusion.

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.




Etienne Herlent.

 

Dernière mise à jour le 15/4/00.

les fichiers en téléchargement sont à ftp://ftp.linux-france.org/pub/macintosh/

 

Retour à GNU Linux sur Macintosh