Xmonad

Aus wiki.archlinux.de

Einleitung

Xmonad ist ein "teilender" Fenstermanager (tiling window manager) wie dwm oder wmii, allerdings einer, der nicht dieser Familie entstammt. Er wurde in der Programmiersprache Haskell geschrieben, deren Compiler ghc auch zur Laufzeit (nämlich zur Konfiguration) benötigt wird.

Installation

Die Installation besteht aus dem Kommando

pacman -S xmonad xmonad-contrib

Man beachte jedoch, daß diese simple Zeile wahrscheinlich mehr als 500 MB installiert, nämlich den ghc und seine Bibliotheken, was vielleicht für den einen oder anderen eine ernsthafte Sinnfrage darstellt. Xmonad allerdings ist eine großartige Software und wird so manchen Zweifler dafür belohnen, dieses Wagnis einzugehen. Außerdem kann man ghc deinstallieren, sobald man Xmonad fertig konfiguriert hat, muss es jedoch bei jeder Konfigurationsänderung wieder installieren (Quelle).

Es ist an dieser Stelle klug, gleich ein paar nützliche Hilfsprogramme mit zu installieren. Man wird sie sehr wahrscheinlich einsetzen.

pacman -S dmenu xmobar

Am Ende wird xmonad in ~/.xinitrc als aktiver Fenstermanager eingetragen.

exec xmonad

Ich fand kürzlich noch einen Hinweis im englischsprachigen Artikel zu Xmonad, den ich hier zitiere: Xmonad setzt keinen Mauszeiger. Das führt u.U. tatsächlich dazu, daß man das etwas klobige und ungewohnte X erhält, auch beispielsweise in Menüs. Es empfiehlt sich aus diesem Grunde, vor obige exec-Zeile noch folgende Zeile in die ~/.xinitrc einzufügen:

xsetroot -cursor_name left_ptr

Dies setzt einen echten, nach links oben gerichteten Mauszeiger.

Bevor Xmonad allerdings das erste mal sinnvoll gestartet werden kann, muß eine Konfigurationsdatei mit dem Namen ~/.xmonad/xmonad.hs erstellt werden, wofür man in die wundersame Welt der Haskell-Programmierung abtauchen darf ...

Die Konfigurationsdatei xmonad.hs

Es kann aus Platzgründen nicht Sinn dieser Seite sein, die umfangreiche Konfiguration von Xmonad vollständig zu erläutern. (Siehe hierzu folgende Anleitung [1] und Beipiele [2])

Ich stelle allerdings für Interessenten hier meine eigenen, lange erprobten Konfigurationsdateien xmonad.hs [3] und .xmobarrc [4] zur Verfügung, die dmenu und xmobar erfordern. (Allein in letzterer stecken mehrere Stunden Arbeit ...) Aber Vorsicht beim Ändern! Es empfiehlt sich beim Experimentieren, wenn man den X-Server über Ctrl-Alt-Backspace beenden kann. Im Falle einer nicht funktionierenden xmonad.hs ist ist die Gefahr groß, daß er in einem mehr oder weniger undefinierten Zustand hängenbleibt und auf keine Taste mehr reagiert.

Wesentlich ist (bzgl. konkret meiner beiden Dateien), die Funktion der Alt-Taste, die unter Xmonad zu dessen Steuerung voreingestellt ist, ist auf die linke Windows-Taste gelegt, damit diese ansonsten funktionslose Taste etwas zu tun bekommt und es, was der eigentliche Grund ist, keine Überschneidungen mit emacs gibt. Alle Alt-Kombinationen sind mit dieser xmonad.hs also automatisch LWin-Konbinationen. Die Tastenkombination Ctrl-LWin-x öffnet eine "Umgebung", bei mir ein xterm, einen emacs mit gnus drin sowie einen firefox. Das kann sich jeder natürlich so anpassen, wie er will.

Ich habe mit der Zeit davon abgesehen, bestimmte Programme automatisch auf bestimmte virtuelle Bildschirme zu platzieren. Das funktioniert im Regelfall, geht jedoch immer dann schief, wenn mal etwas anders ist. Ich habe das als lästig empfunden. Es verblüfft Beginner auch, wenn man ein Programm startet und es ist nicht zu sehen (da auf einem anderen Bildschirm).

Im Fall, daß X11 automatisch mit Linux gestartet wird, so daß X11 beenden auch Linux beenden heißt, ist es klug, Tastenkombinationen für halt bzw. reboot einzurichten. Man kann auch häufig gebrauchte Programme über Tasten, nicht über dmenu, starten. Ctrl-LWin-Kombinationen bieten sich für solche Fälle an.

Multimediatasten konfigurieren

Man kann leicht, sofern die verwendete Tastatur über solche Tasten verfügt, Xmonad dazu verwenden, diese Tasten mit Funktionen zu hinterlegen, ohne dazu spezielle Programme wie keytouch oder xbindkeys installieren und verwenden zu müssen:

myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
   [
   -- AudioLowerVolume
     ((0, 0x1008ff11), spawn "amixer set Master 2- unmute")
   -- AudioRaiseVolume
   , ((0, 0x1008ff13), spawn "amixer set Master 2+ unmute")
   -- AudioMute
   , ((0, 0x1008ff12), spawn "amixer set Master toggle")
   -- StandBy
   , ((0, 0x1008ff10), spawn "sudo /usr/sbin/hibernate -F /etc/hibernate/ususpend-disk.conf")
  ...

Ich habe leider noch keinen Weg gefunden, diese hexadezimalen Codes zu ermitteln oder einmal irgendwo dargestellt zu finden. Sie enthalten bereits die üblicherweise blaue Fn-Taste und sind möglicherweise maschinenabhängig.

Probleme mit Java-Applikationen

Einige Java-Applikationen (RssOwl, SmartSVN) verursachen schwer zu beschreibende Probleme. Sie akzeptieren beispielsweise keine Größenänderungen des Hauptfensters oder nur bis zu einer bestimmten Größe, darüberhinaus gibt es dann einfach ungenutzte, graue Flächen. Menüs funktionieren nicht wie gewohnt oder merkwürdig geometrisch versetzt. Die Ursachen dafür liegen in den begrenzten Möglichkeiten älterer Java Runtime Environments, den aktuellen Fenstermanager zu erkennen.

Eine Möglichkeit, dem Java Runtime Environment mitzuteilen, daß es solche Applikationen unter XMonad durchaus richtig anzeigen kann, ist das Vorgaukeln eines bestimmten, bekannten Fenstermanagers. Der folgende Code in der xmonad.hs tut dies:

import XMonad.Hooks.SetWMName

main = do
   xmonad $ defaultConfig
   {
     ...
   , startupHook = setWMName "LG3D"
     ...
   }

[5] nennt weitere Beispiele bei ggf. anderen Bedingungen.

Erste Schritte

Wenn Xmonad startet wird man etwas ernüchtert dreinschauen, denn man sieht vermutlich nicht viel mehr als ein schwarzes Fenster. Man vertraue auf folgendes Tutorial [6]. Wichtig ist: es ist nichts kaputt! Es muß so sein. Shift-Alt-Enter öffnet ein Terminal, über Alt-p ruft man dmenu auf, das am oberen Bildrand erscheint und die Auswahl eines Programms erlaubt, das gestartet werden soll. Und die wichtige Tastenkombination zum Verlassen (X11 beenden) lautet Shift-Alt-Q.

Weblinks

Xmonad Homepage [7]

Screenshots [8]

FAQ im Haskell Wiki [[9]] (darin viele sehr nützliche Antworten!)