5


Das X-Window-System

Bedienung der X-Terminals
Ändern der X-Client Konfiguration
Implementierung am URZ
Arbeiten mit der X11-Oberfläche


5. Das X-Window-System

5.1. Überblick

Da sich X11 unter UNIX als Standard durchgesetzt hat und von allen namhaften Herstellern als Teil oder Zusatz ihres Betriebssystems mitgeliefert wird, wurde X11 als primäre Arbeitsumgebung im Workstation-Bereich ausgesucht.

Das X-Window-System (auch X Version 11, X11, X und fälschlicherweise X-Windows genannt) wurde vom MIT (dem Massachusetts Institute of Technology) entwickelt und wird von einer großen Anzahl von Firmen, Universitäten und Benutzern, koordiniert über das "MIT X Consortium", weitergeführt.

Das sicherlich auffälligste Merkmal, das X11 von anderen bekannten Window Oberflächen unterscheidet, ist dessen Netzwerktransparenz. Ein Programm kann auf einem anderem Rechner ein Fenster öffnen, als auf dem es läuft. Wie bei den meisten netzwerkfähigen Programmen, basiert X11 auf dem "Client/Server" Prinzip. Wie üblich läuft der Server auf dem Rechner, der seine Resourcen zur Verfügung stellt, in diesem Fall Maus, Tastatur und Bildschirm. Als Client hingegen bezeichnet man die Applikation, die ihre Ein- und Ausgabe, meist über ein Fenster, auf dem Server betätigen will. Da der Server also auf dem Rechner läuft, an dem der Benutzer sitzt, bedeutet das im Extremfall, daß der Server das Terminal ist, und nicht wie gewohnt, ein leistungsfähiger Rechner innerhalb des Netzes.

Client und Server übertragen Daten über das sogenannte X-Protokoll. Die darin enthaltenen Befehle vom X-Client an den X-Server sind hardwareunabhängig und werden erst vom Server in die für die Hardware bestmöglichen Kommandos umgewandelt.

5.2. Zusammenspiel von Client und Server

Im Prinzip gibt es nur zwei Dinge, die der Benutzer über das Zusammenspiel von Client und dem Server wissen sollte.

5.2.1. Display

Der Client öffnet seine Ein-/Ausgabe auf dem Server, der in der Umgebungsvariablen "DISPLAY" oder in dem Kommandozeilen-Parameter "-display" festgelegt wurde. Eine solche Spezifikation hat die Form:

Hostname: Displaynummer.Schirmnummer

wobei der Hostname sowohl die Internet-Adresse als auch ein symbolischer Name sein kann. Die Displaynummer ist die Nummer des virtuellen Schirms an der Workstation, da viele Rechner es erlauben, mit mehreren Displays gleichzeitig zu arbeiten und über eine Tastenkombination zwischen diesen umzuschalten. Die Schirmnummer ist die physikalische Schirm, falls an einem Rechner mehrere Monitore gleichzeitig angeschlossen sein sollten. Normalerweise sind die letzten beiden Werte Null.

5.2.2. Autorisierung

Auch wenn die im URZ aufgestellten X-Terminals es erlauben, daß jeder Benutzer von jedem Rechner aus ein Fenster auf dem Terminal öffnet, so ist es auf Workstations üblich, daß der Server nur Verbindungen von autorisierten Rechnern und Benutzern akzeptiert. Die einfachste Art Autorisierungen zu verteilen, geht über das 'xhost'-Kommando. 'xhost asterix' erteilt den Clients auf dem Rechner 'Asterix' die Erlaubnis, Fenster auf dem Server zu öffnen, wobei 'xhost +' allen Rechnern diese Erlaubnis erteilt und somit die Zugangskontrolle ausschaltet. Neuere X-Server haben außerdem noch die Möglichkeit, über sogenannte 'Tickets' den Zugang zu kontrollieren. Ein Ticket ist eine Zufallszahl, die jeder Client bei Verbindungsaufbau mit dem Server mitliefern muß. Ist diese Zahl mit der im Server gespeicherten nicht identisch, so wird die Verbindung abgebrochen. Diese Tickets werden im Home-Verzeichnis des Benutzers, der den X-Server gestartet hat, unter dem Namen .Xauthority gespeichert. Soll nun von einer anderen Benutzernummer oder einem anderen Rechner ein Fenster auf dem X-Server geöffnet werden, so reicht das Kopieren dieser Datei in das Home-Verzeichnis des neuen Benutzers, oder, was wohl eher zu empfehlen ist, über das 'xauth' Kommando. Soll also dem Benutzer 'Felix' vom Rechner 'Obelix' erlaubt werden, Fenster auf dem eigenen X-Server zu öffnen, so kann er es über 'xauth -extract - $DISPLAY | rsh -l Felix Obelix xauth -merge -', sofern es dem Benutzer über einen Eintrag in der .rhosts Datei erlaubt wurde Kommandos auf dem Rechner 'Obelix' unter dem Benutzernamen 'Felix' abzugeben. Nähere Angaben über das 'xauth' Kommando bekommt man über 'man xauth'.

