# 1.110.2

# Einrichten eines Display Managers

Beschreibung: Prüfungskandidaten sollten in der Lage sein, einen Display Manager einzurichten und anzupassen. Dieses Lernziel beinhaltet das Aktivieren und Deaktivieren des Display Managers und das Ändern der Willkommensmeldung. Ebenfalls enthalten ist das Ändern der voreingestellten Bitplanes des Display Managers. Weiters enthalten ist die Konfiguration des Display Managers für die Verwendung auf X-Stationen. Das Lernziel deckt die Display Manager XDM (X Display Manager), GDM (Gnomde Display Manager) und KDM (KDE Display Manager) ab.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- `/etc/inittab`
- `/etc/X11/xdm/*`
- `/etc/X11/kdm/*`
- `/etc/X11/gdm/*`

### Startmöglichkeiten des X-Servers

Es existieren grundsätzlich zwei Möglichkeiten, einen X-Server zu starten. Er kann entweder als Anwenderprogramm gestartet werden, nachdem sich der aufrufende User normal eingeloggt hat, oder er stellt bereits den Login graphisch zur Verfügung.

Die erste Methode wird gewöhnlich dadurch erreicht, daß der Befehl startx aufgerufen wird. startx ist ein Shellscript, das den Befehl xinit aufruft. Dieses Programm startet dann sowohl den X-Server, als auch zusätzliche Programme, wie den Window-Manager oder die Desktop Umgebung. Die Konfiguration von xinit wird über die Datei `$HOME/.xinitrc` oder falls diese Datei nicht existiert über `/var/X11R6/lib/xinit/xinitrc` konfiguriert. Der X-Server wird also als normale Anwendung gestartet. Dieses System hat erhebliche Sicherheitslücken, weil "hinter" dem X-Server eine offene Konsole liegt, von der aus der Befehl startx eingegeben wurde.

Um diese Sicherheitslücke zu schließen, kann die gesamte Kontrolle des Einloggens auch an X11 weitergegeben werden. In diesem Fall wird der X-Server nicht von einem Anwender per Befehl gestartet, sondern von einem Daemon-Prozess, dem X-Display-Manager. Dieser Daemon läuft ständig im Hintergrund und stellt für jeden angeschlossenen X-Server (in der Regel nur einer) ein graphisches Login-Fenster zur Verfügung. Wenn sich ein User über dieses Fenster anmeldet, dann startet der X-Display-Manager gleich den X-Server, der User bekommt also sofort eine graphische Oberfläche, ohne überhaupt auf einem Textterminal eingeloggt zu sein.

Der Display-Manager ist ein Daemon-Prozeß, er sollte also über ein init-Script gestartet werden. Ist der Display-Manager aktiv, so ist es - zumindestens ohne Tricks - nicht mehr möglich, über ein Textterminal mit startx den X-Server als normale Anwendung zu starten. Aus diesem Grund wird der Display-Manager in der Regel nur in einem ganz bestimmten Runlevel gestartet.

Diese Einschränkung erlaubt es, den Display-Manager beliebig an- und auszuschalten, indem einfach der Runlevel entsprechend verändert wird. Die meisten Distributionen haben eine entsprechende Voreinstellung, also einen Runlevel, der alle Netzwerkdienste startet und zusätzlich den Display-Manager aktiviert und einen anderen, der alle Netzwerkdienste startet aber keinen Display-Manager.

Welche Runlevel dazu verwendet werden ist nicht standardisiert. Hier ein paar Beispiele für wichtige Distributionen:

Distribution | Runlevel ohne DM | Runlevel mit DM
--- | --- | ---
SuSE bis 7.2 | 3 | 5
SuSE ab 7.3 | 2 | 3
RedHat | 3 | 5
Caldera | 3 | 5
Slackware | 3 | 4

Nur bei Debian gibt es keinen solchen Runlevel voreingestellt, da die Debian Distribution davon ausgeht, daß sobald der Display-Manager installiert ist, auch sein Einsatz gewünscht wird.

In der Regel sollte in der Datei `/etc/inittab` eine Liste der zur Verfügung stehenden Runlevel als Kommentare stehen, und danach die Einstellung, welcher Runlevel beim Systemstart verwendet werden soll (initdefault). Beispielsweise könnte hier stehen:

      ...
      #
      # runlevel 0  is  System halt   (Do never use this for initdefault)
      # runlevel 1  is  Single user mode
      # runlevel 2  is  Local multiuser without remote network (e.g. NFS)
      # runlevel 3  is  Full multiuser with network
      # runlevel 4  is  Not used
      # runlevel 5  is  Full multiuser with network and xdm
      # runlevel 6  is  System reboot (Do never use this for initdefault)
      #

      id:5:initdefault:
      ...

