http://www.urz.uni-heidelberg.de/zentral/urz/schriften/unixhb/kap05.html (Einblicke ins Internet, 10/1995)
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.
Im Prinzip gibt es nur zwei Dinge, die der Benutzer über das Zusammenspiel
von Client und dem Server wissen sollte.
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.
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'.
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.
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.
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.
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.
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.
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.
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.
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
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).
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.
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.
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.