HomeMapIndexSearchNewsArchivesLinksAbout LF
[Top Bar]
[Bottom Bar]

von:Joel McCarty

Inhalt:

  1. Einleitung
  2. Warum xdm?
  3. Konfiguration
  4. Benutzung von xdm

Der X Display Manager

Zusammenfassung: Der X Display Manager läuft als ein Hintergrundprozeß und managed mehrere X-Display Verbindungen zu lokalen oder zu entfernten Rechnern. Er stellt einfaches Session Management zur Verfügung.


Einleitung

Der Schwerpunkt dieses Artikels liegt auf dem Einrichten und der Benutzung des X Display Managers xdm. Der X Display Manager läuft als "Daemon" auf einem Host und stellt einfache Dienste für mehrere X Displays (lokal oder auf einer anderen Maschine) zur Verfügung, analog zu init(8), getty(1) and login(1) auf ASCII-Terminals. Ausserdem räumt xdm Displays auf, auf denen der X Server nicht mehr läuft. Eine der besten Eigenschaften von xdm ist, daß er Authentisierungsinformationen erzeugt, die vom Display Server zur Zugangssteuerung auf einer per-Host oder per-Account Basis genutzt werden können. Die Möglichkeit, X Sessions mit einer Standardauthentisierung zu starten, macht xdm ideal für Situationen, in denen eine einzelne Maschine mehrere Benutzer bedient, die jeder individuell eingerichtete X Sessions verwenden.

Umfang dieses Artikels

Zwar spricht dieser Artikel die Authentisierung mit xdm kurz an, die Systemsicherheit unter dem X Window System wird jedoch das Thema eines detailierteren Artikels im nächsten Monat sein.
Möchten Sie lediglich die Verwendung von xdm auf einem isolierten System verstehen, so können Sie den Abschnitt über XDMCP überspringen. In diesem Fall reicht sehr wahrscheinlich das in den meisten Distributionen enthaltene, voreingestellte Setup für xdm aus. Es genügt dann wohl, nur die Abschnitte zur Konfiguration und Benutzung von xdm zu lesen, da der Rest des Artikels sich hauptsächlich mit Netzwerkumgebungen und X Terminals beschäftigt.
Wer an vollständigen "Kochrezepten" zur Einstellung von X Terminal Umgebungen interessiert ist, sollte sich "The X Window System Administrators Guide" von O' Reilly & Associates besorgen, das die Details der Verwaltung von X Terminals erläutert, die über den Inhalt dieses Artikels hinausgehen.

Sitzungen unter X

Für traditionelle TTY's (z.B. ASCII Terminals) ist eine Sitzung (session) die Anwender-Login-Shell; eine Sitzung unter xdm wird von einem beliebigen session manager verwaltet, da die Anwender- Login-Shell in einem Fenstersystem nicht unbedingt eine Terminalschnittstelle zur Verfügung stellt. Beim X Window System wird ein Windowmanager zur Verwaltung von Sitzungen verwendet. Verläßt die/der AnwenderIn den Windowmanager, so endet damit auch die Anwender-Sitzung.

Grundlegende Konzepte von xdm

Xdm ist ein Xclient, der die Start- und Endpunkte von Verbindungen verwaltet und Sitzungen kontrolliert und koordiniert. Xdm verfolgt, welche X Server für Verbindungen zur Verfügung stehen, indem es die Xserver Datei liest und auf dem XDMCP Port Verbindungswünsche anderer Server bedient. Sobald die Verwaltung eines X Servers an xdm übergeben wird, sendet xdm einen Login-Bildschirm an den Server und wartet auf Anwendereingaben. Die Eingabe eines Benutzernamens und eines Paßworts werden genau wie bei gewöhnlichen TTY Logins authentisiert. Xdm führt nach erfolgreicher Authentisierung eine Reihe von Shellskripten aus, welche die vom/von der AnwenderIn gewünschten Xclients starten. Diese(r) befindet sich jetzt in einer ganz normalen X Sitzung; wenn sie/er diese X Sitzung per Logout verläßt, reagiert xdm, indem es alle noch offenen Verbindungen schließt und das Terminal in den Loginzustand bringt, so daß es bereit ist, eine neue Sitzung zu beginnen.

Warum xdm ?