5.3. Bedienung der X-Terminals

Die in dem Raum 018 und Raum -108 aufgestellten X-Terminals lassen sich über einen Schalter an der Gehäuserückseite einschalten. Zusätzlich muß evtl. der Bildschirm eingeschaltet werden. Nach einer kurzen Selbsttestphase beginnt der Bootvorgang, bei dem das Gerät sein Betriebssystem über das Netz von einem der Boot-Server liest. Da dieser Vorgang recht lange dauert, sollte der Benutzer, wenn er den Arbeitsplatz verläßt, das Terminal eingeschaltet lassen. Ist der Bootvorgang abgeschlossen, so startet das Terminal den X-Server und stellt die Verbindung mit einem der im Maschinenraum befindlichen UNIX-Rechner her, der sich nach wenigen Sekunden mit einem "Login" Fenster meldet.

5.4. Ändern der X11 Client Konfiguration

Beim Start einer Anwendung unter X11 liest diese aus verschiedenen Dateien Standardeinstellungen, die aber, dank der gemeinsamen Bibliotheken dieser Programme, vom Benutzer über eine normierte Schnittstelle in verschiedenster Weise beeinflußt werden kann. Zu den wohl am häufigsten veränderten Werten gehören sicherlich die Größe und Lage der Fenster, die Schriftart und deren Größe sowie die Farben des Vorder- und Hintergrundes.

5.4.1. Geometrie der Fenster

Der Parameter '-geometry' dient zur Bestimmung der Lage des Fensters innerhalb des Schirms und gleichzeitig zum Festlegen der Größe. Der Parameter nach 'geometry' besteht aus bis zu vier Komponenten mit folgender Syntax:

BREITExHOEHE+XOFFSET+YOFFSET.

XOFFSET und YOFFSET ist die Position der oberen, linken Kante des Fensters, relativ zur oberen, linken Ecke des Schirms. Negative Werte beziehen sich auf den linken, bzw. unteren Rand des Schrims und des Fensters. 'xterm -geometry -0-0' öffnet demnach ein Terminalfenster in der unteren rechten Ecke des Schirms. Die Werte für die Breite und die Höhe werden in Pixeln oder in Zeichen angegeben, je nach Applikation. So wird bei 'xterm -geometry 80x20+0+0' ein Fenster mit 80 mal 20 Zeichen geöffnet, wobei 'xclock -geometry 200x200' eine 200 mal 200 Pixel große Uhr startet.

5.4.2. Farben

Farben können über einen symbolischen Namen oder über absolute Rot/Grün/Blau (RGB) Werte angegeben werden. Einen Überblick über die Namen und einen Eindruck der Farben kann man sich über das Kommando 'xrainbow' verschaffen. RGB Werte werden als hexadezimale Zahl mit vorgestelltem '#' dargestellt. Für die Rot-, Grün-, oder Blaukomponente können bis zu vier Ziffern angegeben werden, es muß nur darauf geachtet werden, daß die Anzahl für alle drei Komponenten gleich ist. Der allgemein übliche Parameter in einer Kommandozeile ist '-foreground' oder kurz '-fg' für die Vordergrundfarbenspezifikation, '-background' oder '-bg' für die Hintergrundfarbe.

