EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire


Conforme à XHTML 1.0 Strict Conforme à CSS!

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Le gestionnaire graphique LXDM (Mageia 5/Cauldron)

Historique

14 septembre 2011 : Création de cette page.
7 juillet 2014 : Actualisation de la page, avec Mageia5 (cauldron

Difficulté

Pour : linuxien averti.

 Introduction

Que ce soit avec SystemV ou avec Systemd, vous pouvez démarrer une session en mode graphique. Les pages Cliquez et Cliquez ont montré que le script prefdm a déterminé quel est le gestionnaire de connexion graphique qui est utilisé.

Cette page montre le processus de démarrage lorsque le gestionnaire graphique est LXDM.

Important !
LXDM est un gestionnaire de connexion, c'est-à-dire qu'il présente une fenêtre de connexion (login et mot de passe), à ne pas confondre avec le serveur X qui permet aux applications graphiques (et donc aussi à XDM) de dialoguer avec l'écran, le clavier et la souris.
LXDM est installé par défaut avec l'environnement LXDE.

Haut

 Description

Écran de connexion lxdm

LXDM est le gestionnaire de connexion de LXDE. Il permet la connexion et l'authentification de l'utilisateur, mais il permet également de choisir l'environnement avec lequel vous souhaitez travailler (si vous en avez plusieurs d'installés, par ex IceWM et LXDE).
Il permet également d'arrêter ou de redémarrer l'ordinateur.

LXDM cherche la liste des sessions dans /usr/share/xsessions et garde en mémoire la dernière session utilisée en /var/lib/lxdm/lxdm.conf.

Je l'ai également utilisé avec le bureau Xfce, à un moment où ligthdm n'était pas encore opérationnel.

Haut

 Configuration

La configuration se fait dans le fichier /etc/lxdm/lxdm.conf

Ce fichier permet de configurer l'auto-connexion, la session par défaut, la présentation de la fenêtre de connexion, des listes d'accès (à partir de la version 0.3.0)

Pour les curieux, survolez : analyse du fichier /etc/lxdm/lxdm.conf

Le fichier, sans les commentaires anglais

[base]
# autologin=dgod
# timeout=10
# session=/usr/bin/startlxde
# numlock=0
# xauth_path=/tmp
greeter=/usr/libexec/lxdm-greeter-gtk

[server]
active_vt=1
arg=/usr/bin/X -background

[display]
gtk_theme=oxygen-gtk
bg=/usr/share/mga/backgrounds/default.jpg
bottom_pane=1
lang=1
keyboard=0
theme=Mageia

[input]

[userlist]
disable=0
white=
black=

Analyse du fichier

autologin : vous permet de faire une connexion automatique d'un utilisateur donné. Pour ceci, dé-commentez la ligne et remplacez dgod par le login de l'utilisateur. Aucun mot de passe ne lui sera demandé.
timeout=10 : en mode autologin, une temporisation affiche la fenêtre de connexion et permet à l"utilisateur de choisir son bureau ou sa langue. Vous pouvez modifier la temporisation, mais elle doit être supérieure ou égale à 5s
session= : session utilisée par défaut, uniquement si aucune autre n'est précisée par ailleurs, par exemple dans /etc/sysconfig/desktop.
numlock : contrôle le verrouillage numérique pour la fenêtre de connexion (0=invalidé, 1=validé). Dé-commentez la ligne.
xauth_path : Xauth est un système d'authentification pour les applications graphiques interdisant à d'autres utilisateurs d'interférer avec vos applications.
~/.Xauthority est le fichier habituel d'authentification, mais vous pouvez en modifier l'emplacement.
greeter= : ce fichier définit la fenêtre de connexion. Ne le modifiez pas sans raison.
active_vt= : numéro du terminal virtuel.
arg= : arguments pour le démarrage du serveur X. Ne le modifiez pas.
gtk_theme= : thème général utilisé pour la fenêtre de connexion (icônes, onglets ...).
bg= : image de fond d'écran pour la fenêtre de connexion.
bottom_pane=1 : permet d'afficher ou non les listes de choix du bas de la fenêtre de connexion (1=affiché).
lang= : affiche le choix de la langue (=1) ou non (=0).
keyboard= : affiche le choix du clavier (=1) ou non (=0)
theme=Mageia : thème de lxdm
[userlist] : ce groupe permet d'utiliser des listes d'accès
disable=0 : permet d'invalider (=1) ou valider (=0) les listes white et black

Haut

 Le déroulement de LXDM

prefdm et lookupdm ont lancé la commande /usr/sbin/lxdm

 /usr/sbin/lxdm

Ce script définit quelques variables (paramètres nationaux, environnement par défaut selon /etc/sysconfig/desktop), puis lance le gestionnaire de connexion

Remarque: le fichier /etc/sysconfig/desktop est renseigné par le MCC.

