Das X-Window System ist ein sehr komplexes Gebilde, dessen Feinheiten sicher einen ganzen Kurs füllen könnten. Daher werden hier nur die wichtigsten Dinge besprochen, die für ein grundsätzliches Verständnis von X benötigt werden.

1 Grundlagen

Das X-Window-System oder kurz X11 ist ein netzbasiertes graphisches Fenstersystem, das auf einer Client/Server Architektur beruht. Programme, die ihre Ausgaben in Fenstern machen wollen sind Clients, die den Service in Anspruch nehmen, den der Display-Server anbietet, nämlich Ausgabe auf dem Schirm zu bringen und Eingaben von der Tastatur und Mouse entgegenzunehmen.

Dabei ist wichtig, dass es möglich ist, dass Client und Server über ein Netzwerk miteinander kommunizieren können. Es ist also unerheblich, ob die Programme, die auf einem Bildschirm dargestellt werden auf dem lokalen Rechner laufen oder auf einem anderen Rechner im Netz.

Client und Server verständigen sich mittels einem Protokoll, dem sogenannten X-Protokoll. Dieses Protokoll nutzt als Transportbasis meist TCP/IP, aber auch DECNet oder der Betrieb auf reinen Unix-Sockets ist möglich. Technisch gesehen ist das X-Protokoll die eigentliche Definition des X-Window-System.

Durch die Definition eines eindeutigen Protokolls, das alle Fähigkeiten zur Übermittlung von graphischen Ausgaben beinhaltet wird X11 zur hardwareunabhängigen Graphikplattform. Das X11-System ist aufgegliedert in einen Displayserver und in Programme, die den Display-Service in Anspruch nehmen, also Clients. Ein Server kann für jede beliebige Art von Graphiksystemen geschrieben werden, über das vordefinierte X-Protokoll können beliebige Clients dann ihre Ausgaben auf dem Server machen.

Natürlich können Clients (also X11-Programme) auch lokal auf dem selben Rechner laufen, auf dem auch der Display-Server läuft, das ist sogar die Regel. Aber es können eben auch beliebige andere Rechner Programme laufen haben, deren Ausgaben dann auf unserem Server zu sehen sind.

Zusammenfassend können wir also sagen, das X11-System beruht auf drei Einzelelementen:

  1. Der Display-Server, der alle Ausgaben auf den Bildschirm steuert und die Eingaben von der Tastatur und der Maus entgegennimmt. Er ist ein Programm, das lokal auf dem Rechner läuft und Kontrolle über die Grafik-Hardware hat.
  2. Ein oder mehrere Clients, also Programme, die ihre Ein/Ausgabe nicht selbst erledigen sondern diese Aufgabe vom Display-Server erledigen lassen. Kurz gesagt sind alle X-Anwendungen (xterm, xsnow, xteddy, …) Clients. Es ist unerheblich, auf welchem Rechner im Netz diese Programme laufen, solange sie mit dem Display-Server verbunden sind geht ihre Ausgabe auf den Bildschirm dieses Servers.
  3. Das X-Protokoll, das die Kommunikation zwischen den Clients und dem Display-Server regelt. Dieses Protokoll ist das einzige, das X11 eigentlich ausmacht. Prinzipiell kann für jedes graphikfähige Gerät ein X-Server geschrieben werden, wenn er das X-Protokoll versteht, kann er X-Clients erlauben, ihre Ausgaben auf dem Gerät auszugeben.

2 Die Window-Manager

Das reine X11-Modell 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 unser fvwm (was auch immer das fv bedeuten mag…).

Erst durch das Starten eines Window-Managers wird der X-Server zur arbeitsfähigen Graphikstation. Erst er 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, dass sich keinerlei allgemeine Regeln dazu formulieren lassen außer der, dass 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 unser fvwm2 in .fvwm2rc.

3 Konfiguration der 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, dass 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, dass 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.

3.1 Konfiguration von X-Clients über die 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.

3.1.1 Schriftenauswahl

Die Auswahl von Schriften erfolgt mit dem Kommandozeilenparameter -fn. Die Schriftnamen unter X11 sind etwas gewöhnungsbedürftig, dazu werden wir etwas später noch kommen. Für den Moment genügt es, zu wissen, dass es ein Programm gibt, das alle im System vorhandenen Schriften auflistet, dieses Programm heißt xlsfonts. Zum Beispiel:

  # xlsfonts
  -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1
  -adobe-courier-bold-o-normal--11-80-100-100-m-60-iso8859-1
  -adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1
        ...
  -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
        ...

