CHIP-Spezial: X Window System richtig einrichten

Auf's richtige Outfit kommt es an

 
Auch das Unix-Betriebssystem Linux besitzt eine grafische Oberfläche. Das Look-and-Feel ist vom verwendeten Fenstermanager abhängig. Die Konfiguration dessen wird anhand des am weitesten verbreiteten FVWM in der Version 2 erläutert.

 

1. Erster Schritt: fvwm2 besorgen
2. Module und virtuelle Desktops
3. Menüs erleichtern das Leben
4. Unterschiedliche Farben für Desktops
5. Literatur

[Ein voller Unix-Desktop mit dem X Window System]

Abb. 1: Ein voller Unix-Desktop mit dem X Window System

Linux-Distributionen werden normalerweise mit einer grafischen Oberfläche, dem sogenannten X Window System, ausgeliefert. Diese wurde schon vor Jahren vom X-Consortium am Massachusettes Institute of Technology (MIT) für den Unix-Sektor entwickelt. Die Funktionsweise sehen Sie im Tech-Talk "So funktioniert das X Window System").

[twm-Look]

Abb. 2: Ein Fenster im twm-Look

Das Aussehen bestimmt normalerweise die Akzeptanz einer Oberfläche. So gesehen ist X11, wie es auch genannt wird, ziemlich triste, denn mit dem, was einem der X-Server bietet, läßt sich kaum arbeiten. Für das Aussehen von grafischen Elementen ist unter X11 ausschließlich einer der zahlreichen Fenstermanager (siehe Kasten "Fenstermanager") zuständig.

[vtwm-Look]

Abb. 3: Ein Fenster im vtwm-Look

Fenstermanager
twm Die Tab-Window-Manager Familie. Das Original stammt
ctwm vom MIT und wurde durch zusätzliche Desktops und
vtwm virtuelle Screens erweitert. Allgemein ist die twm-Familie
tvtwm ziemlich spartanisch ausgelegt.
amiwm Look and Feel vom Amiga Workbench.
fvwm Erwachsen aus dem twm, jedoch um virtuelle
fvwm2 Eigenschaften und 3D-Look erweitert.
fvwm95 Look and Feel von Windows95
gwm Generic Window-Manager, basiert auf einem Lisp-Dialekt
mwm Der Motif-Window-Manager baut natürlich auf Motif auf
ol(v)wm OpenLook - original für Sun Workstation.
swm ParcPlace WM (früher Solbourne), OpenLook.
AfterStep Look and Feel von NeXTStep.
HP-VUE Wird auf HP-Workstation ausgeliefert.

[ctwm-Look]

Abb. 4: Ein Fenster im ctwm-Look

Der Fenstermanager bestimmt das Aussehen von Fenstern, Titelbalken, Piktogrammen von Programmen (er weist ihnen welche zu), anklickbaren Elementen auf Fensterrahmen, Menüs, Reaktionen auf Tastendrücke und Mausbewegungen. Titelleisten können auch unterdrückt werden, was z.B. bei Kontrollelementen sinnvoll ist.

[fvwm2-Look]

Abb. 5: Ein Fenster im fvwm2-Look

Da das komplette Look & Feel vom verwendeten Fenstermanager abhängig ist, könnte man sich also auch einen vorstellen, der z.B. wie Windows95 aussieht. In der Tat kann man das und Hector Peraza hat genau dieses getan. Wer sich den fvwm95-2 installiert, wird zuerst denken, er hätte das falsche Betriebssystem gebootet. Diese Weiterentwicklung des im Folgenden beschriebenen fvwm2 läßt die X-Oberfläche genauso aussehen wie die des Zöglings aus dem Hause Microsoft.

[fvwm95-Look]

Abb. 6: Ein Fenster im fvwm95-Look

Erster Schritt: fvwm2 besorgen

Auch dieser Artikel setzt die in der CHIP 11/96 vorgestellte Linux-Distribution Xlinux voraus. Da dort jedoch lediglich der fvwm in der Version 1.x installiert ist, müssen Sie sich das Paket fvwm2bin.tgz von ... besorgen. Dieses packen Sie nun mit dem Befehl tar -xvfz /tmp/fvwm2bin.tgz im Hauptverzeichnis "/" aus. Anschließend müssen Sie den fvwm2 als kritische Applikation, also als letztes Programm in der Datei ~/.xinitrc (siehe CHIP 12/96) eintragen.

[Afterstep-Look]

Abb. 7: Ein Fenster im Afterstep-Look