Beispiel:

xcalc -fg white -bg blue

oder xcalc -fg #ffffff -bg #0000ff

startet einen Taschenrechner in weißer Schrift auf blauem Hintergrund.

Fonts:

Unter X steht dem Benutzer eine große Auswahl an Fonts zur Verfügung. Jeder Font wird über einen Namen angesprochen, der eine große Zahl von Informationen wie Pixelhöhe, Breite, Typ, Codepage und mehr beinhaltet . Eine Liste aller Namen bekommt man über das Kommando 'xlsfonts'. Um die Auswahl der Fonts zu vereinfachen, können Fontnamen über sogenannte "Wildcards" abgekürzt werden. So kann z.B. statt

-adobe-times-medium-i-bold--34-240-100-100-p-168-iso8859-1

"*-times-medium-i-bold--34-240-*"

angegeben werden, es sollte nur darauf geachtet werden, daß die Abkürzung eindeutig ist.

Das Kommando 'xfontsel' gestattet es, interaktiv Fonts auszusuchen und solche Abkürzungen auszutesten.

Mit dem Parameter '-fn fontname' können X11-Programmen neue Fonts zugeordnet werden. Werden im Fontnamen Wildcards benutzt, sollte der Name in Hochkomma stehen, da Wildcards in der Shell eine besondere Bedeutung haben.

5.4.3. Resourcen

Da die Parameterübergabe über die Kommandozeile recht mühsam ist, können Einstellungen auch in einer Datei abgespeichert werden, die beim Starten des Servers eingelesen wird und deren Werte später den Programmen (Clients) übermittelt werden. Diese Dateien, resource files genannt, werden beim Einloggen des Benutzers über das Kommando 'xrdb' gelesen. Werden mehrere gefunden, so werden sie verkettet, gleiche Parameter werden überschrieben. Der Benutzer hat die Möglichkeit, seine persönlichen Einstellungen in der Datei '.Xresources' in seinem Home-Verzeichnis abzulegen. Der Aufbau jeder Zeile ist folgender:

Applikation.name1.name2...nameN: wert

"Applikation" ist meist der Name des Programms, im Falle von xterm "xterm".

"name1" ist der Name einer sogenannten "Klasse", "name2" der einer Unterklasse usw. Die Angabe dieser Klassen ist wichtig, falls nur der Wert einer einzigen Ausprägung geändert werden soll, so z.B. nur der Font in einem Menü eines Programmes, ohne global alle Fonts in allen Fenstern der Applikation zu ändern. Da dies meist aber nicht der Fall ist, können Teile der Namen mit '*' abgekürzt werden, die Änderung bezieht sich dann auf alle Ausprägungen, deren Name dem Suchmuster entspricht.

Eine Liste der änderbaren Ressourcen findet man in den "Manpages" der enstprechenden Kommandos. Meist wird aber von allen Programmen eine Gruppe von Resourcen wie "font", "background", "foreground" und "geometry" unterstützt. So bewirkt

xterm*font: *bold*

xterm*foreground: black

xterm*background: green

in der Datei .Xresources, daß das Terminal Fenster grün auf schwarzen Grund mit fetter Schrift erscheint.

Änderungen der .Xresources werden allerdings erst wirksam, nachdem sie mit 'xrdb -merge .Xresources' neu eingelesen werden, oder nach einem erneuten Login.

Eine Beispiel Ressource Datei befindet sich im Verzeichnis

/usr/lpp/X11/defaults

unter dem Namen Xdefaults.

5.4.4. Starten von Programmen

Standardmäßig werden nach dem Login nur ein xterm und der Windowmanager gestartet. Die hierfür zuständige Datei heißt /usr/lib/X11/xdm/xsession und kann vom Benutzer durch eine eigene ersetzt werden, die sich in seinem Home-Verzeichnis befindet und den Namen ".Xsession" tragen muß.

