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 XDM, sans autologin

Historique

2 août 2011 : Création de cette page.
2 juillet 2014 : actualisation avec Systemd

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 XDM. En tant que tel, XDM ne permet pas l'autologin. Vous devez installer le paquetage autologin.

Important !
XDM 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.
XDM est installé par défaut avec une installation minimale.

Haut

 Description

Écran de connexion xdm

XDM est probablement le gestionnaire de connexion ayant l'aspect le plus épuré : une simple boîte de dialogue sur fond noir (ou sur le fond par défaut), avec un message d'accueil, un champ pour le nom de l'utilisateur, puis un champ pour le mot de passe. Il n'a ni liste d'utilisateurs, ni choix du bureau à afficher, mais il est très simple.

Haut

 Utilisation classique

La plupart du temps, les applications sont installées sur l'ordinateur de l'utilisateur. Ce dernier se connecte à son ordinateur à l'aide d'un gestionnaire de connexion en mode graphique.

Utilisateur local sur le serveur X local

C'est donc le cas le plus courant.
Dans ce cas de figure, XDM réalise les opérations suivantes :

Haut

 Utilisation avec un poste déporté

Cela concerne, par exemple, des anciens ordinateurs, ayant une puissance relativement limitée. Ils peuvent encore être utilisés en tant que client léger. Il leur suffit alors d'avoir un minimum de mémoire et de ressources propres. Les programmes sont traités par un serveur d'applications distant. Le gestionnaire de connexion est habituellement fourni par le serveur.

Les tâches sont donc réparties :

Le protocole XDMCP permet la communication entre le client léger et l'environnement graphique du serveur. Une liaison réseau est bien sûr indispensable.

Modes de connexion depuis un poste déporté

Différent modes de connexion sont possibles :

L'utilisation avec poste déporté ne sera pas traitée ici.

Haut

 Les fichiers de configuration

SystemV ou systemd ont lancé prefdm et celui-ci à défini la commande permettant d'ouvrir la fenêtre de connexion : /usr/bin/xdm

La configuration de xdm se fait en éditant quelques fichiers texte. Si vous devez modifier des fichiers de configuration, il est prudent de faire une copie de sauvegarde de ces fichiers, en les renommant autrement.

 /etc/X11/xdm/xdm-config

Il définit quelques paramètres et précise quels sont les autres fichiers de configuration et fichiers exécutables.

Pour les curieux, survolez : analyse du fichier /etc/X11/xdm/xdm-config

Le fichier

! $Xorg: xdm-conf.cpp,v 1.3 2000/08/17 19:54:17 cpqbld Exp $
! $XFree86: xc/programs/xdm/config/xdm-conf.cpp,v 1.11 2004/01/09 00:25:25 dawes Exp $
!
DisplayManager.errorLogFile: /var/log/xdm.log
DisplayManager.pidFile: /var/run/xdm.pid
DisplayManager.keyFile: /etc/X11/xdm/xdm-keys
DisplayManager.servers: /etc/X11/xdm/Xservers
DisplayManager.accessFile: /etc/X11/xdm/Xaccess
DisplayManager.willing: su nobody -c /usr/share/X11/xdm/Xwilling
! All displays should use authorization, but we cannot be sure
! X terminals may not be configured that way, so they will require
! individual resource settings.
DisplayManager*authorize: true
DisplayManager._1.authorize: true
! The following three resources set up display :0 as the console.
DisplayManager._0.setup: /usr/share/X11/xdm/Xsetup_0
DisplayManager._0.startup: /usr/share/X11/xdm/Xstartup
DisplayManager._0.reset: /usr/share/X11/xdm/Xreset
DisplayManager._0.startAttempts: 1
DisplayManager*chooser: /usr/share/X11/xdm/chooser
DisplayManager*resources: /etc/X11/xdm/Xresources
DisplayManager*session: /usr/share/X11/xdm/Xsession
DisplayManager*authComplain: false
DisplayManager*authName: MIT-MAGIC-COOKIE-1

! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
DisplayManager.requestPort: 0

Analyse du fichier

