Korseby Online - FVWM2

About FVWM2

Eigentlich ist sie nicht so schwer, man muß nur das Prinzip verstehen. Mit dabei sind außerdem auch noch kaum dokumentierte Tipps und Tricks.

Konfiguration von fvwm2

fvwm2 ist ein Window Manager. Er war einer der ersten, wenn nicht sogar der erste überhaupt für Linux. Deswegen hat er auch so geringe Hardwareanforderungen und kommt mit sehr wenig Speicher aus und ist demzufolge richtig schnell. Mittlerweile hat er leider ein wenig an Akzeptanz verloren, da andere Manager wie Gnome oder KDE ihm das Leben sehr schwer machen. Mit ein klein wenig Arbeit aber ist er teilweise immer noch leistungsfähiger als die neuen "Großen".

Das liegt wohl daran, daß man selbst heute noch alles mit der Hand schreiben muß. Die Anwender von heute sind grafische Oberflächen gewöhnt, die das Leben schon erleichtern können, aber längst nicht so viele Möglichkeiten bereit stellen. In fvwm2 kann man so gut wie alles einstellen. Vorrausgesetzt sind allerdings ein klein wenig Programmierahnung und, daß man keine Scheu vor Text hat.

Der Window Manager stellt einerseits nach der Installation unter /etc/X11/fvwm2/system.fvwm2rc (variiert manchmal bei den Distributionen) bereits eine vorgefertigte Konfigurationsdatei bereit, aber ist diese "etwas" häßlich. Zum Starten bekommt man ihn, wenn man im Heimatverzeichnis die Datei .xinitrc editiert. Dort steht irgendwo etwas von exec [WindowManager]. Statt WindowManager trägt man dort einfach fvwm2 ein. Schon fertig, er wird mit Aufruf von startx gestartet.

Nach einem ersten Start sollte es im Heimatverzeichnis die Datei .fvwm2rc geben. Falls nicht, kopiert man einfach die oben genannte system.fvwm2rc zu dieser um. Folglich editiert man nun nur an der Datei im Heimatverzeichnis rum.

Erste Schritte

Ich möchte jetzt nicht alle Funktionen auflisten, da ist man bei der Manual-Seite viel besser aufgehoben. Einfach mal man fvwm2 eingeben. Man erhält eine sehr große Liste an Befehlen und eine gute Beschreibung dazu.

Um sich die Tipparbeit etwas zu erleichtern, sollte man auf jeden Fall die entsprechenden Pfade zu den Icons usw. legen: (nur ab Version 2.2.2)

ModulePath /usr/lib/X11/fvwm2/
PixmapPath /usr/X11R6/include/X11/pixmaps/
IconPath /usr/local/icons/:/usr/share/icons/mini/
ImagePath /usr/X11R6/include/X11/pixmaps/

Wenn man die Farben der Menüs ändern möchte, so gibt man folgendes ein:

MenuStyle #333333 #cdcdcd #aaaaaa

Gleichbedeutend natürlich mit den Fensterdekorationen:

Style "*" Color #cccccc / #506070
HilightColor #ffffff #426fb2

Es helfen des weiteren die Befehle WindowFont und IconFont weiter zur Einstellung der entsprechenden Schriftarten.

Möchte man bestimmte grundlegende Stile festlegen, so geschieht das mit dem Befehl Style "*". Der Stern steht für alle Programme. Möchte man z.B. einen Stil für nur ein Programm festlegen, so ersetzt man das Sternchen einfach durch den Programmnamen. Auch Kombinationen sind erlaubt wie z.B. "Fvwm2*". Es führt an dieser Stelle wieder viel zu weit, alle Befehle aufzuzählen. Es sei wieder der Hinweis auf die Manual-Datei gelegt. Ein Beispielstil sieht folgendermaßen aus:

Style "*" FocusFollowsMouse
Style "*" RandomPlacement, SmartPlacement
Style "Fvwm*" NoTitle, NoHandles, Sticky, BorderWidth 0

Das Aussehen der Schalter und Fensterleisten

Mit dem Befehl Buttonstyle wird das Aussehen der einzelnen Schalter an den Fenstern eingestellt. Auf den Schaltern, sowie auf der Titelleiste und den Leisten um das Fenster lassen sich sogar Bilddateien legen. Hier erstmal ein paar Beispiele für Schalter ohne Bilder:

