# 1.110.4

# Installation und Anpassung einer Window Manager Umgebung

Beschreibung: Prüfungskandidaten sollten in der Lage sein, eine systemweite Desktopumgebung und/oder einen Window Manager einzurichten und ein Verständnis der Anpassungsprozedur für Menüs der Fenstermanager und oder der Desktop-Panele demonstrieren. Dieses Lernziel beinhaltet die Auswahl und Konfiguration des gewünschten X-Terminals (xterm, rxvt, aterm etc.), das Prüfen und Auflösen von Bibliotheksabhängigkeiten von X-Anwendungen und das Exportieren der Ausgabe von X-Anwendungen auf einen Client.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- `.xinitrc`
- `.Xdefaults`
- xhost
- `DISPLAY` Umgebungsvariable

### Window-Manager

Der X-Server selbst enthält noch keinerlei Mechanismen zum Bewegen, zur Größenveränderung oder zum "Iconifizieren" von Fenstern. Auch die Ausstattung von Fenstern mit Rahmen findet noch nicht statt, wenn nur der Server läuft. All diese Aufgaben übernehmen Fenster-Manager (Windowmanager) wie der Motif Window Manager (mwm), der Open-Look Window Manager (olwm) oder fvwm. Auch die KDE-Desktop-Umgebung bringt einen eigenen Window-Manager mit, der kwm, während die Gnome-Desktop-Umgebung mit vielen Window-Managern zusammenarbeitet und keinen eigenen besitzt.

Erst durch das Starten eines Window-Managers wird der X-Server zur arbeitsfähigen Graphikstation. Erst der Window-Manager erlaubt es dem User, Fenster zu verschieben, in der Größe zu verändern oder in ein Icon zu verwandeln. Er definiert meist auch Menüs, die durch Drücken der verschiedenen Maustasten aktiviert werden können (wenn sich der Mauszeiger nicht innerhalb eines Fensters befindet).

Die Konfiguration der einzelnen Window-Manager ist so unterschiedlich, daß sich keinerlei allgemeine Regeln dazu formulieren lassen außer der, daß fast immer eine persönliche Konfigurationsdatei im jeweiligen Home-Verzeichnis eines Users befindet, die immer mit einem Punkt beginnt und auf rc endet. dazwischen steht meist der Name des Window-Managers. Also hat Motif eine `.mwmrc`-Datei, olwm wird in `.olwmrc` konfiguriert und fvwm2 in `.fvwm2rc`.

Die beiden Desktop-Umgebungen KDE und Gnome bieten zusätzlich zu den Features der Window-Manager noch eine vereinheitlichte Darstellung der jeweils verwendeten Programme und eine Schnittstelle für Programmierer, um ihre Programme entsprechend für diese Umgebungen auszustatten. Auch Features wie Drag&Drop werden dabei unterstützt.

Diese beiden Spezialfälle, die heute wohl eher als die Regel statt die Ausnahme zu bezeichnen sind, bieten vor allem eine Möglichkeit, ihre Konfiguration auf eine Art und Weise vornehmen zu lassen, wie sie die BenutzerInnen von Windows gewohnt sind. Kontextmenüs über die rechte Maustaste und Controlcenter in denen die gesamte Konfiguration graphisch vorgenommen werden kann, gehören zur Grundausstattung.

### Konfiguration von X-Clients

Weil X-Clients (also X-Anwendungsprogramme) auf allen X-Servern in einem Netz dargestellt werden können, muß jede X-Anwendung konfigurierbar sein. So portierbar das X-System auch ist, so unterschiedlich sind doch einige Voraussetzungen auf unterschiedlichen Servern. Bildschirme können unterschiedliche Auflösungen haben, Graphikkarten unterschiedliche Farbtiefen. Ein Programm, das auf einem Server gut dargestellt wird kann auf einem anderen nicht auf den Schirm passen oder farblich falsch dargestellt werden. Eine Taste, die auf einer Tastatur leicht erreichbar ist kann auf einer anderen dazu führen, daß man sich fast den Finger bricht...

Auf anderen Fenstersystemen wie MS-Windows oder dem Macintosh-Finder werden alle Anwendungen auf der Anwendungsebene konfiguriert. Das macht Sinn, weil sowohl DOS als auch das Mac-OS Single-User-Systeme sind. Alle Konfiguration kann zentral gespeichert werden.

X11-Programme müssen anderen Anforderungen standhalten. Erstens ist Unix ein Mehrbenutzersystem und es ist daher nötig, daß alle User ihre individuellen Einstellungen machen können, zweitens weiß das X11-Programm noch nicht, auf welchem Server es dargestellt werden soll, es muß also auch in dieser Hinsicht konfigurierbar sein.