DisplayManager.errorLogFile et DisplayManager.pidFile parlent d'eux-mêmes.
DisplayManager.keyFile indique le nom d'un fichier contenant une clé partagée entre xdm et les terminaux X, lorsque le protocole XDM-AUTHENTICATION-1 est utilisé. Par défaut, ce fichier n'existe pas et c'est MIT-MAGIC-COOKIE-1 qui est utilisé.
DisplayManager.servers spécifie, par le fichier /etc/X11/xdm/Xservers, le ou les serveurs X à démarrer (ne nécessitant pas XDMCP, donc locaux ),
DisplayManager.accessFile spécifie, par le fichier /etc/X11/xdm/Xaccess, les postes distants autorisés à accéder au serveur X.
DisplayManager.willing spécifie, le programme à exécuter lorsqu'une requête Broadcast XDMCP est reçue et que cet hôte est configuré pour offrir une gestion d'affichage XDMCP. La sortie de ce programme peut être affichée sur la fenêtre du Sélecteur. Si aucun programme n'est spécifié, la chaîne "Willing to manage" est envoyée.
DisplayManager*authorize, DisplayManager._1.authorize C'est une valeur booléenne qui contrôle si la commande xdm génère et utilise une autorisation pour les connexions sur le serveur local. Si la valeur est true, la commande xdm utilise les mécanismes d'autorisation indiqués par la ressource DisplayManager*authName (une liste, séparée par des espaces). Les connexions XDMCP peuvent spécifier le mécanisme à utiliser et, dans ce cas, la valeur de DisplayManager*authName est ignorée. Par défaut, DisplayManager*authorize est true et DisplayManager*AuthName est = MIT-MAGIC-COOKIE-1.
Remarque : * indique que tous les affichages sont concernés, alors que _1 ne concerne que l'afficheur :1 par exemple.
DisplayManager._0.setup spécifie, par le fichier /usr/share/X11/xdm/Xsetup_0, le programme qui est exécuté (en tant que root) avant d'afficher la fenêtre de login.
DisplayManager._0.startup spécifie, par le fichier /usr/share/X11/xdm/Xstartup, le programme qui est exécuté (en tant que root), après une authentification réussie.
DisplayManager._0.reset spécifie, par le fichier /usr/share/X11/xdm/Xreset, le programme qui est exécuté (en tant que root), à la fin d'une session.
DisplayManager._0.startAttempts spécifie, le comportement de xdm qui tente d'ouvrir des serveurs X.
DisplayManager*chooser spécifie, par le fichier /usr/share/X11/xdm/chooser, le programme qui est exécuté pour afficher un menu aux requêtes XDMCP indirectes.
DisplayManager.resources spécifie, par le fichier /etc/X11/xdm/Xresources, la configuration de la fenêtre de connexion.
DisplayManager*session spécifie, par le fichier /usr/share/X11/xdm/Xsession, les programmes qui sont exécutés (plus en tant que root) à l'ouverture d'une session.
DisplayManager*authComplain n'est actuellement pas utilisé.

Haut

 /etc/X11/xdm/Xservers : XDM gère les serveurs X

Il définit la liste des serveurs X que XDM doit démarrer, avec les attributs nécessaires.
Par défaut, seul un serveur local est démarré. D'autres serveurs locaux sont prédéfinis, mais non démarrés.

Normalement, XDM démarre le(s) serveur(s) X et affiche la fenêtre de connexion (utilisateur et mot de passe).

Certains cas particuliers peuvent être envisagés :

Pour les curieux, survolez : extrait du fichier /etc/X11/xdm/Xservers

# $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $
#
:0 local /usr/bin/X -deferglyphs 16
:1 local reserve /usr/bin/X :1 -deferglyphs 16
:2 local reserve /usr/bin/X :2 -deferglyphs 16
:3 local reserve /usr/bin/X :3 -deferglyphs 16
:4 local reserve /usr/bin/X :4 -deferglyphs 16
:5 local reserve /usr/bin/X :5 -deferglyphs 16

Analyse du fichier

:0 : nom du display.
local : local (serveur X local à démarrer) ou foreign (serveur X distant déjà en marche)
/usr/bin/X : commande à exécuter
-deferglyphs 16 : valide la mise en cache des glyphes (forme des caractères) pour les fontes 16 bits

Haut

 /etc/X11/xdm/Xaccess