Beim Erstellen der Datei sollte eine gewisse Vorsicht geboten sein, da Fehler im Script die Folge haben können, daß ein erneutes Einloggen nicht mehr möglich ist. Sollte dies der Fall sein, so kann beim nächsten Einloggen die Ausführung der eigenen .Xsession-Datei durch Drücken von 'F1' statt der Return-Taste bei der Eingabe des Benutzernamen und des Kennworts verhindert werden. Etwaige Fehlermeldungen bei der Ausführung der Startup-Datei werden in einen File namens .xdm-errors geleitet.

Außerdem sollte bedacht werden, daß die X11-Sitzung nur solange bestehen bleibt, bis das Shell-Script endet. Endet das Script, bricht die Sitzung ab. Daher sollte das letzte Kommando im Script der Aufruf des Windowmanagers oder eines xterms sein, damit man kontrolliert über einen Menüpunkt oder über 'exit' die Sitzung verlassen kann.

Bei folgendem Beispiel einer .Xsession-Datei

xclock -geometry -0+0 &

xterm -geometry 80x24+0+0 &

mwm

werden 'xclock' und 'xterm' als Hintergrundprozesse und der Windowmanager 'mwm' im Vordergrund gestartet. Erst das Verlassen des Windowmanagers beendet auch das Shell-Script und damit die Sitzung.

Die vorliegende Beschreibung von X11 bezieht sich auf die im UNIX-Pool des Rechenzentrums eingesetzten AIX-Rechner und den in den Terminalräumen aufgestellten X-Terminals, auch wenn die Beschreibung zum größten Teil für die meisten X11-Implementationen gilt.

5.5. Implementierung am URZ

5.5.1. Server

Für die Benutzer wurden 22 X-Terminals der Firma NCD mit der Bezeichnung NCD19c und eine Workstation vom Typ RS6000/530H (aixgraf1) aufgestellt. Diese Workstation wurde speziell als Graphik-Arbeitsplatz ausgelegt und besitzt eine 24-Bit 3D Z-Buffer Karte, die eine "Echtfarben" Darstellung mit rund 16 Millionen Farben ermöglicht. Obwohl auf den Terminals ein X11R5 und auf den Workstations ein X11R4-Server läuft, wurde streng darauf geachtet, daß sich die Handhabung der Geräte für den Benutzer gleich darstellt. Die "X-Sessions" werden in allen Fällen über ein Programm namens "xdm" (X Display Manager) kontrolliert, das auch das korrekte "Einloggen" in das im Pool laufende AFS übernimmt und beim Beginn einer Sitzung von einem Terminal aus den Benutzer mit dem am wenigsten belasteten Rechner verbindet.

Sollte ein Benutzer von außerhalb des Rechenzentrums die gleiche Arbeitsumgebung von seiner Workstation aus wünschen, so kann er dies über das Kommando 'X-query aixterm1.urz.uni-heidelberg.de'. Bei einem X-Terminal bzw. einer X-Terminal-Emulation sollte als Protokoll 'XDMCP direct' (auch XDMCP query genannt) und als 'xdm host' 'aixterm1.urz.uni-heidelberg.de' angegeben werden.

5.5.2. Software

Im Pool sind zwei verschiedene X11-Versionen im Einsatz: Einmal das vom MIT herausgegebene X11 Release 5 und das mit AIX ausgelieferte "enhanced AIXwindows", einer abgemagerten X11 Release 4 Implementation. Um bei einem Update von einem der Programmprodukten nicht das andere zu überschreiben, wurden beide Versionen strikt getrennt. Daher sind auch alle Libraries, Binaries und Konfigurations-Dateien doppelt auf den Rechnern vorhanden.

Standardmäßig werden X11R5 Clients angezogen und das zur Kompilation von X11 Anwendungen nötige 'xmkmf' ist so konfiguriert worden, daß Release 5 Libraries und Include-Dateien benutzt werden.

X11R4 (AIXwindows)                                   X11R5                      
                                                                                
/usr/lib                 Libraries                   /usr/local/X11/lib         
/usr/lib/X11             Konfigurations-Files        /usr/local/X11/lib/X11     
/usr/bin/X11             ausführbare Dateien         /usr/local/X11/bin         
/usr/include/X11         X11 Header Files            /usr/local/X11/include     
/usr/include/Xm          Motif (1.0!) Header Files                              
/usr/lpp/X11/Xamples     Demo Sourcen                                           