Fortan ist der fvwm2 der von Ihnen verwendete Fenstermanager. Dieser erscheint im Gegensatz zum twm, der in der X11-Distribution enthalten ist, in einem 3D-Look. Die benutzte Konfiguration liegt in /usr/X11R6/lib/X11/fvwm2/system.fvwm2rc. Ein Teil dieser wird auf den folgenden Seiten beschrieben. Alles zu erläutern würde den Rahmen sprengen, daher sei hier auf die recht ausführlichen Manualpages verwiesen.

Wenn Sie etwas an der Konfiguration ändern möchten, kopieren sie diese Datei in ihr Heimatverzeichnis und benennen Sie sie in .fvwm2rc um (Achtung, den Punkt nicht vergessen!).

FVWM2 Module
FvwmAudio Spielt Klangdateien zu bestimmten Aktionen ab.
FvwmAuto "AutoRaise". Wenn sich der Mauszeiger eine gewisse Zeitlang über einem Fenster befindet, wird dieses selektiert und fokussiert.
FvwmBacker Sorgt dafür, daß die verschiedenen Desktops unterschiedlichen Hintergrund haben.
FvwmBanner Zeigt das FVWM-2-Banner.
FvwmButtons Eine frei positionierbare Tastenleiste, die auch X11-Applikationen beinhalten kann.
FvwmConsole Öffnet ein xterm, in dem Befehle eingegeben werden können. (nur fvwm95)
FvwmCpp FVWM-Frontend für den CPP-Präprozessor.
FvwmDebug Ermöglicht das Debuggen von Modulen, Ausgabe erfolgt auf stderr - also meist auf der Textconsole. (nur fvwm95)
FvwmForm Einfache Möglichkeit interaktive Eingabefelder zu erzeugen und Programmaufrufe zu manipulieren.
FvwmIconBox Sammelt Icons von ikonifizierten Fenstern.
FvwmIconMan Sammelt Icons bzw. Titelleisten in speziellen Fenstern.
FvwmIdent Zeigt Informationen zu einem selektierten Fenster an.
FvwmM4 FVWM-Frontend für den M4-Präprozessor.
FvwmPager Verwaltet Desktops und virtuelle Bildschirme.
FvwmSave Speichert den Desktop ab.
FvwmSaveDesk Speichert den Desktop ab.
FvwmScroll Erweitert einzelne Fenster um Scrolleisten.
FvwmTalk Interaktive Eingabemöglichkeit von FVWM-2-Befehlen.
FvwmWinList Liste der Fenster pro Desktop.

Module und virtuelle Desktops

Der fvwm2 besteht nicht nur aus dem Fenstermanager selbst und einer Bibliothek an Bitmaps, sondern auch aus einer Reihe von Modulen, die im Verzeichnis /usr/X11R6/lib/X11/fvwm2/installiert sind. Nebenbei bemerkt: Der eingangs erwähnte fvwm95 besteht aus dem fvwm2, einer ausgetüftelten Konfiguration und zwei zusätzlichen Modulen.

Module sind spezielle Programme, die vom fvwm aufgerufen werden und spezielle Aufgaben übernehmen (siehe Kasten "FVWM2 Module"). Sie laufen als eigenständige Prozesse und können somit während einer Sitzung auch beendet werden ohne daß der Fenstermanager dazu neu gestartet werden muß. Sie werden wie fvwm-interne Funktionen behandelt und haben ihre Konfiguration ebenfalls in der Datei ~/.fvwm2rc.

Die Zeilen in dieser Datei lassen sich in vier Kategorien einteilen. Zeilen, die mit einem Doppelkreuz ('#') anfangen, sind Kommentare und werden ignoriert. Zeilen, die mit einem Pluszeichen ('+') anfangen, enthalten zusätzliche Definitionen für Menüs oder Funktionen. Beginnt die Zeile mit einem Stern ('*'), dann behandelt sie die Konfiguration eines Moduls. Alle anderen Zeilen beinhalten Befehle, die das Aussehen oder Verhalten des fvwm2 manipulieren.

Eine Spezialität des fvwm2 ist die Behandlung von virtuellen Desktops. Genauso wie andere virtuelle Fenstermanager kann auch dieser Desktops verwalten, die größer sind als der tatsächliche Bildschirm. Angezeigt wird dabei nur ein Ausschnitt, quasi ein Guckloch. Wird die Maus über einen Rand bewegt, dann wird der Ausschnitt ebenfalls bewegt.