Abgesehen von seinen Sicherheitsfunktionen, Möglichkeiten des Fernzugriffs und Fragen der Bequemlichkeit, wird xinit vom X Consortium ( inzwischen The Open Group ) für überflüssig gehalten, da ja eine Vielzahl neuen Funktionen in xdm integriert wurde. Mit xdm kann der Administrator die Anwender-Umgebungen systemweit konfigurieren. Auch stellt xdm den einzigen Weg (den ich kenne) dar, wie mehrere Anwender einen Rechner nutzen können, ohne daß der X Server für jeden User beendet und neu gestartet zu werden braucht oder daß die AnwenderInnen gezwungen wären, alle die gleichen Desktopeinstellungen zu verwenden.

Konfiguration

Xdm läßt sich mit gewöhnlichen ASCII-Textdateien konfigurieren. Globale Einstellungen stehen traditionell in /usr/lib/X11/xdm oder /etc/xdm, lokale Einstellungen finden sich hingegen im Home-Directory der betreffenden AnwenderInnen (wo sonst ?). Beachten Sie bitte, daß die Datei xdm-config andere Verzeichnisse für alle anderen Dateien festlegen kann; das Verzeichnis, in dem sich xdm-config befindet, kann xdm explizit mit dem -config Parameter mitgeteilt werden, so daß Systeme mit einer festen xdm­Einstellung leicht für Testzwecke verändert werden können. Es folgen kurze Beschreibungen einer jeden Datei und (wo nötig) ein kommentiertes Beispiel.

Globale Dateien

xdm-config

Diese Datei gibt an, wo all die anderen Konfigurationsdateien zu finden sind (falls andere als die Defaulteinstellungen verwendet werden sollen) und enthält Befehle, um xdm einzustellen, zu starten, und zurückzusetzen. Das folgende Beispiel setzt den Pfad für alle weiteren Dateien auf /etc/X11/xdm, so daß die Standarddateien in /usr/lib/X11/xdm nicht verändert werden müssen.

DisplayManager.errorLogFile: /var/log/xdm-error.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._0.authorize: true
DisplayManager._1.authorize: true
DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0
DisplayManager._0.startup: /etc/X11/xdm/GiveConsole
DisplayManager._0.reset: /etc/X11/xdm/TakeConsole
DisplayManager*resources: /etc/X11/xdm/Xresources
DisplayManager*session: /etc/X11/xdm/Xsession
DisplayManager*authComplain: false

Xservers

Eine Liste von Servern, die von xdm bedient werden sollen. Diese Datei sollte mindestens den lokalen Displayserver enthalten. WICHTIG: Während xdm läuft, wird diese Datei nur dann neu gelesen, wenn eine Session beendet wurde oder wenn xdm ein SIGHUP­Signal erhält. Ein SIGHUP­Signal kann mittels kill an xdm gesendet werden:

# ps -a | grep xdm

2639 ? R 0:09 /usr/bin/X11/xdm

# kill -9 2639

Hier ist ein Beispiel einer Xservers­Datei, die für einen einzelnen Rechner verwendet werden kann:

# Die erste Zeile sollte das
# lokale Display enthalten.

:0 local /usr/X11R6/bin/X
# :0 bezeichnet die Konsole.
# local besagt, daß der X Server auf
# dem lokalen /usr/X11R6/bin/X Programm
# läuft, daß zuvor gestartet wurde.

# Die Syntax für X Terminals weicht hiervon
# etwas ab, da diese Ihren X Server
# auf einem anderen Rechner starten.
# Geben Sie nur dann X Terminals an,
# falls diese NICHT das XDMCP unterstützen.

eng1:0 foreign NCD xterminal
# eng1 ist der Name des Terminals.
# :0 ist das vom Terminal
# zu verwendende Display.
# foreign zeigt an, daß der X Server auf
# einem anderen Rechner läuft.
# NCD xterminal sind Merkmale der
# speziellen Displayklasse dieses Terminals
# und nicht unbedingt erforderlich.

eng2:0 foreign NCD xterminal
eng3:0 foreign Visual xterminal

Xsession

Initiales Start Skript, bei jeder X Session benötigt.