ButtonStyle 1 Vector 16 20x20@1 30x20@1 50x40@1 \
70x20@1 80x20@1 80x30@0 60x50@0 80x80@0 70x80@0 \
50x60@0 30x80@0 20x80@0 20x70@0 40x50@1 20x30@0 \
20x20@1
ButtonStyle 3 Vector 5 20x40@1 80x40@1 80x60@0 \
20x60@0 20x40@1
ButtonStyle 2 Vector 4 50x20@1 80x80@0 20x80@0 \
50x20@1
ButtonStyle 4 Vector 4 20x20@1 80x20@1 50x80@0 \
20x20@1

Diese Stile zeichnen Linien in die Schalter hinein. Sie verhalten sich wie ganz normale Vektoren. Also haben sie einen Anfangspunkt und einen Endpunkt. Dazwischen zeichnet fvwm2 die Linie mit der entsprechenden Farbe @1 also für Hintergrundfarbe und @0 für Vordergrundfarbe.

Nun folgend noch ein Beispiel für Bilder auf den Schaltern und Fensterleisten:

### Für die Schalter
ButtonStyle 2 Pixmap schalter_x.xpm
ButtonStyle 1 ActiveUp (Pixmap schalter_up.xpm) \
ActiveDown (Pixmap schalter_down.xpm)
ButtonStyle 1 Inactive Pixmap schalter_inaktiv.xpm

### für die Titelleiste
TitleStyle ActiveUp (TiledPixmap leiste_up.xpm) \
ActiveDown (TiledPixmap leiste_down.xpm)
TitleStyle Inactive Pixmap leiste_inaktiv.xpm

### für die anderen Leisten an den Rändern
BorderStyle ActiveUp (TiledPixmap rand_up.xpm) \
ActiveDown (TiledPixmap rand_down.xpm)
BorderStyle Inactive Pixmap rand_inaktiv.xpm

Es läßt sich auch noch das Verhalten verstellen und bestimmte Eigenschaften. Auch hier wieder der Hinweis auf das Manual.

Das Verhalten der Schalter und Fensterleisten

Bei fvwm2 kann man sogar beeinflussen, was passiert, wenn man mit der linken Maustaste auf die Fensterleiste klickt, oder was geschehen soll, wenn man die rechte drückt. Die Möglichkeiten sind hier enorm. Das Abfragen geschieht nach folgendem Schema:

Mouse 1 T A Move-or-RaiseLower
Mouse 1 S A Resize
Mouse 3 I A Menu WindowOps
Mouse 0 F A Resize

Erklärung: An zweiter Stelle steht die Nummer der Maustaste. 1 für die linke, 2 für die mittlere und 3 für die rechte. 0 steht für irgendeine Taste. An zweiter Stelle steht T für Titelleiste, S für die Seiten des Fensters, I für die Icons und F für die Ecken des Fensters.

An letzter Stelle steht die Funktion, die ausgeführt werden soll. Man kann sich sogar eine Funktion selber schreiben, indem man einfach den Namen dort eingibt und danach eine Funktion schaltet wie folgt:

AddToFunc Move-or-RaiseLower "M" Move
+ "C" RaiseLower

Die Möglichkeiten sind auch hier wieder recht vielfältig. Man kann das gesamte Verhalten des Fenster bestimmen.

Von Mauszeigern und Tasten

Desweiteren kann man auch die Mauszeiger verändern. Der entsprechende Befehl dafür lautet CursorStyle. Möchte man nun z.B. den Mauszeiger über der Titelleiste und allgemein ändern, so sieht das folgendermaßen aus.

CursorStyle TITLE 68
CursorStyle DEFAULT 68

Die Zahl legt jeweils das Aussehen des Cursors fest. Es werden allerdings nur gerade Zahlen berücksichtigt.

Recht ähnlich funktioniert das bei den Tasten. Möchte man systemübergreifende Tastenkombinationen erstellen, so ist das überhaupt kein Problem. Das folgende Beispiel zeigt, wie man mit einer Kombination der linken ALT-Taste und den Zeigertasten den Mauszeiger bewegen kann:

Key Left A M CursorMove -1 +0
Key Right A M CursorMove +1 +0
Key Up A M CursorMove +0 -1
Key Down A M CursorMove +0 +1

Möchte man nun, wenn man auf dem eigentlichen Desktop ist, mit Drücken der Taste ESCAPE ein Menü aufrufen, so könnte das so aussehen:

Key Escape R A Popup RootMenu

Automatisches Starten