Dem wäre also zu entnehmen, daß der Runlevel 5 der Runlevel ist, in dem der Display-Manager (xdm) gestartet werden soll und daß dieser Runlevel auch der voreingestellte Runlevel ist.

Um einen Linux-Rechner also zu zwingen, den Display-Manager zu benutzen, muß der Eintrag in `/etc/inittab` entsprechend auf den Runlevel geändert werden, der für den Display-Manager Runlevel steht. Um Linux zu zwingen, den Display-Manager nicht zu benutzen, so muß entsprechend der Eintrag geändert werden, so daß in unserem obigen Beispiel die Zeile jetzt lauten müßte:

      ...
      id:3:initdefault:
      ...

Der Display-Manager-Runlevel sollte erst aktiviert werden, wenn sichergestellt ist, daß die Konfiguration des X-Servers tatsächlich funktioniert. Ansonsten geht man Gefahr, daß sich das System nicht mehr vernünftig bedienen läßt, weil beim Systemstart gleich die graphische Oberfläche geladen wird und die womöglich nur einen flackernden Bildschirm produziert.

### Verschiedene Display-Manager und ihre Konfiguration

Der klassische Display-Manager des XFree86-Projekts war und ist der xdm. Dieser Display-Manager stellt ein relativ anspruchsloses Login-Fenster zur Verfügung, das nur je eine Eingabezeile für Username und Passwort anbietet.

Sowohl das KDE-, als auch das Gnome-Projekt haben jeweils einen eigenen Display-Manager im Angebot. Der Displaymanager von KDE heißt kdm, der von Gnome ist gdm. Der primäre Unterschied zum xdm liegt im entsprechenden Look&Feel. Allerdings bieten gdm und kdm noch einige interessante Zusatzfeatures:

- User werden als Bilder (evt. Passfotos) dargestellt und können angeklickt werden, statt den Usernamen direkt einzugeben.
- Der gewünschte Window-Manager der zu startenden X-Session kann per Menü ausgewählt werden.
- Das System kann heruntergefahren oder neu gestartet werden, ohne sich vorher einloggen zu müssen.

Der kdm basiert sehr stark auf dem xdm, das heißt, er nutzt sowohl XDM-Konfigurationsdateien, als auch Teile des Quellcodes von xdm Im Gegensatz dazu ist der gdm komplett neu geschrieben und daher etwas unabhängiger von xdm.

Die Konfiguration der jeweiligen Displaymanager findet nach dem neuen Dateisystemstandard immer in den folgenden Verzeichnissen statt:

Displaymanager | Konfigurationsverzeichnis
--- | ---
xdm | `/etc/X11/xdm`
gdm | `/etc/X11/gdm`
kdm | `/etc/X11/kdm`

In diesen Verzeichnissen liegen unterschiedliche Konfigurationsdateien. Die Verzeichnisse von kdm und xdm ähneln sich sehr stark, was auf ihre Verwandschaft zurückzuführen ist, das Verzeichnis von gdm ist vollkommen anders aufgebaut.

#### Konfiguration von xdm

Der optische Aufbau von xdm ist sehr simpel gehalten. Ein Login-Fenster enthält eventuell ein Logo und eine einfache Willkommensmeldung. Die einzige Einstellungsmöglichkeit außer der des Logos und der Willkommensmeldung bezieht sich auf den Hintergrund des Bildschirms, auf dem das Login-Fenster erscheint.

xdm ist ein typisches X11-Programm, wird also durch Resources konfiguriert. Die Einstellung der von xdm benötigten Resources liegt in der Datei `/etc/X11/xdm/Xresources`.

In dieser Datei können die folgenden Einstellungen getroffen werden:

- Die Willkommensmeldung kann mittels der Ressource `xlogin*greeting` verändert werden. Ein eventuelles Vorkommen des Wortes `CLIENTHOST` wird in der Ausgabe durch den Hostnamen des Rechners ersetzt.
- Die Schriftart der Willkommensmeldung wird über die Ressource `xlogin*greetFont` eingestellt.
- Das darzustellende Logo wird über die Ressource `xlogin*logoFileName` eingestellt. Das Dateiformat des Logos sollte XPM sein.
- Die Farben des Login-Fensters und seine Rahmenbreite können über Ressourcen wie `xlogin*borderWidth, xlogin*frameWidth, xlogin*background, xlogin*foreground` und `xlogin*greetColor` angepasst werden.