(Es gibt auch das Programm xfontsel, bei dem die Schriften auch dargestellt werden, bevor sie ausgesucht werden.)

Um ein xterm zu starten, das die letzte unserer Beispielschriften nutzt können wir schreiben:

  # 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.

3.1.2 Die 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 1024×768 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 vom unteren Rand.

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, …).

3.1.3 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).

Das Farbmodell von X wird später noch genauer besprochen, zunächst mal wieder wie bei den Schriften existiert ein Programm, das die Namen aller bekannten Farben auflistet. Dieses Programm heißt showrgb und ließt schlicht nur eine Textdatei (/var/X11R6/lib/rgb.txt), in der die Farben definiert sind.

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

  # xterm -bg blue -fg yellow &

3.2 Konfiguration von X-Clients über Resourcen

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 Resourcen-System zur Verfügung. Resourcen 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 /var/X11R6/lib/app-defaults. Jeder User kann aber diese Werte verändern, so dass für ihn (und nur für ihn) Programme mit anderen Werten gestartet werden. Das geschieht in der Regel über die Datei .Xresources im jeweiligen Home Verzeichnis des Users. Dort können Sie Zeilen wie die folgenden eintragen:

  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 X11-Servers in den Speicher geladen und aktiviert. Jedesmal, wenn Sie jetzt xterm ohne Parameter aufrufen erscheint ein Fenster mit Hintergrundfarbe bisque2, Vordergrundfarbe blau, der Fetten Schrift und der Größe 90×40…

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, dass 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

Der besondere Trick mit dem Namen des Clients ist die Anwendung von symbolischen Links. Wir können z.B. folgende Zeilen in unsere .Xresources Datei aufnehmen:

  blauterm*font: -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
  blauterm*Background: blue
  blauterm*Foreground: yellow
  gruenterm*font: -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
  gruenterm*Background: green
  gruenterm*Foreground: black

Jetzt erstellen wir noch zwei symbolische Links auf /usr/X11R6/bin/xterm. also etwa:

  # ln -s /usr/X11R6/bin/xterm /usr/X11R6/bin/blauterm
  # ln -s /usr/X11R6/bin/xterm /usr/X11R6/bin/gruenterm

Damit haben wir ja zwei neue Programme, blauterm und gruenterm. Nachdem die Xresources Datei neu geladen ist (Neustart des Servers oder xrdb) können Sie die Programme aufrufen. Die Resourcen beziehen sich offenkundig auf diese „neuen Programme“

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.

4 Das Farbmodell von X11

Farben werden in X immer als analoge Werte von Rot, Grün und Blau gewertet. Jede Farbe ist also eine Mischung aus drei Werten, aus denen sie zusammengesetzt ist.

