# Login unter X11 - X Display Manager (xdm)

Der `xdm`-Dämon stellt dem Nutzer ein grafisches Login zur Verfügung. Nach erfolgreicher Installation und Konfiguration der X-Servers (z.B. Runlevel 3, Einstellung in `/etc/inittab`) sollte auf SuSE-Systemen der in folgender Abbildung dargestellte Login-Bildschirm starten.

Die Konfigurationsdateien des `xdm` befinden sich im selben Verzeichnis wie die der Windowmanager (z.B. `/usr/X11R6/lib/X11/xdm` bei SuSE, `/etc/X11/xdm` bei RedHat-basierenden Systemen). Die Möglichkeiten zur Konfiguration des `xdm` sind sehr komplex, immerhin ist er neben dem Management des lokalen Logins auch in der Lage, die Anmeldevorgänge auf entfernten Terminals zu steuern. An dieser Stelle betrachten wir deshalb nur elementare Schritte, um die Optik des Startbildschirms etwas aufzufrischen.

Die zentrale Konfigurationsdatei ist `xdm-config`, die hier vorgestellt sei:

`! $XConsortium: xdm-conf.cpp /main/3 1996/01/15 15:17:26 gildea $ DisplayManager.errorLogFile: /var/log/xdm.errors DisplayManager.pidFile: /var/run/xdm.pid DisplayManager.keyFile: /var/lib/xdm/xdm-keys DisplayManager.authDir: /var/lib/xdm DisplayManager.servers: /usr/X11R6/lib/X11/xdm/Xservers DisplayManager.accessFile: /usr/X11R6/lib/X11/xdm/Xaccess ! All displays should use authorization, but we cannot be sure ! X terminals will be configured that way, so by default ! use authorization only for local displays :0, :1, etc. DisplayManager._0.authorize: true DisplayManager._1.authorize: true DisplayManager.*.authName: -MAGIC-COOKIE-1 ! The following three resources set up display :0 as the console. DisplayManager._0.setup: /usr/X11R6/lib/X11/xdm/Xsetup_0 DisplayManager._0.startup: /usr/X11R6/lib/X11/xdm/GiveConsole DisplayManager._0.reset: /usr/X11R6/lib/X11/xdm/TakeConsole DisplayManager._0.terminateServer: true ! DisplayManager*resources: /usr/X11R6/lib/X11/xdm/Xresources DisplayManager*session: /usr/X11R6/lib/X11/xdm/Xsession DisplayManager*authComplain: false DisplayManager*systemPath: /usr/local/bin:/usr/bin:/bin: /usr/X11R6/bin:/usrDisplayManager*userPath: /usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr !! !! Handle all other local or remote sessions. !! !! Note: If you want your own special entries you have to use the !! full qualified name of the specific host where the dots !! and colon are replaced by underscores. E.g. DISPLAY !! xterminal01.domain.de:0 is here xterminal01_domain_de_0 !! DisplayManager.*.setup: /usr/X11R6/lib/X11/xdm/Xsetup_default DisplayManager.*.startup: /usr/X11R6/lib/X11/xdm/LogOn DisplayManager.*.reset: /usr/X11R6/lib/X11/xdm/LogOff DisplayManager.*.chooser: /usr/X11R6/lib/X11/xdm/RunChooser DisplayManager.*.terminateServer: false !!`

Vereinfacht ausgedrückt, findet in dieser Datei eine Beschreibung statt, welche Datei / welches Skript für welche Eigenschaft des `xdm` verantwortlich ist. Wir betrachten des Weiteren nur eine Auswahl:

- `DisplayManager.errorLogFile` Ist diese Resource nicht gesetzt, schreibt der `xdm` seine Fehlermeldungen auf die Konsole.
- `DisplayManager.servers` Meist wird zu einer Zeit nur ein X-Server auf dem Rechner aktiv sein (auf jeden Fall stellt nur ein Server seine Ausgaben auf dem lokalen Bildschirm dar). Stellt der lokale Rechner aber die Ressourcen für andere Terminals bereit, so muss eine Zuordnung zwischen Server und Display (unter Display versteht man eine Kollektion aus Monitor und Tastatur/Maus...) getroffen werden.

  `# Ausschnitt aus einer XServer-Datei # Aufbau einer Zeile für einen lokalen Server :0 local /usr/X11R6/bin/X :0 vt07`

  Im Beispiel steht die erste `:0` für den Namen des Displays, die zweite `:0` betrifft den "Screen" (z.B. zur Ansteuerung eines zweiten Monitors). `vt07` ordnet dem Server die 7. Konsole zu. Ist das Display nicht lokal, muss das Schlüsselwort `local` durch `foreign` ersetzt werden.