Um schließlich den Bildschirmhintergrund zu verändern, kann eine weitere Datei verwendet werden. Im Verzeichnis `/etc/X11/xdm` liegt ein Shellscript `Xsetup`. Dieses Script wird jedesmal abgearbeitet, wenn xdm eine Loginmeldung auf einen Bildschirm schreibt. In dieses Script können jetzt schon Befehle eingetragen werden, die den Bildschirmhintergrund verändern, wie etwa xpmroot, xsetbg oder jedes beliebige andere Programm, das den Bildschirmhintergrund modifiziert.

Nehmen wir an, im Verzeichnis `/etc/X11/xdm` befindet sich eine Datei `background.xpm`. Diese Datei enthält das gewünschte Hintergrundbild. Dann tragen wir in die Datei `/etc/X11/xdm/Xsetup` die folgende Zeile ein:

      /usr/bin/xpmroot /etc/X11/xdm/background.xpm

Damit wird das gewünschte Bild jedesmal auf den Hintergrund dargestellt, wenn xdm ein Loginfenster darstellt.

#### Konfiguration von kdm

Im Prinzip funktionieren grundsätzlich alle Einstellungen, die für xdm gezeigt wurden auch für kdm. Der einzige Unterschied ist der, daß die Einstellungen jetzt in `/etc/X11/kdm` vorgenommen werden müssen.

Allerdings gibt es eine zweite Konfigurationsmöglichkeit für kdm, die wesentlich mehr Einstellungen erlaubt, als die Möglichkeiten, die wir bereits besprochen haben. Normalerweise werden diese zusätzlichen Einstellungen über ein graphisches Programm erledigt, das Teil des K-Control-Centers ist. Unter dem Menüpunkt System/Anmeldungsmanager können die verschiedensten Einstellungen vorgenommen werden. Alle Einstellungen, die über diese Methode vorgenommen wurden, werden in der Datei `/etc/X11/kdm/kdmrc` gespeichert und können dort auch manuell verändert werden.

Einer der wesentlichen Unterschiede zwischen kdm und xdm ist die Darstellung der User in Bildform zum Auswählen. Auch die Frage, welche Bilder verwendet werden sollen, kann mit dem k-Control-Center eingestellt werden. Allerdings kann auch einfach je ein Bild (im Format XPM) für jeden User in das Verzeichnis kde-Wurzel`/apps/kdm/pics/users` gelegt werden, dessen Namen dem des Users entspricht. Das Bild `hans.xpm` würde also für den User hans benützt.

#### Konfiguration von gdm

Der Display-Manager des Gnome-Projektes arbeitet nicht mit dem Quellcode von xdm, daher ist seine Konfiguration auch entsprechend anders, als die der beiden anderen Displaymanager. Die Konfiguration wird grundsätzlich mit dem Programm gdmconfig vorgenommen. Es handelt sich auch um ein graphisches Programm mit entsprechenden Einstellungsmöglichkeiten.

Die Einstellungen dieses Programmes werden in der Datei `/etc/X11/gdm/gdm.conf` abgespeichert und können hier auch manuell verändert werden. In der Regel wird das aber nie der Fall sein, da die graphische Konfiguration wesentlich konfortabler ist.

Damit auch der gdm die Bilder der User darstellt, muß dieses Feature ersteinmal aktiviert werden (über gdmconfig). gdm bietet jetzt aber die Möglichkeit, daß jeder User sein eigenes Bild einstellt. Dazu kann er das Programm gdmphotosetup benutzen.

### XTerminals mit dem Displaymanager bedienen

Die Möglichkeiten des graphischen Logins beschränken sich nicht alleine auf den lokalen Rechner. Es ist auch möglich, daß sich User fremder Rechner auf unserem Rechner graphisch einloggen. Dazu stellt das X-Protokoll ein spezielles Netzwerkprotokoll zur Verfügung, XDMCP (X-DisplayManager Control Protocol). Damit ist es möglich, daß ein fremder X-Server das Bild unseres Displaymanagers auf seinem Bildschirm zu sehen bekommt und sich dann graphisch auf unserem Rechner einloggt. Alle Programme - außer dem X-Server selbst - die während dieser Session auf dem fremden Rechner dargestellt werden, laufen nicht mehr auf seiner CPU sondern auf der des Servers, auf dem er sich eingeloggt hat. So kann z.B. auch noch ein alter 486er als graphischer Arbeitsplatz genutzt werden.

Damit diese Möglichkeit besteht, muß der Displaymanager zunächst einmal so konfiguriert werden, daß er Zugriffe von fremden Rechnern auch zuläßt. Das geschieht bei xdm und kdm wieder exakt gleich, nur der gdm hat wiederum seine eigenen Einstellmöglichkeiten.

