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 (Mageia 1)

Historique

2 août 2011 : Création de cette page.

Difficulté

Pour : linuxien averti.

 Introduction

Vous avez pu voir, dans la page précédente Cliquez, le début du démarrage graphique de Mageia Linux, avec le processus de détermination du gestionnaire graphique 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 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.

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, 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 de choix de bureau, mais il est très complet.

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.

Haut

 Les fichiers de configuration

La configuration se fait en éditant quelques fichiers texte.

 /etc/X11/xdm/xdm-config

Il définit quelques paramètres ainsi que les autres fichiers de configuration.

Si vous devez modifier des fichiers de configuration, il est plus prudent de faire une copie de ces fichiers, en les renommant autrement, et en modifiant uniquement le nom dans le fichier xdm-config.

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 ), et comment les démarrer. (par défaut : un serveur sur vt7)
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 vt7 -deferglyphs 16 -nolisten tcp
:1 local reserve /usr/bin/X :1 vt8 -deferglyphs 16 -nolisten tcp
:2 local reserve /usr/bin/X :2 vt9 -deferglyphs 16 -nolisten tcp
:3 local reserve /usr/bin/X :3 vt10 -deferglyphs 16 -nolisten tcp
:4 local reserve /usr/bin/X :4 vt11 -deferglyphs 16 -nolisten tcp
:5 local reserve /usr/bin/X :5 vt12 -deferglyphs 16 -nolisten tcp

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
vt7 : X tournera sur la console virtuelle 7
-deferglyphs 16 : valide la mise en cache des glyphes (forme des caractères) pour les fontes 16 bits
-nolisten tcp : le serveur n'écoute pas sur le port tcp

Démarrer le serveur X, sans demander l'authentification Travaux

Si l'utilisateur doit se connecter sur cette machine uniquement à partir d'un poste distant, XDM n'a pas besoin d'afficher la fenêtre de connexion.
/usr/bin/X -ac

Ouvrir une fenêtre de connexion sur un poste distant où le serveur X est déjà démarré. Travaux

nom_machine_distante:0 foreign

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

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

Haut

 /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.
On peut noter que KDM utilise également ce script, ce qui explique la présence d'éléments relatifs à KDE.

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

if [ -f /etc/profile.d/kde.sh ];then
  . /etc/profile.d/kde3.sh
fi
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
# Completed by Paiiou <paiiou@free.fr>
if [ -r /usr/share/mga/backgrounds/default.jpg -a -x /usr/bin/qiv -a -f /var/run/xdm.pid ]; then
  /usr/bin/qiv -x /usr/share/mga/backgrounds/default.jpg
fi

Analyse du fichier

  • /etc/profile.d/kde.sh n'existe pas chez moi; aucune action n'est donc exécutée
    /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/qiv -x /usr/share/mga/backgrounds/default.jpg : permet d'afficher un fond d'écran lors de l'invite de connexion avec XDM. Il faut que qiv soit installé.
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'utilisateurs à /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

 /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 est é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. Le paquetage qiv doit être installé.

 /usr/share/X11/xdm/Xsession

Ce fichier exécute simplement le fichier /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, aucun paramètre n'est spécifié.
Voici, en résumé, le processus :

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
* journal de session : création ou vidage de $HOME/.xsession-errors
* fond d'écran : rouge, si c'est root qui se connecte
* forme du curseur : sablier
* libère la mémoire, après xbanner
* ajoute éventuellement les ressources X de l'utilisateur (icônes ...) aux ressources système
* configuration du clavier si la session est ouverte par le réseau, il faut vérifier si le clavier distant est correctement configuré
* définition du fichier d'initialisation de console-kit (suivi des utilisateurs, des sessions ...)
* définition du fichier de lancement du navigateur internet (/usr/bin/www-browser)
* définition du bureau : celui donné en argument, sinon celui du fichier $HOME/.desktop, sinon celui du fichier /etc/sysconfig/desktop (pour moi, xfce4)
* 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
  - gpg-agent : GPG permet de transmettre des messages signés et/ou chiffrés.
gpg-agent stocke temporairement le mot de passe ou la phrase, de sorte que vous ne devrez les taper qu'une seule fois pour une session.
  - 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
  - Mod_Meta_L_Disable :_retire l' identifiant MOD_META_L, principalement pour xemacs
  - msec : exécute /usr/bin/xhost + localhost (autorise l'ouverture de fenêtres depuis localhost)
  - 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 (Bureau, Documents ...)
  - 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
  le bureau est défini : lancement de ce bureau
  le bureau est 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

 Finalité

Le processus init a déjà initialisé le système XWindow. Il lance le démon 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 :

Haut