#!/bin/sh
# Der folgende Abschnitt ermöglicht das
# geschützte Anmelden (failsafe logon).
# AnwenderInnen können dann über
# <CTRL><RETURN> nach Eingabe
# des Passwortes den geschützten
# Modus aktivieren.
case $# in
1)
case $1 in
failsafe)
exec xterm -geometry 80x24-0-0
;;
esac
esac
# Umleiten der Fehlermeldungen in eine
# Datei im jeweiligen home directory.
for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER"
do
if ( cp /dev/null "$errfile" 2> /dev/null )
then
chmod 600 "$errfile"
exec > "$errfile" 2>&1
break
fi
done
# Falls der/die AnwenderIn lokale
# .xsession und .Xresources Dateien hat,
# sollen diese verwendet werden.
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ -x "$startup" ]; then
exec "$startup"
elif [ -x "$HOME/.Xclients" ]; then
exec "$HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
exec /etc/X11/xinit/Xclients
else
if [ -f "$resources" ]; then
xrdb -load "$resources"
fi
exec xsm
fi
Xresources

Gibt für alle von xdm verwalteten Server an, welche Ressourcen jeweils zu laden sind.

# key settings to be used by Xlogin widget 
xlogin*login.translations: #override\
# Ctrl R stops xdm from managing display 
Ctrl<Key>R: abort-display()\n\
# F1 or Ctrl Return run a failsafe session
# consisting of a single xterm window
<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()
# display settings for Xlogin widget
# to be displayed by xdm
xlogin*borderWidth: 3
xlogin*greeting: CLIENTHOST
xlogin*namePrompt: login:\040
xlogin*fail: Sorry Try Again
#ifdef COLOR
xlogin*greetColor: CadetBlue
xlogin*failColor: red
*Foreground: black
*Background: #fffff0
#else
xlogin*Foreground: black
xlogin*Background: white
#endif
# settings for xconsole client which is
# used when xdm connection on local server
# is initialized. This keeps console messages
# sent between logins from going everywhere
# across the screen
XConsole.text.geometry: 480x130
XConsole.verbose: true
XConsole*iconic: true
XConsole*font: fixed
Chooser*geometry: 700x500+300+200
Chooser*allowShellResize: false
Chooser*viewport.forceBars: true
Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-*
Chooser*label.label: XDMCP Host Menu from CLIENTHOST
Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1
Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-*
xdm-pid

Diese Datei enthällt die Prozess-Id von xdm. Sie dürfen sie zu Informationszwecken lesen, jedoch keinesfalls verändern.

xdm-errors

In dieser Datei werden die Fehlerprotokolle von xdm abgelegt.

Xaccess

Hier können Sie den Zugriff auf XDMCP (ab X11R5) einrichten, womit lediglich Zugriffsrechte für XDMCP Abfragen geregelt werden. Weiterhin können Sie hier Makros definieren, um zusammengehörige Server in logische Gruppen zusammenzufassen. Zum Einrichten der Server Zugriffskontrolle verwenden Sie bitte die Resourcen Gruppe DisplayManager*authorize in der xdm-config Datei. Weitere Informationen zum XDMCP Setup und Beispiele folgen unten im CHOOSER Abschnitt.

GiveConsole

Ein Shell Skript, um die/den AnwenderIn zum "Owner" der Konsole zu machen. Falls Sie keine sehr guten Gründe dafür haben, lassen Sie bitte die Finger davon und verwenden die Konsolen Skripts mit den unten aufgeführten Standard Einstellungen.

#!/bin/sh
# Assign ownership of the console to
# the invoking user.
# $XConsortium: GiveConsole,v 1.2
# 93/09/28 14:29:20 gildea Exp $
#
# By convention, both xconsole and xterm -C
# check that the console is owned by the
# invoking user and is readable before
# attaching the console output. This way
# a random user can invoke xterm -C without
# causing serious grief.
#
chown $USER /dev/console
Take Console

Ein Shell Skript daß den SuperUser (Root) wieder zum "Owner" der Konsole macht (ab X11R5). Bitte lassen Sie auch hier wieder alles so, wie es original eingestellt ist.

#!/bin/sh
# Reassign ownership of the console to root,
# this should disallow assignment of console
# output to any random users's xterm.
# $XConsortium: TakeConsole,v 1.2
# 93/09/28 14:30:29
#
chmod 622 /dev/console
chown root /dev/console
Xsetup_0 

Ein Shell Skript zur Anzeige des Servers dieser lokalen Konsole (ab X11R5). Blendet die xconsole ein, ein Terminalfenster, das die beim Login erzeugten Systemmeldungen anzeigt.

#!/bin/sh
# $XConsortium: Xsetup_0,v 1.3 93/09/28 14:30:31 
/usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail 
 

Lokale Dateien

~/.xsession

Anwenderspezifisches Start Skript, das vom globalen Xsession Skript aufgerufen wird. Anders als ~/.xinitrc kann dieses in jeder Shell geschrieben werden (~/.xinitrc muss ein Bourne oder Bash Shellskript sein).