Pour les curieux, survolez : analyse du fichier /usr/sbin/lxdm

Le fichier

#!/bin/sh

[ -f /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n

if [ -z "$LANG" -a -e /etc/sysconfig/language ]; then
  . /etc/sysconfig/language
  if [ -n "$RC_LANG"]; then
    LANG=$RC_LANG
  fi
fi

if [ -n "$LANG" ]; then
  export LANG
fi

[ -f /etc/sysconfig/desktop ] && . /etc/sysconfig/desktop
[ -f /etc/sysconfig/windowmanager ] && . /etc/sysconfig/windowmanager

if [ -n "$DEFAULT_WM" ]; then
  PREFERRED=$DEFAULT_WM
fi

if [ -n "$DESKTOP" ]; then
  export DESKTOP
fi

if [ -n "$PREFERRED" ]; then
  export PREFERRED

fi

exec /usr/sbin/lxdm-binary $*

Analyse du fichier

/etc/sysconfig/i18n gestion des paramètres nationaux.
/etc/sysconfig/language n'existe pas chez moi, il n'y a donc aucune action.
export LANG exporte la variable (=fr_FR.UTF-8)
/etc/sysconfig/desktop exécute ce fichier qui définit notamment la variable $DESKTOP (vide par défaut, mais renseigné par MCC).
/etc/sysconfig/windowmanager n'existe pas chez moi. Il devrait définir la variable $DEFAULT_WM.
$DEFAULT_WM N'est pas définie. De ce fait $PREFERRED ne l'est pas non plus et n'est pas exportée.
$DESKTOP est exportée si elle est définie.
exec /usr/sbin/lxdm-binary $* exécute le programme, avec l'argument nodaemon.

Haut

 /usr/sbin/lxdm-binary

Il s'agit d'un programme compilé. Il est donc assez difficile de trouver le déroulement exact.
Son fichier de configuration est /etc/lxdm/lxdm.conf

Il lance le fichier /etc/lxdm/Xsession, en lui fournissant un argument qui détermine le bureau à ouvrir.

Ce bureau est défini de la façon suivante :

  1. le bureau choisi dans la fenêtre de connexion, si vous ne laissez pas la valeur Par défaut
  2. à défaut, celui du fichier /etc/sysconfig/desktop, s'il y est défini,
  3. à défaut, celui du fichier /etc/lxdm/lxdm.conf, s'il y est défini,
  4. à défaut, la valeur startlxde
Haut

 /etc/lxdm/Xsession

Ce fichier est lancé par /usr/sbin/lxdm-binary avec, l'argument défini par lxdm-binary.

Il analyse l'argument et définit la commande à exécuter, il exécute éventuellement un xprofile, il ouvre la session demandée (ici exec /etc/X11/Xsession Nom_du_Bureau)

Pour les curieux, survolez : analyse du fichier /etc/lxdm/Xsession

Le fichier

#!/bin/bash
if [ $# -eq 1 -a -n "$1" ]; then
  LXSESSION=$1
else
# default session
  LXSESSION=/usr/bin/startlxde
fi

[ -f /etc/xprofile ] && . /etc/xprofile
[ -f ~/.xprofile ] && . ~/.xprofile

if [ -f /etc/X11/xinit/xinitrc-common ]; then
# fedora
  . /etc/X11/xinit/xinitrc-common
  if ! [ -z "$XDG_SESSION_COOKIE" ]; then
    CK_XINIT_SESSION=
  elif [ -x /usr/bin/ck-launch-session -a -z "$CK_XINIT_SESSION" ]; then
    CK_XINIT_SESSION="/usr/bin/ck-launch-session"
  fi
  exec -l $SHELL -c "$CK_XINIT_SESSION \"$LXSESSION\""
elif [ -x /etc/X11/xinit/Xsession ]; then
# fedora
  exec /etc/X11/xinit/Xsession "$LXSESSION"
elif [ -x /etc/X11/Xsession ]; then
# mageia, mandriva, debian, ubuntu
  exec /etc/X11/Xsession "$LXSESSION"
#suse
  export WINDOWMANAGER=$LXSESSION
  exec -l $SHELL -c /etc/X11/xinit/xinitrc
else
# unknown, user should custom /etc/lxdm/xinitrc self
  if [ -x /etc/lxdm/xinitrc ]; then
    . /etc/lxdm/xinitrc
  fi
  if ! [ -z "$XDG_SESSION_COOKIE" ]; then
    CK_XINIT_SESSION=
  elif [ -x /usr/bin/ck-launch-session ]; then
    CK_XINIT_SESSION="/usr/bin/ck-launch-session"
  fi
  exec -l $SHELL -c "$CK_XINIT_SESSION \"$LXSESSION\""
fi

Haut

 /etc/X11/Xsession

Il est également utilisé par la commande startx ou par les autres gestionnaires de connexion.

Ce script ouvre une session graphique correspondant aux éventuels paramètres spécifiés lors de la commande. Par défaut, ce paramètre est startlxde.
Voici, en résumé, le processus :

ConsoleKit conserve la trace de tous les utilisateurs connectés. Il est utilisé par différentes applications pour interagir avec les modifications pouvant intervenir, telles qu'un changement d'utilisateur par exemple

Pour les curieux, survolez : un peu plus de détails

* gestion des paramètres nationaux avec /etc/profile.d/10lang.sh et /etc/sysconfig/i18n
* création ou vidage du journal de session $HOME/.xsession-errors
* fond d'écran rouge, si c'est root qui se connecte
* définit la forme du curseur : patienter
* assemble toutes les ressources X de l'utilisateur et du système (icônes, mappage du clavier...) aux ressources système
* définition du fichier d'initialisation de console-kit (suivi des utilisateurs, des sessions, des sièges ...)
* définition du fichier de lancement du navigateur internet
* définition du bureau : celui donné en argument, sinon celui du fichier $HOME/.desktop, sinon celui du fichier /etc/sysconfig/desktop
* définition de la session : la même que le bureau; si, à ce stade, aucun bureau n'est défini, lance la commande chksession -F
* lancement des scripts du répertoire /etc/X11/xinit.d, avec chaque fois le nom de la session comme argument.
Le contenu du répertoire dépend de votre installation. Voici ce que j'ai, avec une installation minimale et avec le bureau IceWM :

  02XIM : interface de UIM, pour la gestion des langues japonaise et chinoise
  canberra-gtk-module.sh : ajoute canberra-gtk-module à la variable $GTK_MODULES
  menu : migration des anciens menus vers les nouveau, si besoin
  mgaapplet (appliquette signalant des mises à jour) : exécute /usr/bin/mgaapplet, uniquement avec les bureaux IceWM et Fluxbox
  numlock : active le verrouillage numérique en mode graphique, s'il est déjà activé en mode texte
  s2u : active le démon s2u (communication du système vers l'utilisateur, avec dbus)
  xdg-user-dirs-update : création ou mise à jour des répertoires de l'utilisateur
  xdg-user-dirs-update-gtk : n'est utilisé que pour les bureaux autres que GNOME, KDE et xfce4
* lancement du bureau, au sein de ConsoleKit, selon le cas :
  bureau failsafe : un simple terminal (essai, dans l'ordre : rxvt, xterm, xvt, twm)
  le bureau est défini : lancement de ce bureau
  le bureau n'est pas défini default : essai de diverses solutions : une session utilisateur est définie, des clients utilisateurs sont définis, recherche d'une session avec chksession -F, icewm, icewm-light, twm, xsm

Haut

 En résumé

/usr/sbin/lxdm

Prépare les arguments pour la commande /usr/sbin/lxdm-binary.

Vous pouvez ajouter, comme argument, le nom de la session à démarrer. Le nom doit être tel qu'il est spécifié dans le fichier du répertoire /etc/X11/wmsession.d (NAME=).

Vous pouvez également spécifier, pour un utilisateur donné, une procédure différente qui court-circuite le fichier /etc/X11/Xdesktop et qui donne directement la commande d'ouverture du bureau choisi. Vous créez un fichier .initrc dans la racine de l'utilisateur. Mais prudence ! Il ne faut rien oublier.

/usr/sbin/lxdm-binary

/usr/sbin/lxdm-binary définit le bureau à ouvrir de la façon suivante :

  1. le bureau choisi dans la fenêtre de connexion, si vous ne laissez pas la valeur Par défaut
  2. à défaut, celui du fichier /etc/sysconfig/desktop, s'il y est défini,
  3. à défaut, celui du fichier /etc/lxdm/lxdm.conf, s'il y est défini,
  4. à défaut, la valeur startlxde

Remarque : la fenêtre de connexion garde en mémoire les valeurs de la dernière connexion (/var/lib/lxdm/lxdm.conf)

/etc/lxdm/Xsession

Il prépare la commande exec /etc/X11/Xsession Nom_du_Bureau.

/etc/X11/Xsession

Xsession assemble toutes les ressources X, définit la session à ouvrir, lance les commandes du répertoire /etc/X11/xinit.d et enfin ouvre votre session avec son bureau.

Haut

 Auto-connexion

Si vous êtes le seul utilisateur de l'ordinateur et que personne d'autre ne risque de l'utiliser, vous pouvez vous passer de la fenêtre de connexion et de l'obligation de fournir le mot de passe Vous serez automatiquement connectés.

Pour ceci, en tant que root, éditez le fichier /etc/lxdm/lxdm.conf. Supprimez le caractère # de la ligne # autologin=dgod et remplacez dgod par votre nom de login

Haut