Es stehen bei allen X11-Clients zwei Konfigurationsmöglichkeiten zur Verfügung, die Kommandozeilenparameter und die Resourcen.

#### Konfiguration von X-Clients über Kommandozeilenparameter

Anhand des Clients xterm kann schön dargestellt werden, wie die klassischen Kommandozeilenparameter eines X-Clients angewandt werden. All diese Parameter werden von allen X-Clients verstanden, xterm ist hier also nur ein Beispiel.

##### Schriftenauswahl

Die Auswahl von Schriften erfolgt mit dem Kommandozeilenparameter -fn. Um ein xterm zu starten, das die Schrift `-misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1` benutzen soll reicht die Angabe

      xterm -fn -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1 &

Damit ist ein xterm mit anderer Schrift gestartet. Vorsicht ist übrigens angesagt bei der Verwendung von anderen Schriftfamilien. In der Regel ist das kein Problem, aber ein xterm-Fenster simuliert eben ein Terminal. Werden hier Proportionalschriften verwendet, die für ein i weniger Platz als für ein o benutzen, so kann es zu heftigen Problemen beim Arbeiten mit bildschirmorientierten Programmen kommen. Eine Aufteilung in untereinanderliegende Spalten ist ja dann nicht mehr möglich. Xterm sollte also immer mit Schriften der Familie fixed benutzt werden.

##### Fenstergeometrie

X11 verwaltet den Bildschirm als ein Koordinatensystem. Die obere linke Ecke entspricht der Position 0,0. Die unteren Ecken werden durch die maximale Auflösung bestimmt, genau wie die obere linke Ecke. Bei einer Auflösung von 1024x768 sieht das beispielsweise so aus:

Ein X-Client kann mit dem Parameter `-geometry` auf zweierlei Arten konfiguriert werden. Die Größe und die Position des Fensters auf dem Schirm kann angegeben werden. Zunächst zur Größe:

Wir wollen ein xterm-Fenster, das statt der Standardgröße 80 Spalten in 24 Zeilen jetzt 90 Spalten in 30 Zeilen besitzt. Kein Problem:

      xterm -geometry 90x30 &

Nach dem `-geometry` folgt also die Angabe der Spalten und Zeilen durch ein x getrennt. (Wem das geometry zu lang ist, der kann beruhigt sein - in den meisten Fällen funktioniert auch ein -g statt dessen).

Achtung: Die Angabe von Zeilen und Spalten bezog sich beim xterm auf Zeichen statt auf Pixel. Graphikorientierte Programme rechnen hier mit Pixel, zeichenorientierte Programme mit Zeichen. Um also etwa ein Programm wie xeyes (die wohlbekannten Augen) in der Größe zu verändern, muß mit Pixeln gerechnet werden.

Die andere Aufgabe, die mit `-geometry` erfüllt werden kann ist die Positionierung eines Fensters auf dem Schirm. Dazu wird der Offset zum Rand des Schirms angegeben, ein Pluszeichen meint den oberen bzw. den linken Rand, ein Minuszeichen den unteren bzw. rechten:

      xterm -geometry +10+50 &

positioniert die obere linke Ecke des Fensters also 10 Pixel vom linken Rand entfernt und 50 Pixel vom oberen Rand. Bei dieser Angabe sind übrigens immer Pixel die Maßangabe, nie Zeichen. Um sich auf die untere linke Ecke zu beziehen können wir schreiben:

      xterm -geometry -30-100 &

Wir erhalten ein Fenster, dessen untere rechte Ecke 30 Pixel vom rechten Rand des Bildschirms und 100 vom unteren Rand entfernt ist. Es ist sogar möglich, diese Angaben zu mischen. Die Zeile

      xterm -geometry +10-100 &

meint also ein Fenster, dessen linker Rand 10 Pixel vom linken Rand des Bildschirms entfernt ist und dessen untere Begrenzung 100 Pixel Abstand zum unteren Rand aufweist.

Die Angaben von Größe und Position lassen sich auch kombinieren. Dabei wird immer die Größe zuerst angegeben, danach (ohne Leerzeichen aber mit Vorzeichen + oder -) die Positionsangaben. Um etwa ein xterm mit 90 Spalten in 30 Zeilen an der Position 10,100 zu erhalten schreiben wir:

      xterm -geometry 90x30+10+100 &

Wird keine Angabe zur Position gemacht, so übernimmt der Window-Manager die Positionierung. Dabei kann meist eingestellt werden, auf welche Art und Weise diese Positionierung erfolgt (Userdefiniert mit Maus, zufällig, auf freien Bildschirmteilen, ...).