Folgende Befehlssequenz weist den fvwm2 an, daß jeder Desktop zwei Bildschirme in horizontaler und einen in vertikaler Richtung umfaßt, also doppelt so groß ist. Wenn der Mauscurser mehr als 100 Millisekunden über den Rand bewegt wird, dann wird der der Ausschnitt um 50% verschoben. Setzt man die Werte in den letzten beiden Zeilen herunter so kann man auch einen fließenden Übergang erhalten.

  DeskTopSize	2x1
  EdgeScroll	50 50
  EdgeResistance	100 100

Der fvwm2 verwaltet zwei Funktionen, InitFunction und RestartFunction, die beim Programmstart (=Init) bzw. beim Restart (über den Menüpunkt) ausgeführt werden. Von diesen werden normalerweise die Module aufgerufen oder über spezielle Menüpunkte.

Das folgende Fragment bewirkt, daß beim Start des fvwm2 die Hintergrundfarbe auf LightSlateBlue gesetzt wird, anschließend das Modul FvwmBanner aufgerufen wird, welches kurz das FVWM2-Logo anzeigt, und danach den FvwmPager startet. Die Optionen besagen, daß vier Desktops initialisiert werden sollen. Der FvwmPager ist das Modul, das eine Übersicht über die virtuellen und verschiedenen Desktops erstellt. Mit der Maus kann sowohl der aktuelle Ausschnitt als auch der Desktop gewechselt werden.

  AddToFunc InitFunction
  +	"I"	Exec xsetroot -solid LightSlateBlue
  +	"I"	Module FvwmBanner
  +	"I"	Module FvwmPager 0 3

[fvwm2-Pager]

Abb. 8: Der Pager vom fvwm2

Die letzte Zeile muß ebenfalls in die Funktion RestartFunction aufgenommen werden, damit das Modul bei einem Restart wieder geladen wird.

Mit dem Befehl

  Style "FvwmPager"	Sticky,NoHandles

wird definiert, daß dieses Modul auf allen Desktops sichtbar ist (Sticky) und daß es keine Ecken zur Änderung der Größe besitzt (NoHandles). Auf die gleiche Art und Weise können Sie auch das Aussehen von anderen Programmen beeinflussen, wie es in der Systemkonfiguration auch gemacht wurde.

Der fvwm2 erzeugt dekorative Rahmen um die meisten Fenster und erweitert sie um eine Titelleiste, die neben einem kurzen Text bis zu 10 frei definierbare Tasten enthält. Die erste Taste befindet sich links außen, die zweite rechts außen, die dritte wieder links, jedoch eine Stelle weiter innen, die vierte wieder rechts und ebenfalls eine Stelle weiter innen und so fort. Der Rahmen beinhaltet normalerweise abgesetzte Ecken (Handles), die die Größe des Fensters verändern, wenn man mit dem Mauszeiger an ihnen zieht.

Die Tasten in der Titelleiste können mit unterschiedlichen Aktionen verbunden werden. Das folgende Fragment bestimmt die Reaktion auf Drücken der linken Maustaste. Wird auf die erste Taste gedrückt, erhält man das Menü "Window-Ops", die rechteste Taste bewirkt ein Schließen des Fensters und die zweite Taste von links schließlich startet das Modul FvwmIdent und zeigt verschiedene Informationen über das Fenster an.

  Mouse 0 1 A Popup Window-Ops
  Mouse 0 2 A Close
  Mouse 0 3 A FvwmIdent
  Mouse 0 4 A Maximize 0 100
  Mouse 0 6 A Iconify

Als nächstes richten wir die Farben ein. Voreingestellt sind blaue Töne. Um jedoch zu demonstrieren, wie und wo diese definiert werden, wird die Oberfläche konsequent in Violettönen gehalten. Wem diese nicht zusagen, der hat die große Chance, in die Tiefen der fvwm2-Konfiguration einzusteigen. Mögliche Farben sind in der Datei /usr/X11/lib/X11/rgb.txt definiert. Als Hintergrund für nicht selektierte Fenster wird DarkOrchid und schwarze Schrift verwendet, für selektierte Fenster MediumOrchid und weiße Schrift.

  HilightColor white MediumOrchid
  Style "*" Color black/DarkOrchid

Der Befehl Style benötigt als ersten Parameter eine Applikation, Wildcards sind erlaubt (wie hier). Damit kann das Aussehen von Fenstern generell bzw. im Einzelnen bestimmt werden. Nachfolgende Definitionen können vorherige überschreiben, der letzte passende Eintrag ist entscheidend. Dieser Auszug legt fest, daß normale, nicht selektierte, Fenster eine Titelleiste in der Farbe DarkOrchid besitzen und daß der Titel mit schwarzer Schrift geschrieben wird.