#### XDMCP aktivieren

Bei xdm und kdm müssen zunächst einmal die grundsätzliche Bereitschaft des Display-Managers aktiviert werden, XDMCP-Pakete anzunehmen. Das geschieht in der Datei `xdm-config` bzw. `kdm-config` im jeweiligen Verzeichnis des Display-Managers. Dort steht - meist in der letzten Zeile - der Eintrag

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

Die Zeile, die den `requestPort` auf 0 setzt muß auskommentiert werden, wenn ein Login von fremden Rechnern aus möglich sein soll. In beiden Fällen wird durch ein Ausrufungszeichen diese Zeile deaktiviert, also:

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

Damit ist die grundsätzliche Bereitschaft zur Bedienung aktiviert.

Um den selben Schritt mit gdm zu vollziehen, muß über das Programm gdmconfig im Submenü Expert im Einstellungstab XDMCP das Schaltkästchen XDMCP aktivieren angeschaltet werden. Dadurch wird der Eintrag `Enable=true` in der Sektion `[xdmcp]` der Datei `/etc/X11/gdm/gdm.conf` vorgenommen.

#### Zugriffe erlauben

Für xdm und kdm existiert jetzt noch die Notwendigkeit, einzustellen, welche Rechner das Recht haben sollen, sich graphisch einzuloggen. Dazu existiert die Datei `Xaccess` im jeweiligen Verzeichnis des Displaymanagers. Dort kann festgelegt werden, welcher Rechner

- ein Login-Fenster bekommen soll
- ein Auswahlfenster weiterer Server, die xdm-Logins anbieten, bekommen soll

Dazu werden in dieser Datei Einträge nach dem Muster

Hostnamensmuster

für Direct und Broadcast Zugriffe gemacht. Der einfachste Eintrag wäre also eine Zeile mit nur einem Sternchen (*), der Zugriff für alle Rechner erlaubt.

Den Zugriff auf die Auswahl anderer Rechner wird mit

Hostnamensmuster CHOOSER BROADCAST

geregelt.

Eine solche Datei, die also allen Rechnern der Domaine `foo.bar` die Benutzung unseres graphischen Logins erlauben soll könnte folgendermaßen aussehen:

      *.foo.bar
      *.foo.bar       CHOOSER BROADCAST

#### Clientseitige Einstellungen

Normalerweise - wenn der X-Server entweder über xinit (startx) oder xdm gestartet wird, wird nach dem Start des X-Servers sofort noch ein Fenster-Manager (fvwm2, kwm, gwm, ...) gestartet, der dann wiederum die Oberfläche konfiguriert. Das ist anders, wenn wir uns auf einem fremden System graphisch einloggen wollen.

Zu diesem Zweck wird der X-Server tatsächlich direkt aufgerufen, also weder durch startx, noch durch xdm sondern durch den Befehl X. Dazu kommen drei Techniken in Betracht. DIRECT, INDIRECT und BROADCAST.

Die DIRECT-Methode spricht direkt einen Rechner im Netz an um sich bei ihm einzuloggen. Die Systax dazu ist

        X :0.0 -query Hostname

Jetzt wird der Server 0 gestartet, seine gesammte Konfiguration übernimmt aber der xdm des Rechners Hostname. Der Rechner, auf dem wir diesen Befehl gestartet haben dient also nur als X-Terminal für den unter Hostname angegebenen Rechner.

Die zweite Methode (INDIRECT) geht einen anderen Weg. Sie frägt einen Rechner nicht nach dem Login-Fenster, sondern nach einer Liste von bekannten Servern, die den xdm-Dienst (aso den Dienst sich graphisch einloggen zu können) anbieten. Der gefragte Rechner startet jetzt diese Auswahlliste (den sogenannten CHOOSER) und der aufrufende Rechner kann sich aus dieser Liste aussuchen, wo er sich einloggen will. Um diese Methode anzuwenden lautet der Befehl:

        X :0.0 -indirect Hostname

Die dritte Methode ist schließlich ein Broadcast, der ins lokale Netz ausgesandt wird, um einen Rechner oder CHOOSER zu bekommen. In diesem Fall wird kein Rechnername angegeben, sondern einfach nur ein

      X :0.0 -broadcast

Statt dem ersten zu startenden Server kann bei jedem der drei Methoden auch ein zweiter, dritter, usw gestartet werden, was dann statt der Angabe `:0.0` entsprechend die Angaben `:1.0, :2.0` usw. erfordert.