##### Farbauswahl

X-Clients haben fast immer die Möglichkeit, ihre Farbdarstellungen einzustellen. Dazu dienen in der Regel die Parameter `-fg` für die Vordergrundfarbe (foreground) und `-bg` für den Hintergrund (background).

Um also ein xterm mit blauem Hintergrund und gelber Schrift zu erhalten benutzen wir die folgende Zeile:

      xterm -bg blue -fg yellow &

#### Konfiguration von X-Clients über Resources

Die Steuerung der Programmeigenschaften über Kommandozeilenparameter ist zwar eine mächtige Möglichkeit, jedoch kann es auch ganz schön lange Befehlszeilen geben, wenn wir etwa ein xterm an einer bestimmten Position in einer bestimmten Größe und Farbe mit einer anderen Schrift haben wollen. Dadurch entstünden Befehlszeilen wie etwa:

      xterm -geometry 90x30-10-10 \
      >   -fn -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1\
      >   -fg blue -bg bisque2 &

Zugegebenerweise wäre das etwas umständlich zu tippen. Um oft gebrauchte Einstellungen fest zu verändern steht uns das Resource-System zur Verfügung. Resources sind einfach nur Variablen, die ein Programm benutzt und die von außerhalb des Programms verändert werden können.

Die Grundeinstellungen dieser Resourcen stehen im Verzeichnis `/etc/X11/app-defaults`. Jeder User kann aber diese Werte verändern, so daß für ihn (und nur für ihn) Programme mit anderen Werten gestartet werden. Das geschieht in der Regel über die Datei `.Xresources` oder `.Xdefaults` im jeweiligen Home Verzeichnis des Users. Dort können Zeilen wie die folgenden eingetragen werden:

      XTerm*font: -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
      XTerm*Background: bisque2
      XTerm*Foreground: blue
      XTerm*geometry: 90x40

Diese Werte werden dann beim nächsten Start des X-Servers in den Speicher geladen und aktiviert. Jedesmal, wenn Sie jetzt xterm ohne Parameter aufrufen erscheint ein Fenster mit Hintergrundfarbe bisque2, Vordergrundfarbe blau, fetter Schrift und der Größe 90x40...

Um die Datei während des Betriebs zu laden (ohne den Server neu zu starten) kann der Befehl

      xrdb -merge .Xresources

angegeben werden. Der Parameter -merge sorgt dafür, daß die bestehenden Resourcendefinitionen, die durch die Veränderungen nicht betroffen wurden erhalten bleiben.

Welche Resourcen ein Client versteht kann in der Regel in seiner Handbuchseite nachgelesen werden.

Die grundsätzliche Form der Eingabe ist immer die gleiche:

Client (oder Clientname)*Resource: Wert

In der Regel haben Clients sehr viele Resourcen, wesentlich mehr als mögliche Kommandozeilenparameter. So kann einem Xterm beispielsweise durch die Resource

        XTerm*scrollbar:true

eine Scrollbar (Rollbalken) zugefügt werden. Damit alle diese Resourcen auch über die Kommandozeile möglich sind, gibt es den Parameter `-xrm`, dem ein Resourcenstring folgen kann. Damit ist es also auch möglich, Programmeinstellungen über die Kommandozeile zu machen, für die es zwar Resourcen gibt aber keine Parameter.

### Starteinstellungen

Wenn der X-Server über den Befehl startx gestartet wird, so wird beim Start automatisch die Datei `~/.xinitrc` oder - falls sie nicht vorhanden ist, die Datei `/etc/X11/xinit/xinitrc` abgearbeitet. Dabei handelt es sich um ein einfaches Shellscript, das verschiedene Aufgaben übernimmt:

- Die systemweite und die userbezogene Tastaturdefinition wird geladen (`/etc/X11/Xmodmap, ~/.Xmodmap`).
- Die systemweiten und die userbezogenen Resource-Dateien werden geladen (`~.Xdefaults, ~.Xresources, /etc/X11/Xresources`)
- Beliebige X-Clients können gestartet werden
- Der gewünschte Window-Manager wird gestartet

Einen ähnlichen Vorgang gibt es, wenn der X-Server vom Display-Manager gestartet wird. In diesem Fall wird die Datei `/etc/X11/xdm/Xsession` abgearbeitet.

Wenn im Homeverzeichnis eines Users ebenfalls eine Datei `~/.Xsession` existiert, so wird auch diese Datei abgearbeitet. So kann jeder User seine Einstellungen persönlich verändern.

In vielen Distributionen rufen sowohl xinitrc, als auch Xsession einfach nur ein anderes Script auf, um zu einer gemeinsamen Konfiguration zu gelangen.