Mit der Funktion InitFunction legt man fest, welche Programme und Module beim Starten des WindowManagers geladen werden sollen. Es verhält sich fast genauso wie die zahlreichen Menüs:

AddToFunc InitFunction "I" exec xsetroot -solid "#192d4d"
+ "I" exec wmsetbg background.xpm -t -m
+ "I" exec xset m 3 1
+ "I" module FvwmButtons
+ "I" exec krdb
+ "I" FvwmButtons DesktopIcons
+ "I" module FvwmBanner

Hier wird bereits einiges gestartet. Als erstes wird dem Desktop eine Hintergrundfarbe verpaßt und dann ein Hintergrundbild, welches gekachelt wird. Ich habe mich mit dem Befehl wmsetbg einfach beim WindowMaker bedient. Sollte dieser Window Manager nicht auf der Festplatte ruhen, so hilft der Befehl xsetbg sicher auch weiter. Danach folgt der Aufruf des Programmes xset, welches viele Funktionen vertritt. In diesem Falle stellt es die Geschwindigkeit der Maus ein. Als nächstes wird das fvwm2 eigene Modul Fvwm2Buttons geladen. Dazu später mehr. Danach folgt eine optische Ergänzung, die ältere X-Window basierende Programme wie MIXViews (MXV) oder auch Netscape Version 4 etwas schöner macht. Sie ist allerdings Bestandteil von KDE, ist aber auch einzeln zu haben im Internet.

Als zweit letztes folgt ein kleiner Trick, der später genauer erklärt wird. Und zum Schluß wird noch das Banner geladen, welchen man übrigens mit eigenen netten Bildern versehen kann.

Die Funktion RestartFunction legt fest, welche Programme bei einem Neustart von fvwm2 ausgeführt werden sollen.

AddToFunc RestartFunction "I" exec xsetroot -solid "#192d4d"
+ "I" exec wmsetbg background.xpm -t -m
+ "I" exec xset m 3 1
+ "I" module FvwmButtons
+ "I" FvwmButtons DesktopIcons

Eine Erklärung braucht nicht mehr zu folgen. fvwm2 eigene Module werden übrigens nach einem Neustart gekillt und erfordern einen erneuten Aufruf.

Die programmierten Module

Module sind solche kleinen Programme, die zum Zubehör von fvwm2 gehören. z.B. der Pager, welcher dem Benutzer zwischen den einzelnen Desktops herumschalten läßt. Auch hier sei wieder auf die Manuals verwiesen. Je nach Name des Moduls, kann man sich eine eigene Manpage anschauen: man FvwmButtons zeigt alle Infos zu dem Modul Buttons an.

Das Modul Buttons ist so ähnlich wie das bekannte GoodStuff. Es kann eine Taskleiste mit Programmen sein, aber auch ganz andere Dinge beinhalten.

Nachstehend eine Beispielkonfiguration mit Erklärungen:

### Größe des Fensters
*FvwmButtonsGeometry 400x44+0+0

### Hintergrund- und Vordergrundfarben
*FvwmButtonsBack rgb:cd/cd/cd
*FvwmButtonsFore rgb:33/33/33

### verw. Schriftart
*FvwmButtonsFont \
-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*

### Der "Container" gibt an, daß nun ein
### Bereich mit den Schaltern folgt
*FvwmButtons(Frame 2, Padding 0 0, \
Container(Rows 0 Columns 0 Frame 0 Padding 0 0))

### Der erste Button hat eine Umrandung von
### 1 Pixel und enthält ein Icon, ist so groß wie
### 2 Bereiche und zeigt beim Daraufklicken ein
### Menü an
*FvwmButtons(2x1, Frame 1, \
Icon /home/tisi/.kde/share/icons/fvwm2.xpm,
Action `Menu RootMenu`)

### Der 2. Button führt ein Programm aus beim
### Daraufklicken
*FvwmButtons(1x1, Frame 0, \
Icon /home/tisi/.kde/share/icons/nedit-sw_32.xpm,
Action `Exec "nedit" /usr/X11R6/bin/nedit &`)

### In diesem Button, der die Größe von 3 hat,
### wird ein Programm "hineingeladen". Es ist fest
### in diesem definierten Button drin und kann
### nicht verschoben werden.
### Es ist das fvwm2 eigene Modul Pager, welcher
### dem Benutzer zw. den einzelnen Desktops
### umherschalten läßt.
*FvwmButtons(3x1, Frame 1, Swallow(UseOld) \
"FvwmPager" "Module FvwmPager 0 0")