- `DisplayManager.accessFile` Hier sind die Rechner aufgeführt, denen direkter Zugriff auf einen X-Server des lokalen Rechners gestattet ist. Wer mit einer neueren SuSE-Version arbeitet und die Verbindung zum X-Server von anderen Rechnern aus zulassen möchte, der muss diese Datei unbedingt editieren (Ein einzelner Stern `*` auf einer Zeile gestattet allen Rechnern den Zugriff).
- `DisplayManager*resources` Die hier spezifizierte Datei bestimmt das generelle Aussehen des Anmeldebildschirms. Der `*` bedeutet hier, dass diese Datei für alle Displays gilt.
- `DisplayManager._0.setup` Falls gesetzt, wird das zugehörige Skript vor dem Start des Anmeldebildschirms ausgeführt. `._0.` besagt, dass diese Datei nur das Display `:0` betrifft.

Zum Ende dieses Abschnittes möchte ich noch kurz die Konfigurationsmöglichkeiten andeuten, indem ich sowohl den Hintergrund als auch die Ausschriften des Anmeldebildschirms verändere.

1. Anstelle des SuSE-Logos bevorzuge ich als Hintergrund einen transparenten Pinguin. Das Hintergrundbild `tux.xpm` wird im `xpm`-Format ins Verzeichnis des `xdm` (`/usr/X11R6/lib/X11/xdm`) abgelegt und die Datei `Xsetup_0` angepasst. Außerdem möchte ich auf die X-Konsole verzichten.

   `#!/bin/sh # # Xsetup_0: Handle the local system console. # # Stark gekürzte Datei # LIBDIR=/usr/X11R6/lib/X11 XDMDIR=${LIBDIR}/xdm BINDIR=/usr/X11R6/bin # hier wird das Hintergrundbild angepasst # # background=${XDMDIR}/BackGround.xpm background=${XDMDIR}/tux.xpm # Die X-Konsole wird auskommentiert # #exec $xconsole -geometry 480x130-0-0 \ # -daemon -notify -nostdin -verbose -exitOnFail #$xmessage -timeout 10 -default okay -center "$0: $xconsole failed." exit 1`

2. Der Anmeldetext soll in deutscher Sprache und mit einer anderen Farbe dargestellt werden. Derartige Einstellungen lassen sich in der Datei `Xresources` treffen.

   `! $XConsortium: Xresources /main/8 1996/11/11 09:24:46 swick $ !! xlogin*login.translations: #override\ !! Oft wird X so konfiguriert, dass es mit <CTRL><ALT><Backspace> !! beendet werden kann. Durch streichen der nächsten Zeile kann dieses !! Verhalten verhindert werden Ctrl<Key>R: abort-display()\n\ <Key>F1: set-session-argument(failsafe) finish-field()\n\ Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\ <Key>Return: set-session-argument() finish-field() !! Hier folgen die optischen Einstellungen xlogin*borderWidth: 4 !! Anzeigetext, der als Überschrift erscheint xlogin*greeting: Willkommen auf CLIENTHOST !! Was soll als Login-Prompt erscheinen xlogin*namePrompt: Anmeldung:\040 xlogin*passwordPrompt: Passwort:\040 !! Was bei einem fehlgeschlagenem Anmeldeversuch xlogin*fail: Anmeldung fehlgeschlagen !! Mit welchen Schriften sollen Ausgaben dargestellt werden xlogin*login.failFont: *-new century schoolbook-bold-r-normal-*-180-* xlogin*login.greetFont: *-new century schoolbook-bold-i-normal-*-240-* xlogin*login.promptFont: *-new century schoolbook-bold-r-normal-*-180-* xlogin*login.Font: *-new century schoolbook-medium-r-normal-*-180-* #ifdef COLOR !! blaue Schrift xlogin*greetColor: #0000b6 xlogin*failColor: red *Foreground: black !! Goldener Hintergrund *Background: #ffd700 #else xlogin*Foreground: black xlogin*Background: white #endif # gekürzt!!!`

Das neue Erscheinungsbild des Anmeldebildschirms zeigt die folgende Abbildung.