Die numerische Darstellung der Farben ist einfach, ein Doppelkreuz (#) gefolgt von Zahlenwerten wird unter X11 als Farbwert interpretiert. Dabei kann jede Farbe entweder eine, zwei, drei oder vier Stellen haben (auch wenn es unüblich ist, mehr als zwei Stellen zu nutzen). Schematisch könnten wir also darstellen:

  #RGB
  #RRGGBB
  #RRRGGGBBB
  #RRRRGGGGBBBB

wobei R, G und B die hexadezimalen Werte für die Farben Rot, Grün und Blau bedeuten. An jeder Stelle, an der Farbangaben gemacht werden können können auch diese Werte statt Farbnamen stehen – zum Beispiel würde

  # xterm -bg #B7BB6E

ein Xterm Fenster öffnen, dessen Hintergrundfarbe ein hässliches Grün wäre. Diese Farbe ist zusammengesetzt aus den Werten 183 (B7) Rot, 187 (BB) Grün und 110 (6E) Blau.

Natürlich wäre es lästig, alle Farben mit solchen Nummern anzusprechen, es gibt auch eine Möglichkeit, Farbnamen zu definieren. In der Datei /var/X11R6/lib/rgb.txt sind 738 fest definierte Farben enthalten, jeweils mit ihren numerischen Werten und einem Namen.

Diese Datei hat ein leicht zu überblickendes Format. Jede Zeile repräsentiert eine Farbe, die ersten drei Felder der Zeile enthalten die dezimalen Werte für die Rot-, Grün- und Blauanteile, das vierte Feld den Namen der Farbe. Jeder Wert für die Farbanteile kann von 0 bis 255 gehen, es handelt sich also damit immer um eine 24 Bit Darstellung mit 16 Millionen Farben. In Graphikmodi mit weniger möglichen Farben werden die Werte umgerechnet.

  250 235 215  AntiqueWhite
  255 239 213  papaya whip
  255 239 213  PapayaWhip
  255 235 205  blanched almond
  255 235 205  BlanchedAlmond
  255 228 196  bisque

Um selber Farben zu definieren muß nur diese Datei erweitert werden, nach einem Neustart des Servers existiert die neue Farbe. Wenn wir etwa die oben schon erwähnte häßliche Grünfarbe in die Farbdatei aufnehmen wollten, so könnten wir sie mit joe oder vi editieren und die Zeile

  183 187 110  haesslich_gruen

einfügen. Nach einem Neustart des Display-Servers kann nun etwa mit

  xterm -bg haesslich_gruen

ein xterm aufgerufen werden, dessen Hintergrund in dieser Farbe gestaltet ist. Im gesamten X11-System steht diese Farbe jetzt zur Verfügung. Aber Vorsicht: Sollte einmal eine Anwendung auf einem anderen Server laufen, dessen rgb.txt diese Zeile nicht enthält, so kann er mit der Farbe nichts anfangen. In so einem Fall ist die Angabe von numerischen Werten vorteilhafter.

Seit der Version 5 (X11R5) gibt es noch eine andere Farbdarstellungsmöglichkeit, die eine exakte übereinstimmung von Farben auf unterschiedlichen Monitoren gewährleistet. Dieses System (XCMS) wird aber fast ausschließlich von Graphik-Profis benutzt, seine Anwendung ist wesentlich komplizierter. Um damit umzugehen, muß genaue Information über den jeweils verwendeten Monitor und seine Technologie vorhanden sein. Für diese kurze Darstellung ist dieses Thema jedoch zu komplex…

5 Das Prinzip der Schriften von X11

Schriften können bei X11, wie bei fast jeder anderen graphischen Oberfläche auch, beliebig hinzugefügt oder entfernt werden. Dabei existieren mehrere mögliche Formate, so dass es also möglich ist, dass ein und dieselbe Schrift in einer Installation mehrfach vorhanden ist.

X11 bietet sogar de Möglichkeit eines zentralen Font-Servers, eines Rechners also, der für alle anderen Rechner im Netz die verschiedenen Schriften zur Verfügung stellt. Das spart nicht nur Speicherplatz auf den einzelnen Festplatten sondern sorgt auch definitif dafür, dass auf allen Systemen immer die gleichen Schriften zur Verfügung stehen.

Schriftnamen haben eine etwas gewöhnungsbedürftige Form, hier einmal ein Beispiel, an dem die einzelnen Elemente des Namens erklärt sind.

 
 Hersteller   Gewicht Breite     Pixels  XAufl Sp     Zeichensatz
    |           |        |         |      |     |        |
  -b&h-lucida-medium-r-normal-sans-18-180-75-75-p-106-iso8859-1
         |           |          |      |     |     |          |
     Schriftart    Neigung    Stil   Punkte YAufl Durchschn. Optionen des
                                                  Zeichen-   Zeichensatzes
                                                  breite

Dabei bedeuten im Einzelnen: Hersteller Meist die Herstellerfirma der Schriftart, z.B. adobe, dec, sony, manchmal aber auch nur eine weitere Schublade wie misc oder bitstream. Schriftart Die „Schriftfamilie“ also etwa Times, Symbol, Utopia,… Gewicht Das „Gewicht“ der Schwärze wie black, bold, demibold oder medium. Neigung Die Schräge der Schrift. i steht für italic (kursiv), r für roman (aufrecht). Breite Die Breite einer Schrift wie normal, narrow oder semicondensed. Stil Zusätzliche Stilangaben Pixels Das Höhenmaß der Schrift in Pixel (in einer bestimmten Punktgröße und Auflösung) Punkte Die Größe der Schrift in typographischen Punkten (1/72 Zoll) angegeben in Zehntel-Punkten X-Auflösung Horizontale Auflösung in Dots per Inch (DPI) in der die Schrift ursprünglich erstellt wurde. Y-Auflösung Vertikale Auflösung in Dots per Inch (DPI) in der die Schrift ursprünglich erstellt wurde. Spacing Die Beschreibung der Raumaufteilung einer Schriftart. Hier geht es darum, ob eine Schriftart proportional aufgebaut ist, also für ein i einen kleineren Platz als z.B. für ein o benötigt, oder nicht. Mögliche Werte sind hier p für proportional, m für monospaced also nicht proportional und c für charactercell, einer Technik, in der allen Zeichen ein gleichgroßer Rahmen gegeben wird, was sie auch wieder zur nicht-proportionalen Schrift macht. Durchschnittsbreite Die durchschnittliche Breite eines Zeichens dieser Schrift. Zeichensatz Die ISO-Standard, die diese Schrift enthält. Optionen des Zeichensatzes Die Nummer der ausgewählten Zeichensatzseite des Standards. Oft werden statt einzelner Angaben auch ein Sternchen angegeben, dann wird die erste passende Einstellung genommen. So wird ein * bei der Angabe der Neigung automatisch zu einem i.

5.1 Programme im Zusammenhang mit der Schriftverwaltung

5.1.1 xlsfonts

Das xlsfonts-Programm zeigt eine Liste aller Schriften, die der X-Server zur Verfügung stellt auf der Standard-Ausgabe. Durch die Angabe des Parameters -fn, gefolgt von einem Schriftnamen, der beliebig viele Sternchen enthalten kann (Achtung – Ausklammerung nicht vergessen – Shellsonderzeichen!) werden nur die auf die Wildcards passenden Schriften angezeigt.

Sollen z.B. alle Schriften angezeigt werden, die für die Verwendung in einem X-Term geeignet sind (Nichtproportional) also bei Spacing ein c haben, so genügt ein

  xlsfonts -fn "-*-*-*-*-*-*-*-*-*-*-c-*-*-*"

5.1.2 xfd

Der xfd-Client zeigt einen Zeichensatz einer bestimmten Schrift am Bildschirm an. Auch hier muß der Schriftname mit dem Parameter -fn angegeben werden.

5.1.3 xfontsel

Zum Auswählen von bestimmten Schriften eignet sich am Besten der xfontsel Client, der Schriften dadurch auswählt, dass er für jedes Feld eines Schriftnamens alle möglichen Werte zur Auswahl gibt. Jede Veränderung wird sofort dargestellt, so dass man sofort eine Kontrolle über das Ergebnis hat.

Um eine Schriftart dann in ein anderes Programm zu übernehmen, wird der select Button gedrückt. In jeder anderen Anwendung (meist xterm) kann jetzt durch das Drücken der beiden äußeren Maustasten (Emulate3Buttons) der Schriftname in den Tastaturpuffer geschrieben werden. Das hat zur Folge, dass das Programm den Eindruck hat, der Schriftname wäre getippt geworden.

5.2 Die Organisation der Schriften im Dateisystem

Der Pfad zu den Verzeichnissen, die die Schriftdateien enthalten wird Fontpath genannt und wird in der Datei /etc/XF86CONFIG angegeben. Er enthält eine Liste von Verzeichnissen (meist unter /usr/X11R6/lib/X11/fonts/…) die alle intern eine ähnliche Struktur haben.

Sie enthalten neben den eigentlichen Schriftdateien (Endungen .bdf .snf .pcf .spd .fb .ps) noch die folgenden Dateien fonts.dir Diese Datei enthält die Angaben, welche Schrift in welcher Datei zu finden ist. Am Anfang der Datei steht eine Nummer, die Anzahl der im Verzeichnis enthaltenen Schriften. Die weiteren Zeilen der Datei enthalten paarweise die Dateinamen mit zugehörigem Schriftnamen, also etwa

courBO10.snf  -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1

Damit diese Datei immer auf dem neuesten Stand ist, muß nach jeder Neuinstallation von Schriftdateien das Programm mkfontdir aufgerufen werden (mit dem Namen des Verzeichnisses, dessen fonts.dir Datei neu erstellt werden soll). fonts.scale Neben den Bitmap Fonts existieren auch noch skalierbare Schriften. In den Verzeichnissen mit solchen skalierbaren Schriften (z.B. speedo) existiert neben der fonts.dir auch die Datei fonts.scale. Sie enthält je einen Eintrag pro skalierbarer Schrift, mit den Größenangaben jeweils auf 0 gesetzt. fonts.alias Diese Datei enthält beliebige Alias-Namen, mit den dazugehörigen Schriftnamen. So kann etwa mit der Zeile

school15 -adobe-new century schoolbook-bold-r-normal-*-15-150-75-*-*-105-iso8859-1 

die Schrift -adobe-new … schlicht mit school15 angesprochen werden. Dieser Mechanismus hat aber Vor- und Nachteile. Es ist zwar so für einen User einfacher, eine Schrift auszuwählen, es kann aber bei einer Anwendung, die auf verschiedenen Rechnern läuft fatal sein, wenn es die Schrift bzw. eben das Alibi auf einem anderen Rechner nicht gibt.

6 Startvorgänge

6.1 Starten über xinit/startx

Die gewöhnliche Art des Startens von X11 über die Kommandozeile mit dem Befehl startx ruft den Befehl xinit auf. Dieser Prozess wird über eine Konfigurationsdatei (entweder $HOME/.xinitrc oder /var/X11R6/lib/xinit/xinitrc) eingestellt. Der X-Server startet also als eine normale Anwendung. Dieses System hat erhebliche Sicherheitslücken, so kann etwa von der X-Console – selbst wenn sie gesperrt ist – auf eine passende Textkonsole gewechselt werden (Strg-Alt-Fn), von der aus X gestartet wurde…

6.2 Starten mit dem X Display Manager (XDM)

Um die oben genannte Sicherheitslücke zu schließen, kann die gesamte Kontrolle des Einloggens auch an X11 weitergegeben werden. Der X-Display-Manager stellt ein Einloggfenster zur Verfügung, mittels dem die Authorisierung durchgeführt wird. Das heißt, dass es unterhalb von X11 keine offene Konsole mehr gibt…

7 X11 im Netz

Die gesamte Architektur von X11 beruht auf den TCP/IP-Netzprotokollen, die ja das X-Protokoll transportieren. Es muß also unter X11 auch Mechanismen geben, die diese Netzfähigkeit unterstützen.

7.1 Die Client-Seite

Der eigentliche Zugriff auf den X-Server wird durch eine Angabe des Servernamens erreicht. Diese Angabe hat immer 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 vielen Fällen kann sogar die Angabe der Displaynummer auch weggelassen werden (Displaynummern fallen nur an, wenn ein Server mehrere Graphikkarten anspricht) so dass einfach ein :0 als Serverbezeichnung reicht.

Damit es unter X11 möglich ist, lokale XClients 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.

Die Angabe eines Servers erfolgt bei XClients immer durch die Kommandozeilenoption

-display Serveradresse

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 etwa

  # netscape -display 192.168.200.1:0.0

7.2 Die Server-Seite

Das ist aber natürlich nur die eine Seite der Medallie, der XServer muß natürlich auch noch zulassen, dass ein Programm eines anderen Rechners auf ihm dargestellt werden darf. Es existiert also eine Art Zugriffskontrolle, die der Server steuern kann.

7.2.1 Host-basierte Zugriffskontrolle

Das Programm, mit dem diese Kontrolle realisiert wird heißt 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 /var/X11R6/lib/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.

7.2.2 User-basierte Zugriffskontrolle

Die Regelung der Zugriffskontrolle mittels Host-basierten Methoden wie oben besprochen ist besser als nichts, aber sie bringt keine wirkliche Sicherheit und dazu viele Probleme.

Wenn z.B. ein User des Rechners hal uns immer wieder Unsinn auf den Schirm schickt, können wir den Rechner hal zwar von der Liste der authorisierten Rechner streichen, dann können wir selbst aber auch keine Programme auf diesem Rechner starten, um sie bei uns darzustellen…

X11 bietet hier eine Möglichkeit, die sich der Unix-Zugriffsrechte bedient, um eine personifizierte Zugriffskontrolle anzubieten. Das Prinzip der MIT-MAGIC-COOKIES (in etwa zu übersetzen mit „Die Zauberkekse vom MIT“). Dabei handelt es sich um eine Art zufälliger Bytefolge (mit gerader Anzahl Bytes) die in einer Datei $HOME/.Xauthority gespeichert wird und die Zugriffsrechte -rw——- besitzt.

Jeder X-Server kann nun ein solches Cookie anfordern, bevor er einen Zugriff zulässt. Er überprüft, ob das Cookie mit einem seiner gespeicherten übereinstimmt und gibt nur dann den Zugriff frei.

Die einfachste Lösung ist also auch hier wieder das gemeinsame Nutzen eines zentralen HOME-Verzeichnisses über NFS, denn dann ist immer die gleiche Datei $HOME/.Xauthority angesprochen.

Zum Handling mit den Cookies steht das Programm xauth zur Verfügung, damit sind Cookies übers Netz transportierbar, aus der Datei extrahierbar usw.

Wichtig ist, dass diese Methode automatisch nur funktioniert, wenn das X-System über xdm gestartet wurde. Soll auch unter xinit-gesteuertem X11 dieses Verfahren angewandt werden, so sind einige mühsamme Umwege nötig. Dazu zählt schon mal die manuelle Erstellung des Cookies… Dazu muß der Server mit der Kommandozeilenoption

-auth $HOME/.Xauthority

gestartet werden.