~/.Xresources

Anwenderspezifische Ressourcen, wird vom globalen Xsession Skript gelesen.

~/.xsession-errors

Je eine eigene Fehlerprotokolldatei für X Sessions pro AnwenderIn.

~/.Xauthority

Enthält Authorisierungs-Informationen für den Server der AnwenderIn.

XDMCP 

Das "X Display Manager Control Protocol" wurde mit X11 Rel. 4 eingeführt, um verschiedene Probleme zwischen xdm und X Terminals zu lösen. Vor XDMCP konnte xdm sich nur dadurch über die zu verwaltenden Server informieren, daß es die Datei Xservers einlas. Da die Xservers Datei aber nur beim Start von xdm gelesen wird, entstanden Probleme, wenn X Terminals aus und später wieder ein geschaltet wurden. Grundsätzlich musste jedesmal, wenn ein X Terminal erneut eingeschaltet wurde, ein System-Administrator das xdm Programm veranlassen um die Datei Xservers nochmals zu lesen. Dazu sendete er über xdm's Prozess Id diesem ein SIGHUP signal.

XDMCP erlaubt es Servern, xdm anzusprechen, ohne daß dieses vorher Kenntniss von diesem Server haben muß. Unter XDMCP horcht der "host" am XDMCP Port auf Anfragen (in irgendeinem der drei unterstützten Kommunikations-Modi). Empfängt es eine Verwaltungsanfrage, so produziert es eine Kopie seiner selbst und überträgt den Login Bildschirm zum Terminal.

Kommunikations-Modi

XDMCP erlaubt drei verschiedene Arten der Kommunikation mit Servern, die sich zur Verwaltung anmelden möchten und nicht explizit in der Xservers Datei eingetragen sind. Es sind die Methoden DIRECT, INDIRECT, und BROADCAST.

Im DIRECT Modus richtet ein Server eine allgemeine Bitte um Verwaltung ans gesamte Netzwerk. Der erste xdm Prozess, der auf eine DIRECT Anfrage antwortet, wird damit zum Manager des betreffenden Servers. Eine INDIRECT Anfrage bewirkt, daß das X Terminal eine Auswahlbox erhält, in welcher alle anschlussbereiten Hosts aufgelistet sind, so daß die/der AnwenderIn entscheiden kann, welcher Host die Verwaltung übernehmen soll. Der INDIRECT Modus ist besonders in einer Umgebung mit mehreren Hosts von Nutzen. Um den INDIRECT Modus einzurichten, verwenden Sie bitte das Schlüsselwort CHOOSER, wenn Sie in der Datei Xaccess die Ressourcen eintragen. Sie erhalten die Auswahlbox ("chooser") aber auch dann, wenn Sie den BROADCAST Modus in Verbindung mit der CHOOSER Resource verwenden. Dies sendet dann eine Rundruf Meldung ("broadcast message") an alle Hosts im gesamten Netzwerk und erlaubt dem Anwender einen von ihnen auszuwählen.

Auswahlbox ("Chooser")

Zur Verwendung von X Terminals, die nach dem Einschalten keine Host-Auswahl anbieten, dient das Programm chooser in Verbindung mit dem BROADCAST oder dem INDIRECT Modus. Um das chooser Programm zu aktivieren, tragen Sie bitte CHOOSER als ersten Eintrag in die sog. "indirect host list" der Datei Xaccess ein.

Der Befehl
tech*.odhs.dsd.com CHOOSER BROADCAST

stellt für alle Technikerterminals auf odhs.dsd.com, eine Auswahlbox mit allen im Netz zur Verfügung stehenden Hosts bereit. Wahrscheinlicher wäre es wohl, allen Terminals der Technik-Abteilung eine Liste genau der Hosts anbieten zu wollen, an die sie sich auch tatsächlich anmelden dürfen. Dies läßt sich besser über den INDIRECT Modus erreichen:

tech*.odhs.dsd.com CHOOSER dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com test.odhs.dsd.com

Obige Einstellung würde allen Terminals der Technik-Abteilung über ein Auswahlmenü Zugriff auf die Anwendungs-, Datenbank- und Test-Server geben.

Die Xaccess Datei erlaubt es Ihnen ebenfalls, Makros zu definieren, um zusammengehörige Server in logische Gruppen zusammenzufassen. Folgendes Beispiel verwendet ein Makro mit den oben verwendeten Einstellungen für die Technik-Abteilung:

%TECHHOSTS dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com test.odhs.dsd.com

tech*.odhs.dsd.com CHOOSER %TECHHOSTS

Die Anzeigeoptionen des choosers können eingestellt werden, indem seine Standardparameter in der/den Xresources Datei(en) abgeändert werden.

Benutzung von xdm

Um Ihre xdm Einstellungen ohne einen Systemneustart auszuprobieren, geben Sie bitte auf der Textkonsole folgenden Befehl ein:

$ init 5

Dieses Kommando versetzt das System in den "run level 5". Xdm ist für gewöhnlich so vorkonfiguriert, daß es automatisch startet, wenn das System den Level 5 betritt. Sollte xdm beim Umschalten auf Level 5 nicht starten, werfen Sie bitte einen Blick in die Datei /etc/inittab. Dort erkennen Sie, welcher Run Level auf Ihrem System xdm startet. ( Slackware Distributionen verwenden manchmal Level 4 für xdm, aber die meisten anderen Distributionen, die ich verwendet habe, bleiben doch eher bei Level 5). Jetzt sollten Sie das xlogin Fenster sehen, das nach User-Name und Passwort fragt. Loggen Sie sich ein und überprüfen Sie Ihre verschiedenen Einstellungen. Falls Sie sicher sind, auf dem richtigen Run Level zu sein und xdm verhält sich immer noch nicht wie erwartet, so überfliegen Sie bitte den unten folgenden Abschnitt zur Fehlersuche. Ansonsten können Sie von hier aus die individuellen Einstellungen verbiegen (siehe unten). Sobald Sie xdm konfiguriert haben, können Sie die Datei /etc/initab abändern, um den Standard Run Level für den System-Neustart auf 5 (bzw. den für Ihr System passenden Wert) umzusetzen. Auf meiner Maschine genügt es, hierfür folgende Zeile zu ändern:

#/etc/inittab

id:3:initdefault:

wird zu

id:5:initdefault: 

Dies startet Linux standardmäßig im Run Level 5, was bewirkt, daß xdm jedesmal automatisch startet, wenn das System hochfährt.

Fehlersuche bei xdm

Falls xdm nicht wie erwartet funktioniert, sollten Sie zuerst in der Datei ~/.xsession-errors nachschauen. Dieses lokale Fehlerprotokoll enthällt die nur für Ihr Konto erzeugten Fehlermeldungen und ist deshalb aussagekräftiger als die Systemprotokolle. Im folgenden erläutere ich einige der Klippen und zeige mögliche Lösungsvorschläge.

Login Box erscheint nicht auf dem Bildschirm

Höchstwahrscheinlich fehlerhafte Konfigurationsdateien, Sie werden dies doch sicherlich überprüfen, bevor Sie den Standard Run Level auf 5 umstellen, oder?

Erfolgreiche Anmeldung, aber wiederkehrende Login Box

Möglicherweise läßt sich Ihre .xsession Datei nicht ausführen. Versuchen Sie sich erneut anzumelden, pressen aber diesmal CTRL-RETURN nach dem Passwort anstatt Enter. So überspringen Sie das .xsession Skript und erhalten ein kleines Terminalfenster, in dem Sie bitte folgenden Befehl abschicken:

# chmod +x .xsession

Versuchen Sie nun nochmals sich anzumelden.

Nach dem anmelden flackert der Bildschirm und die Login Box taucht wieder auf

Verwenden Sie die oben beschriebene Methode, um die Datei .xsession während des Logins zu überspringen und vergewissern Sie sich, daß das letzte Kommando in Ihrer .xsession Datei im Vordergrund startet.


 
 

Schlussbemerkung

Ich hoffe, daß Sie dieser Artikel von den Möglichkeiten und der Erweiterbarkeit des X Display Managers überzeugt hat. Weitere und ausführlichere Informationen über xdm können Sie durch die untenstehenden Links erhalten. Wir werden uns in der nächsten Ausgabe mit der oft übersehenen und vernachlässigten Sicherheit unter X Windows beschäftigen. Fragen und Kommentare senden Sie bitte (in Englisch) an jmccarty@theshop.net.

weiterführende Information:

Webpages maintained by Miguel Ángel Sepúlveda
© Joel McCarty 1998
Übersetzt von:Karl-Heinz Zimmer und Wolfgang Bornath
LinuxFocus 1998