### X11 im Netz

Da das X-Protokoll ein Netzwerkprotokoll ist, kann jeder X-Client auch entsprechend so aufgerufen werden, daß er seine Ausgaben nicht auf dem lokalen Server macht, sondern auf einem anderen X-Server. Dazu gibt es verschiedene Mechanismen, die sowohl den Aufruf des Clients, als auch die Einstellungen auf dem Server betreffen.

#### Die Client-Seite

Jeder X-Client kann mit einem Parameter `-display` gestartet werden, mit dem angegeben werden kann, auf welchem Display der Client dargestellt werden möchte. Die Angabe des gewünschten Displays hat die Form:

Hostname:Servernummer.Displaynummer

Der Hostname kann weggelassen werden, wenn das Programm auf dem lokalen Server zugreifen soll. Servernummer und Displaynummer beziehen sich auf die einzelnen Server und Displays des jeweiligen Hosts. Das ist nur von Bedeutung, wenn auf einem Rechner mehrere Server laufen (etwa wenn mehrere XTerminals angeschlossen sind) - im Normalfall steht hier ein `:0.0` also der Server 0 und das Display 0. In den meisten Fällen kann auch die Angabe der Displaynummer weggelassen werden (Displaynummern fallen nur an, wenn ein Server mehrere Graphikkarten anspricht) so daß einfach ein :0 als Serverbezeichnung reicht.

Damit es unter X11 möglich ist, lokale X-Clients ohne die Nennung eines Displays zu starten, wird beim Starten von X eine Umgebungsvariable `DISPLAY` definiert, die den Wert :0.0 beinhaltet. Dadurch wissen XClients auf welchen XServer sie zugreifen sollen, wenn keiner explizit angegeben wurde.

Ein Beispiel:

Wir sind im Rechner marvin eingeloggt und wollen hier das Programm netscape starten. Die Ausgaben dieses Programmes sollen aber auf dem XServer des Rechners hal ausgegeben werden. Wir schreiben also:

      netscape -display hal:0.0

Natürlich kann auch hier wieder statt dem Rechnernamen die IP-Adresse stehen.

#### Die Server-Seite Ein X-Server, auf dem Ausgaben von Clients anderer Hosts zugelassen werden sollen, muß natürlich zunächst diesen Hosts erlauben, auf seinen Dienst zuzugreifen. Dazu existiert eine Hostbasierte Zugriffskontrolle.

Das Programm, mit dem diese Kontrolle realisiert wird heisst xhost und ist sehr einfach anzuwenden:

      xhost [+|-]
      xhost Hostname
      xhost -Hostname

Wenn xhost ohne Argumente aufgerufen wird, so zeigt es den Status der Zugriffskontrolle (an- oder ausgeschaltet) und die Liste der authorisierten Rechner an.

Durch den Aufruf von `xhost +` wird alle Zugriffskontrolle ausgeschaltet, jeder Rechner kann jetzt auf den Server zugreifen.

Mit `xhost -` werden die Zugriffskontrollmechanismen wieder aktiviert, nur authorisierte Rechner dürfen auf den Server zugreifen.

Durch die Nennung eines Rechnernamens nach xhost (also etwa `xhost hal`) wird der angegebene Rechner in die Liste der authorisierten Rechner aufgenommen. Programme auf diesem Rechner können also jetzt ihre Ausgaben auf dem Server machen.

Die Zeile `xhost -hal` würde den Rechner `hal` wieder von der Liste der authorisierten Rechner streichen.

Selbstverständlich können diese Einstellungen auch beim Start von X11 automatisch ablaufen. Es ist nur nötig, sie in die jeweils verwendete xinitrc Datei zu schreiben. Also entweder in die systemweite in `/etc/X11/xinit/xinitrc` oder in die private `$HOME/.xinitrc`

Eleganter ist allerdings die Möglichkeit, eine Datei namens `/etc/Xn.hosts` zu verwenden, die eine Liste aller Rechner enthält, die Zugriff auf den Server haben sollen. Das n im Dateinamen steht für die Servernummer, in unserem Fall also immer die 0. Diese Datei ist nicht standardmäßig vorhanden, sie muß bei Bedarf vom Systemverwalter angelegt werden.

### Auflösung von Bibliotheksabhängigkeiten

Zur Prüfung und Auflösung von Library-Abhängigkeiten wurde im Abschnitt 1.102.4 - Verwaltung von Shared Libraries schon alles notwendige erläutert. Es gibt keinen Unterschied zwischen X11-Anwendungen und normalen Linux-Programmen hinsichtlich der Libraries.