5.6. Arbeiten mit der X11-Oberfläche
5.6.1. Auswählen und Verschieben der Fenster

5.6.1.1. Fenster auswählen

Das Auswählen eines Fensters mit der Maus ist denkbar einfach. Der Mauszeiger wird auf das auf das Fenster bewegt, das ausgewählt werden soll. Anschließend wird das Fenster einmal mit der linken Maustaste 'angeklickt'. Das Fenster wird nun in den Vordergrund gebracht und als aktiv markiert (Bei XTermfenster wird z.B.: der Cursor schwarz und der Rahmen wird heller).

5.6.1.2. Fenster verschieben

Beim Verschieben eines Fensters, muß mit dem Mauszeiger in den Bereich der Kopfzeile (hier steht z.B.: xterm) des Fensters gefahren werden. Nun wird der Mauszeiger vom normalen Pfeil in einen verkürzten Pfeil verwandelt. Wenn nun die linke Maustaste niedergedrückt und gehalten wir, verändert sich der Mauszeiger bei Bewegung der Maus zu einer Kompaßrose. Gleichzeitig wird ein Geisterfenster in die Richtung verschoben, in die der Mauszeiger sich bewegt. Wenn dann die neue Position des Fensters erreicht ist, wird die Maustaste einfach losgelassen. Das Fenster wird nun an die neue Position gezeichnet.

5.6.1.3. Fenstergröße ändern

Das Ändern der Fenstergröße ist ein ähnlicher Vorgang wie beim Verschieben. Jetzt muß der Mauszeiger auf den Rand des Fensters bewegt werden. Sobald der Zeiger dann seine Form von einem Pfeil in einen Pfeil mit einem Dach ändert, muß wieder die linke Maustaste gedrückt und gehalten werden. Dann wird nur noch die Maus in die Richtung bewegt, in welche das Fensters vergrößert werden soll. Während des Bewegens sieht man dann wieder das Geisterfenster, welches die augenblickliche Größe des Fensters anzeigt. Durch das Loslassen der Maustaste wird dann die Änderung auf das Fenster übertragen.

Soll die Änderung in bei Richtungen gleichzeitig vonstatten gehen, muß mit dem Mauszeiger in die Ecken des Fensterrahmens gefahren werden. Hier verwandelt sich dann der Pfeil in einen Pfeil mit Winkel. Durch Niederdrücken und Halten der Maustaste kann nun auch das Fenster vertikal und horizontal in seiner Größe beeinflussen werden.

5.6.1.4. Die Menübuttons und der Rollbalken

Der Menübutton (button = Knopf) befindet sich links von der Kopfzeile des Fensters und zeigt ein kleines Minuszeichen in einem Viereck. Durch Anklicken des Menüknopfes erscheint das Fenstermenü. Hier sind nochmals alle Funktionen für das Ändern des Fensters aufgelistet. Sollte dabei ein Menüpunkt in einer Art Geisterschrift dargestellt sein, so ist dieser Punkt zur Zeit nicht aus- oder anwählbar.

In der rechten Ecke der Kopfzeile sind zwei weitere Knöpfe angebracht. Der linke Knopf stellt einen Punkt in der Mitte eines Vierecks dar, und dient zum Verkleinern des Fensters auf Icongröße. Der zweite Knopf rechts daneben ist zum Vergrößern auf die maximale Größe. Wenn ein Fenster auf maximale Größe geschaltet ist, dient dieser Knopf dann zum Verkleinern des Fensters auf seine ursprüngliche Größe.

Desweiteren ist am linken Rand des Fensters ein grauer Balken. Dieser dient zum Verschieben des Fensterinhaltes nach oben und unten. Fährt man mit dem Mauszeiger auf den Balken, so wird der Mauszeiger dann zu einem Doppelpfeil. Wenn jetzt mit der rechten Maustaste einmal geklickt wird, wird man sehen, wie der Fensterinhalt sich noch unten verschiebt und dadurch älterer Text auf dem Fenster sichtbar wird. Durch Drücken der linken Maustaste wird der Fensterinhalt in die umgekehrte Richtung verschoben.