Il définit quels hôtes peuvent faire des requêtes à XDM sur cette machine, afin d'obtenir une invite d'authentification.
Cet accès peut être direct (le poste distant accède au serveur X) ou indirect (le poste distant reçoit la liste des serveurs X acceptant un accès grâce à une application chooser).

Par defaut, tous les hôtes locaux peuvent demander leur authentification, aucun poste distant n'est autorisé à un accès direct et tous les postes distants peuvent demander la liste des serveurs permettant un accès.

L'accès à distance ne sera pas abordé ici

Pour les curieux, survolez : extrait du fichier /etc/X11/xdm/Xaccess

# $Xorg: Xaccess,v 1.3 2000/08/17 19:54:17 cpqbld Exp $
# $XFree86: xc/programs/xdm/config/Xaccess,v 1.5 2003/11/22 04:51:03 dawes Exp $
# Pour les requêtes directes : tous peuvent accéder
*
# Pour les requêtes indirectes : tout hôte distant peut accéder au chooser
* CHOOSER BROADCAST #any indirect host can get a chooser

Haut

 /etc/X11/xdm/Xresources

Il permet de configurer l'aspect de la fenêtre de connexion : message d'accueil, police de caractères, dimensions ...
Il serait également possible de définir un papier peint pour la fenêtre de connexion, mais ceci se fait dans le fichier /usr/share/X11/xdm/Xsetup_0.

Haut

 Le déroulement

prefdm et lookupdm ont lancé la commande /usr/bin/xdm

 /usr/bin/xdm

xdm est un fichier compilé. Il est donc difficile de suivre son déroulement. En toute logique, il va lire le fichier principal de configuration.
On peut supposer que les autres exécutables sont lancés dans l'ordre du fichier de configuration, ce qui est confirmé en vérifiant le moment de leur exécution.

 /usr/share/X11/xdm/Xwilling

C'est le programme à exécuter lorsqu'une requête Broadcast XDMCP est reçue et que cet hôte est configuré pour offrir une gestion d'affichage XDMCP. La sortie de ce programme est affichée sur la fenêtre du Sélecteur.

L'accès à distance ne sera pas abordé ici

Pour les curieux, survolez : le fichier /usr/share/X11/xdm/Xwilling

#!/bin/sh
# $XFree86: xc/programs/xdm/config/Xwilling,v 1.1 1998/12/06 06:08:51 dawes Exp $
# The output of this script is displayed in the chooser window.
# (instead of "Willing to manage")
load="`uptime|sed -e 's/^.*load[^0-9]*//'`"
nrusers="`who|cut -c 1-8|sort -u|wc -l|sed 's/^[ ]*//'`"
s=""; [ "$nrusers" != 1 ] && s=s
echo "${nrusers} user${s}, load: ${load}"

Haut

 /usr/share/X11/xdm/Xsetup_0

Ce programme est exécuté (en tant que root) avant d'afficher la fenêtre de login.
Il définit la configuration du clavier, l'activation du pavé numérique, réalise divers scripts, définit le fond d'écran

Pour les curieux, survolez : extrait du fichier /usr/share/X11/xdm/Xsetup_0

#!/bin/sh
# $Id: Xsetup_0,v 1.12 2005/06/12 14:35:57 flepied Exp $
if [ -x /etc/X11/xinit/fixkeyboard ]; then
  /etc/X11/xinit/fixkeyboard
fi
if [ -x /etc/X11/xinit.d/numlock ]; then
  /etc/X11/xinit.d/numlock &