Doch welche Schrift wird verwendet? Und wie ist der Text ausgerichtet? Dafür sind folgende Befehle vorgesehen. Wir wollen den Text zentriert in der Titelleiste ausrichten, diese soll dabei genauso "hervorgehoben" sein wie die anderen Elemente auch. Als Schrift soll nicht die voreingestellte, sondern Times (times) verwendet werden, und zwar kursiv (i) und fett (bold). Sie soll 18 Punkt groß sein und wenn die Applikation zu einem Icon verkleinert wurde nur noch 14 Punkt. Die folgenden drei Zeilen erledigen dieses:

  TitleStyle	Centered Flat
  WindowFont	-*-times-bold-i-*-*-*-180-*-*-*-*-*-*
  IconFont	-*-times-bold-i-*-*-*-140-*-*-*-*-*-*

Da der fvwm2 nicht so gut im Raten ist, weisen wir noch einigen oft benutzten Programmen entsprechende Icons zu, die auf dem Desktop abgelegt werden. Die erste Zeile besagt, daß das Piktogramm unknown1.xpm verwendet werden soll, wenn der Fenstermanager zu dem entsprechenden Programm kein Icon finden kann. (Eigentlich besagt die Zeile, das dieses Piktogramm für jedes Programm benutzt werden soll, was jedoch in den folgenden Zeilen für einige Applikationen wieder überschrieben wird.) Der Stil NoIconTitle hat zur Folge, daß dieses Icon ohne Text angezeigt wird.

  Style "*"		Icon unknown1.xpm
  Style "xterm"		Icon rterm.xpm
  Style "xterm"		NoIconTitle
  Style "Mosaic"		Icon xmosaic.xbm
  Style "Mosaic"		NoIconTitle

[FVWM-Buttons]

Abb. 9: FVWM-Buttons

Menüs erleichtern das Leben

Um sich unnötige Tastendrücke zu ersparen, legt man sich oft benutzte Kommandos auf Tasten (Modul FvwmButtons), fügt sie zu Menüs zusammen und legt sich diese auf Maustasten. Wie oben erwähnt, werden neue Menüpunkte mit einem Pluszeichen angehängt. Die Syntax ist ganz einfach, nach einer Beschreibung in Hochkommas folgt der Befehl. Der Befehl Title ist ein interner Befehl. Er bewirkt, daß der Text etwas abgesetzt dargestellt wird - wie eine Überschrift. Diese Überschriften sind natürlich auch nicht selektierbar.

  AddToMenu Optionen
  + "Desktops"			Title
  + "Desktop"			Desk 0 0
  + "Work"			Desk 0 1
  + "Internet"			Desk 0 2
  + "Fun"				Desk 0 3
  + "XTerm%mini.xterm.xpm%"	Exec xterm
  + ""				Nop

Hier werden fünf echte Menüpunkte ergänzt. Der - ebenfalls interne - Befehl Desk weist den fvwm2 an, auf den Desktop mit entsprechender Nummer (zweites Argument zählt) zu springen. Unsere Konfiguration richtet ja vier Desktops ein. Wie wir nachher sehen werden, haben diese auch unterschiedliche Titel und Farben. Der nächste Menüpunkt teilt dem fvwm2 über den Befehl Exec mit, daß ein xterm gestartet werden soll. Die letzte Zeile fügt eine Leerzeile an (Nop = No Operation).

In der Beschreibung eines Menüpunktes kann auch ein Bitmap, eine kleine Grafik, angegeben werden. Ist sie in Prozentzeichen gehüllt, wird sie links neben dem Text angezeigt. Ist sie jedoch in Sternchen eingeschlossen, dann wird das Bildchen über dem Text positioniert.

Dieses Menü legen wir nun auf die mittlere Maustaste. Wenn diese irgendwo auf dem freien Desktop (nicht über einem Fenster) gedrückt wird, öffnet sich ein Popup mit den Menüpunkten. Bei der Gelegenheit belegen wir die rechte Maustaste gleich mit der Liste der Fenster auf dem aktuellen Desktop.

  Mouse 2	R A Menu Optionen
  Mouse 3	R A WindowList

[Funktionsweise von X11]

Abb. 10: Funktionsweise von X11

Unterschiedliche Farben für Desktops