### Diesen Befehl bitte in eine Zeile schreiben.
### Er führt das Programm xosview aus und bettet
### es, wie eben den Pager, fest in einen Button
### ein. Die zusätzlichen Optionen sorgen dafür,
### daß nur die Prozessorauslastung angezeigt wird.
*FvwmButtons(1x1, Frame 0, Swallow(UseOld) \
"xosview" `Exec "xosview" xosview -captions -labels`)

### Als letztes wird noch eine Uhr fest
### eingebunden.
*FvwmButtons(1x1, Frame 0, Swallow(UseOld) \
"kclock" `Exec "kclock" kclock`)

### Ende des Containers
*FvwmButtons(End)

Man sieht also, daß es sehr viele Möglichkeiten gibt. Als nächstes kommt noch die Erklärung, wie man feste Icons auf den Desktop legen kann.

In dem Modul Buttons gibt es eine Option. Man kann den Hintergrund einfach durchsichtig machen. Das geschieht mit dem Befehl *FvwmButtonsPixmap none. Es ist nun ganz einfach die obige Liste im Hintergrund durchsichtig zu machen. Aber die meisten Benutzer möchten zusätzlich zu einer solchen Leiste auch noch Icons haben. Leider muß gesagt werden, daß man "normalerweise" nur ein Modul der gleichen Art laden kann. Lädt man es zweimal, so wird auch das zweite Mal das Modul mit den gleichen Inhalt geladen.

Doch es gibt auch Abhilfe. Wie bereits oben schon kurz erwähnt, kann man ein Modul auch 2 mal verschieden definieren. Man nennt es zu diesem Zweck einfach um. Dann ruft man es gesondert auf und weist den WindowManager darauf hin, zu welchem Modul das ganze dann gehört. Man startet es ganz normal, entweder in der InitFunction oder in einem Menü. Dabei steht an erster Stelle das fvwm2 eigene Modul und an zweiter Stelle der Name, dem man diesem 2. Modul verpaßt hat.

FvwmButtons DesktopIcons

Statt dem Namen FvwmButtons definiert man nun alles unter DesktopIcons. Nachstehend noch ein kleines, undokumentiertes Beispiel (es ist selbsterklärend).

*DesktopIconsGeometry 64x280+0+620
*DesktopIconsFore rgb:ff/ff/ff
*DesktopIconsFont \
-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*
*DesktopIconsPixmap none
*DesktopIcons(Frame 0, Title "K Hot", \
Icon 3d-file-blue-moc.xpm, \
Action `Exec "khot" nedit /home/tisi/Desktop/Stoff/K-Hot &`)

Mit ein wenig Kleinarbeit ist es so ohne Umstände auch möglich das beliebte Modul FvwmGoodStuff in 2 unterschiedlichen Varianten zu starten.

Sounds unter fvwm2

Für Sound ist das Modul FvwmAudio verantwortlich. Mit ihm lassen sich ganz bestimmten Systemaktionen, wie z.B. das Öffnen oder Schließen eines Fensters, Sounds zuweisen. Nachfolgend eine kleine Beispielkonfiguration.

*FvwmAudioPlayCmd /usr/local/bin/AF/aplay -d 0 -t -.05
*FvwmAudioDir /usr/local/sound/fvwm
*FvwmAudio startup goodmorning.au
*FvwmAudio shutdown destruct.au
*FvwmAudio unknown cat-1.au
*FvwmAudio destroy_window oh_my_god.au
*FvwmAudio focus_change goodmorning.au
*FvwmAudio raise_window goodmorning.au
*FvwmAudio lower_window goodmorning.au

Na Bitte! Ist doch ganz einfach, wenn man weiß, WIE es geht. Viel Spaß wünsche ich noch beim Ausprobieren.

Letzte Hinweise

Ich hoffe, der Artikel war einigermaßen verständlich.

Ein Wort zu den "\" am Ende von so mancher Zeile: Für diesen Artikel war es notwendig die teilweise recht langen Zeilen am Ende abzuschneiden. Damit fvwm2 aber diesen "Abschnitt" in der nächsten Zeile auch noch interpretiert, so kann man das "\" Zeichen benutzen. Als Abhilfe einfach das Zeichen am Ende entfernen und den Inhalt der darunter stehenden Zeile einfach an dessen Stelle schieben.