fi
for i in /etc/X11/xsetup.d/*.xsetup ; do
  [ -d $i ] && continue
  if [ -x $i ]; then
    if grep -q "# to be sourced" $i; then
      . $i
    else
      $i &
    fi
  fi
done
if [ -f /usr/share/mga/backgrounds/default.jpg ]; then
  /usr/bin/xloadimage -onroot -fullscreen /usr/share/mga/backgrounds/default.jpg
fi

Analyse du fichier

  • /etc/X11/xinit/fixkeyboard : lors de l'ouverture d'une session X à distance la configuration du clavier doit correspondre à celui de l'affichage distant.
  • /etc/X11/xinit.d/numlock :
    Ce script est exécuté pour activer, si nécessaire, le verrouillage numérique. Il vérifie d'abord que la variable $DISPLAY correspond bien à l'ordinateur local. En d'autres mots, le script vérifie que l'affichage se fait bien sur l'ordinateur local (et donc aussi le clavier).
    Si c'est le cas et si le verrouillage numérique est activé en mode texte (ce qui n'est pas le cas avec un portable), le script active également le verrouillage en mode graphique.
    Ainsi numlock est activé pour saisir le mot de passe.
  • for i in /etc/X11/xsetup.d/*.xsetup ; do : Exécution des scripts du répertoire /etc/X11/xsetup.d. Chez moi :
    - notification de l'utilisation du pilote graphique libre lorsque le pilote propriétaire est demandé, mais n'est pas trouvé.
    - speedboot
  • /usr/bin/xloadimage -onroot -fullscreen /usr/share/mga/backgrounds/default.jpg : permet d'afficher un fond d'écran lors de l'invite de connexion avec XDM.
Haut

 /usr/share/X11/xdm/Xstartup

Ce programme est exécuté (en tant que root) après l'authentification de l'utilisateur.
Le script vérifie si, pour une raison quelconque, la connexion n'est pas interdite et un message est alors délivré à l'utilisateur.
Ensuite, il donne les droits de l'utilisateur à /dev/console.
Pour terminer, il enregistre la session dans les fichiers /var/log/wtmp et /var/run/utmp. Ces fichiers conservent une trace de toutes les connexions et déconnexions.

Pour les curieux, survolez : le fichier /usr/share/X11/xdm/Xstartup

#!/bin/sh
if [ -f /etc/nologin ]; then
  xmessage -file /etc/nologin -timeout 30 -center
  exit 1
fi
/usr/share/X11/xdm/GiveConsole
# sessreg uses the parent pid, so we have to exec it
exec /usr/bin/sessreg -a -w "/var/log/wtmp" -u "/var/run/utmp" -x "/etc/X11/xdm/Xservers" -l $DISPLAY -h "" $USER

Analyse du fichier

  • /etc/nologin : Pour des raisons de maintenance, par exemple, l'administrateur système peut bloquer la connexion des utilisateurs et peut les avertir par un message.
  • GiveConsole : petit script qui confère la propriété du fichier "/dev/console" à l'utilisateur pour celui-ci puisse voir les messages envoyés.
  • sessreg : gérer les entrées utmp / wtmp pour les clients. Ces fichiers gardent une trace de toutes les connexions et déconnexions au système.
Haut

 /usr/share/X11/xdm/Xsession

Ce fichier exécute simplement le fichier /etc/X11/Xsession
/usr/share/X11/xdm/Xsession contient la ligne
exec /etc/X11/Xsession $*
Remarque : $* réprésente les arguments éventuels. Il n'y en a pas ici.

 /etc/X11/xdm/Xsession

Il est aussi bien utilisé par la commande startx que par les gestionnaires de connexion.

Ce script ouvre une session graphique correspondant aux éventuels paramètres spécifiés lors de la commande. Par défaut, aucun paramètre n'est spécifié.
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é

Systemd a déjà initialisé le système XWindow. Il lance xdm.
XDM gère la connexion sur les terminaux X, ceux-ci pouvant être locaux ou à distance.
(En effet, par l'intermédiaire du protocole XDMCP, XDM permet de se connecter à des serveurs X distants et XDM permet à des serveurs X distants de se connecter à cette machine.)
Par défaut XDM est configuré pour le serveur X local, avec un terminal X.

Les principales étapes de XDM, en utilisation locale, sont :

/usr/bin/xdm

xdm est un fichier compilé. Il lit son fichier de configuration /etc/X11/xdm/xdm-config

Xsetup_0

définit et affiche l'écran de connexion

Xstartup

vérifie l'authentification de l'utilisateur

/usr/share/X11/xdm/Xsession

exécute simplement le fichier /etc/X11/Xsession, sans argument

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

La définition du bureau à ouvrir suit une règle bien définie.
Aucun argument n'étant donné, le bureau est recherché, dans l'ordre suivant :

  1. celui de votre fichier ~/.desktop, s'il existe,
  2. à défaut, celui du fichier /etc/sysconfig/desktop, s'il y est défini,
  3. à défaut, le premier du répertoire /etc/X11/wmsession.d
Haut