Damit die unterschiedlichen Desktops auch organisatorisch auseinandergehalten werden können, sollen ihnen unterschiedliche Farben zugewiesen werden. Der erste Desktop hat bereits LightSlateBlue als Hintergrundfarbe. Außerdem wurde das Modul FvwmPager geladen. Dieses weisen wir nun an, die verschiedenen Desktops in unterschiedlichen Farben darzustellen und ihnen unterschiedliche Titel zu geben. Zunächst wird jedoch festgelegt, daß das entsprechende Fenster in der Ecke rechts unten erscheinen soll.

  *FvwmPagerGeometry	-0-0
  *FvwmPagerDeskTopScale	75
  *FvwmPagerLabel		0 Desktop
  *FvwmPagerDeskColor	0 LightSlateBlue
  *FvwmPagerLabel		1 Work
  *FvwmPagerDeskColor	1 CadetBlue
  *FvwmPagerLabel		2 Internet
  *FvwmPagerDeskColor	2 VioletRed
  *FvwmPagerLabel		3 Fun
  *FvwmPagerDeskColor	3 salmon

Der Parameter FvwmPagerDeskTopScale bedeutet, daß Desktops im FvwmPager 1/75 der eigentlichen Größe haben sollen. Wird jetzt der Desktop gewechselt, dann ändert sich die Hintergrundfarbe jedoch nicht. Dazu muß das Modul FvwmBacker in die Init- und RestartFunction (siehe oben) eingebunden werden. Mit folgender Konfiguration wird die Hintergrundfarbe bei jedem Wechsel neu gesetzt - natürlich können hier auch Bilder angegeben werden, sie lenken jedoch oft während der Arbeit ab.

  *FvwmBackerDesk		0 -solid LightSlateBlue
  *FvwmBackerDesk		1 -solid CadetBlue
  *FvwmBackerDesk		2 -solid VioletRed
  *FvwmBackerDesk		3 -solid salmon

So funktioniert das X Window System

Die für viele Unix-Derivate vorhandene grafische Oberfläche (GUI), das sogenannte X Window System, unterscheidet sich grundlegend von den GUIs anderer Systeme wie z.B. Windows95 und OS/2.

Das X Window System wurde von Anfang an modular und netzwerkfähig konzipiert. Dadurch ist es bestens für den Einsatz in Verbindung mit einem Netzwerkbetriebssystem wie Unix geeignet. Die einzelnen Programme müssen dabei nicht unbedingt auf dem gleichen Rechner laufen, sie können - was besonders bei rechenintensiven Anwendungen wichtig ist - die Rechenleistung mehrerer Maschinen im Netzwerk bündeln.

Die wichtigste Komponente ist der X-Server. Neben einigen kommerziellen Varianten gibt es für PC-Unixe die Server vom XFree86-Project, dessen Konfiguration in der CHIP 12/96 ausführlich beschrieben wurde.

Der X-Client, z.B. die Textverarbeitung StarWriter, sendet dem X-Server die Daten, die er auf dem Bildschirm dargestellt haben möchte. Das sind Bitmaps, Informationen über verwendete Schriften, Texte etc.

Der X-Server wird nun versuchen, die Schriften aufzulösen. Bei entsprechender konfiguration fragt er zuerst einen X-Fontserver (Programmname xfs), der ihm die Schriften berechnet und zur Verfügung stellt. Anderenfalls übernimmt der X-Server die Berechnung selbst. Im Gegensatz zum Fontserver hat er jedoch keinen Cache-Algorithmus, so daß Schriften u.U. mehrfach berechnet werden.

Das Aussehen der Fenster wiederum ist Aufgabe des X-Window-Managers (siehe Kasten Fenstermanager). Dieser kommuniziert mit dem X-Server und stellt Rahmen, Tasten, Menüs etc. zur Verfügung, die der X-Server anschließend auf dem Bildschirm darstellt. Interaktionen wie Tastendrücke und Mausbewegungen werden dem Fenstermanager ebenfalls mitgeteilt. Darauf kann er reagieren und z.B. Fenster schließen oder Popup-Menüs öffnen.

Martin Schulze

Literatur

  1. Schulze, Martin: Grafische Oberfläche für Linux;
    CHIP 12/96, S. 116ff
  2. Kleinert, Jan; Sieg, Peter; So läuft Linux;
    CHIP 11/96, S. 134ff
  3. Nation, Robert; Hines, Charles et al.: FVWM2-Manpage;
    spätes 20. Jahrhundert
  4. Basse, Georg: Täuschend echt - Der Window-Manager FVWM2-95;
    Linux-Magazin 9/96, S. 54ff
Quelle: CHIP 4/97