Xmonad: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) K taste |
Dirk (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
(4 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Xmonad ist ein | Xmonad ist ein kachelnder 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== | ==Installation== | ||
Zeile 6: | Zeile 6: | ||
pacman -S xmonad xmonad-contrib | pacman -S xmonad xmonad-contrib | ||
Dies installiert allerdings wahrscheinlich mehr als 500 MB, nämlich den ghc und seine Bibliotheken, so dass man sich der Konsequenzen bewusst sein sollte. Außerdem kann man ghc deinstallieren, sobald man Xmonad fertig konfiguriert hat, muss es jedoch bei jeder Konfigurationsänderung wieder installieren ([http://bbs.archlinux.org/viewtopic.php?pid=604843#p604843 Quelle]). | |||
Es ist an dieser Stelle | Es ist an dieser Stelle empfehlenswert, gleich ein paar nützliche Hilfsprogramme mit zu installieren: | ||
pacman -S dmenu xmobar trayer | pacman -S dmenu xmobar trayer | ||
Zeile 18: | Zeile 18: | ||
===Mauszeiger=== | ===Mauszeiger=== | ||
Xmonad setzt keinen Mauszeiger. Das führt u.U. tatsächlich dazu, dass man das etwas | Xmonad setzt keinen Mauszeiger. Das führt u.U. tatsächlich dazu, dass man das etwas ungewohnte X-Ausgaben erhält, auch beispielsweise in Menüs. Es empfiehlt sich aus diesem Grunde, vor der obengenannten exec-Zeile noch folgende Zeile in die ~/.xinitrc einzufügen: | ||
xsetroot -cursor_name left_ptr | xsetroot -cursor_name left_ptr | ||
Dies setzt einen echten, nach links oben gerichteten Maus''zeiger''. | Dies setzt einen echten, nach links oben gerichteten Maus''zeiger''. | ||
===Hintergrundbild=== | ===Hintergrundbild=== | ||
Obwohl ein Hintergrundbild bei einem ''tiling window manager'' in der Regel überdeckt wird, kann es beispielsweise bei Verwendung transparenter Fenster einen gewissen Sinn haben, ein solches zu setzen. Xmonad selbst verwendet nie ein Hintergrundbild. Man | Obwohl ein Hintergrundbild bei einem ''tiling window manager'' in der Regel überdeckt wird, kann es beispielsweise bei Verwendung transparenter Fenster einen gewissen Sinn haben, ein solches zu setzen. Xmonad selbst verwendet nie ein Hintergrundbild. Man kann aber manuell ein [[Desktophintergrund|Hintergrundbild einrichten]] | ||
==Erste Schritte== | ==Erste Schritte== | ||
Wenn Xmonad startet, | Wenn Xmonad startet, sieht vermutlich nicht viel mehr als einen ziemlich schwarzen Bildschirm. Das muss so sein, es ist nichts kaputt! Man vertraue auf folgendes Tutorial [http://xmonad.org/tour.html]. Die wichtigsten Tastenkombinationen: | ||
* {{taste|shift}} + {{taste|Alt}} + {{taste|Enter}} öffnet ein Terminal | * {{taste|shift}} + {{taste|Alt}} + {{taste|Enter}} öffnet ein Terminal | ||
* {{taste|Alt}} + {{taste|P}} ruft | * {{taste|Alt}} + {{taste|P}} ruft dmenu auf, das dann am oberen Bildrand erscheint und die Auswahl eines ausführbaren Programms erlaubt, das gestartet werden soll | ||
* {{taste|shift}} + {{taste|Alt}} + {{taste|Q}}''' beendet Xmonad (und damit X11) | * {{taste|shift}} + {{taste|Alt}} + {{taste|Q}}''' beendet Xmonad (und damit X11) | ||
(alle Kombinationen bei Verwendung oben verlinkter xmonad.hs mit {{taste|super}} statt {{taste|Alt}}) | (alle Kombinationen bei Verwendung oben verlinkter xmonad.hs mit {{taste|super}} statt {{taste|Alt}}) | ||
Zeile 46: | Zeile 45: | ||
===Empfehlungen=== | ===Empfehlungen=== | ||
* Es ist ratsam beim Experimentieren, wenn man den X-Server über {{taste|Strg}} + {{taste|Alt}} + {{taste|Backspace}} beenden kann. Im Falle einer nicht funktionierenden xmonad.hs | * Es ist ratsam beim Experimentieren, wenn man den X-Server über {{taste|Strg}} + {{taste|Alt}} + {{taste|Backspace}} beenden kann. Im Falle einer nicht funktionierenden xmonad.hs ist die Gefahr groß, dass er in einem mehr oder weniger undefinierten Zustand hängenbleibt und auf keine Taste mehr reagiert. Gegebenenfalls ist es aber auch möglich, mit {{taste|Strg}} + {{taste|Alt}} + {{taste|F2}} auf die zweite Konsole umzuschalten, sich dort anzumelden und mit {{ic|pkill X}} den X-Server zu beenden. | ||
* Viele Anwendungen benutzen {{taste|Alt}} selbst für ihre Zwecke und es würde auf der Stelle Überschneidungen geben. Aus diesem Grunde ist es empfehlenswert, Xmonad von Anfang an z.B. das linke {{taste|super}} ({{ic|LWin}} in der Konfiguration) zu bedienen, die wahrscheinlich ansonsten keine andere Funktion hätte. In der oben verlinkten xmonad.hs sind alle {{ic|Alt}}-Kombinationen automatisch {{ic|LWin}}-Kombinationen. | * Viele Anwendungen benutzen {{taste|Alt}} selbst für ihre Zwecke und es würde auf der Stelle Überschneidungen geben. Aus diesem Grunde ist es empfehlenswert, Xmonad von Anfang an z.B. das linke {{taste|super}} ({{ic|LWin}} in der Konfiguration) zu bedienen, die wahrscheinlich ansonsten keine andere Funktion hätte. In der oben verlinkten xmonad.hs sind alle {{ic|Alt}}-Kombinationen automatisch {{ic|LWin}}-Kombinationen. | ||
* Die Tastenkombination {{taste|Strg}} + {{taste|super}} + {{taste|X}} ({{ic|Ctrl-LWin-x}}) öffnet eine komplette "Umgebung", bei | * Die Tastenkombination {{taste|Strg}} + {{taste|super}} + {{taste|X}} ({{ic|Ctrl-LWin-x}}) öffnet eine komplette "Umgebung", etwa - bei entsprechenden Voreinstellungen - [[xterm]], [[emacs]][[Firefox]]. Das kann sich jeder natürlich so anpassen, wie er will. | ||
* | * Bestimmte Programme sollten nicht automatisch auf mehrere virtuelle Bildschirme verteilt werden. Das funktioniert im Regelfall, geht jedoch immer dann schief, wenn mal etwas anders ist. Es verblüfft Einsteiger auch, wenn man ein Programm startet und es ist nicht zu sehen (da auf einem anderen Bildschirm). | ||
* Im Fall, dass X11 automatisch mit Linux gestartet wird, so dass 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. Für alle individuell hinzugefügten Funktionen bieten sich {{ic|Ctrl-LWin}}-Kombinationen an. | * Im Fall, dass X11 automatisch mit Linux gestartet wird, so dass 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. Für alle individuell hinzugefügten Funktionen bieten sich {{ic|Ctrl-LWin}}-Kombinationen an. | ||
===Multimediatasten konfigurieren=== | ===Multimediatasten konfigurieren=== | ||
Man kann leicht, sofern die verwendete Tastatur über solche Tasten verfügt, Xmonad dazu verwenden, diese Tasten mit Funktionen zu hinterlegen | Man kann leicht, sofern die verwendete Tastatur über solche Tasten verfügt, Xmonad dazu verwenden, diese Tasten mit Funktionen zu hinterlegen: | ||
myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ | myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ | ||
Zeile 107: | Zeile 106: | ||
===Probleme mit Java-Applikationen=== | ===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, | 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über hinaus 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, dass 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: | Eine Möglichkeit, dem Java Runtime Environment mitzuteilen, dass 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: | ||
Zeile 147: | Zeile 146: | ||
[[Kategorie:Fenstermanager]] | [[Kategorie:Fenstermanager]] | ||
[[en:Xmonad]] |
Aktuelle Version vom 4. Januar 2022, 10:00 Uhr
Xmonad ist ein kachelnder 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
Dies installiert allerdings wahrscheinlich mehr als 500 MB, nämlich den ghc und seine Bibliotheken, so dass man sich der Konsequenzen bewusst sein sollte. 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 empfehlenswert, gleich ein paar nützliche Hilfsprogramme mit zu installieren:
pacman -S dmenu xmobar trayer
Notwendige Änderungen an der .xinitrc vor dem ersten Start
Damit Xmonad als Fenstermanager benutzt wird, muss der Aufruf in ~/.xinitrc eingetragen werden:
exec xmonad
Dies geschieht am besten auf der letzten in dieser Datei befindlichen Zeile. Es darf kein anderer Fenstermanager aktiv sein.
Mauszeiger
Xmonad setzt keinen Mauszeiger. Das führt u.U. tatsächlich dazu, dass man das etwas ungewohnte X-Ausgaben erhält, auch beispielsweise in Menüs. Es empfiehlt sich aus diesem Grunde, vor der obengenannten exec-Zeile noch folgende Zeile in die ~/.xinitrc einzufügen:
xsetroot -cursor_name left_ptr
Dies setzt einen echten, nach links oben gerichteten Mauszeiger.
Hintergrundbild
Obwohl ein Hintergrundbild bei einem tiling window manager in der Regel überdeckt wird, kann es beispielsweise bei Verwendung transparenter Fenster einen gewissen Sinn haben, ein solches zu setzen. Xmonad selbst verwendet nie ein Hintergrundbild. Man kann aber manuell ein Hintergrundbild einrichten
Erste Schritte
Wenn Xmonad startet, sieht vermutlich nicht viel mehr als einen ziemlich schwarzen Bildschirm. Das muss so sein, es ist nichts kaputt! Man vertraue auf folgendes Tutorial [1]. Die wichtigsten Tastenkombinationen:
- ⇧ Shift + Alt + ↵ Enter öffnet ein Terminal
- Alt + P ruft dmenu auf, das dann am oberen Bildrand erscheint und die Auswahl eines ausführbaren Programms erlaubt, das gestartet werden soll
- ⇧ Shift + Alt + Q beendet Xmonad (und damit X11)
(alle Kombinationen bei Verwendung oben verlinkter xmonad.hs mit ⊞ Super statt Alt)
Die Konfigurationsdatei xmonad.hs
Damit Xmonad an individuelle Bedürfnisse angepasst werden kann, muss eine Konfigurationsdatei mit dem Namen ~/.xmonad/xmonad.hs
erstellt werden.
Es kann aus Platzgründen nicht Sinn dieser Seite sein, die umfangreiche Konfiguration von Xmonad vollständig zu erläutern. Für den Einstieg empfiehlt es sich, eine fertige Konfiguration zu übernehmen und diese schrittweise an die eigenen Bedürfnisse anzupassen.
Konfigurationsbeispiele findet man z.B. hier:
- Datei:Xmonad.hs.txt und Datei:Xmobarrc.txt
- Konfiguration von John Goerzen
- Konfiguration von Christian Taube
Empfehlungen
- Es ist ratsam beim Experimentieren, wenn man den X-Server über Strg + Alt + ← Löschen beenden kann. Im Falle einer nicht funktionierenden xmonad.hs ist die Gefahr groß, dass er in einem mehr oder weniger undefinierten Zustand hängenbleibt und auf keine Taste mehr reagiert. Gegebenenfalls ist es aber auch möglich, mit Strg + Alt + F2 auf die zweite Konsole umzuschalten, sich dort anzumelden und mit
pkill X
den X-Server zu beenden. - Viele Anwendungen benutzen Alt selbst für ihre Zwecke und es würde auf der Stelle Überschneidungen geben. Aus diesem Grunde ist es empfehlenswert, Xmonad von Anfang an z.B. das linke ⊞ Super (
LWin
in der Konfiguration) zu bedienen, die wahrscheinlich ansonsten keine andere Funktion hätte. In der oben verlinkten xmonad.hs sind alleAlt
-Kombinationen automatischLWin
-Kombinationen. - Die Tastenkombination Strg + ⊞ Super + X (
Ctrl-LWin-x
) öffnet eine komplette "Umgebung", etwa - bei entsprechenden Voreinstellungen - xterm, emacsFirefox. Das kann sich jeder natürlich so anpassen, wie er will. - Bestimmte Programme sollten nicht automatisch auf mehrere virtuelle Bildschirme verteilt werden. Das funktioniert im Regelfall, geht jedoch immer dann schief, wenn mal etwas anders ist. Es verblüfft Einsteiger auch, wenn man ein Programm startet und es ist nicht zu sehen (da auf einem anderen Bildschirm).
- Im Fall, dass X11 automatisch mit Linux gestartet wird, so dass 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. Für alle individuell hinzugefügten Funktionen bieten sich
Ctrl-LWin
-Kombinationen an.
Multimediatasten konfigurieren
Man kann leicht, sofern die verwendete Tastatur über solche Tasten verfügt, Xmonad dazu verwenden, diese Tasten mit Funktionen zu hinterlegen:
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") ...
Die hexadezimalen Codes für die Multimediatasten können unter /usr/include/X11/XF86keysym.h nachgeschlagen oder mit xev ermittelt werden. xev erzeugt beispielsweise beim Drücken einer bestimmten Taste folgende Ausgabe:
KeyPress event, serial 27, synthetic NO, window 0xe00001, root 0xac, subw 0x0, time 2251453, (408,219), root:(409,238), state 0x0, keycode 223 (keysym 0x1008ff10, XF86Standby), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False
Es kann allerdings sein, dass im konkreten Fall nicht alle physisch vorhandenen Tasten tatsächlich solche Codes senden. Das hängt von der Hardware und dem aktuell verwendeten Tastaturtreiber ab. Einige Hersteller boten bzw. bieten auch spezifische Zusatzkomponenten (Treiber) für ihre Maschinen an.
Mediaplayer im Fullscreen-Modus betreiben
Viele Mediaplayer besitzen einen Fullscreen-Modus. Xmonad verhindert zunächst (wie andere Fenstermanager auch) diesen Modus. Man muss ihm explizit mitteilen, dass dies eine erlaubte Operation für ein Fenster ist. [2] nennt folgende Lösung:
import qualified XMonad.StackSet as W import XMonad.Hooks.ManageHelpers import XMonad.Layout.NoBorders main = xmonad defaultConfig { ... , layoutHook = smartBorders (yourExistingLayoutHook) -- kein Rahmen um das Fullscreen-Fenster , manageHook = myManageHooks -- Hooks einbinden ... }
mit myManageHooks entweder
-- Allows focusing other monitors without killing the fullscreen myManageHooks = composeAll [ isFullscreen --> (doF W.focusDown <+> doFullFloat) ]
oder
-- Single monitor setups, or if the previous hook doesn't work myManageHooks = composeAll [ isFullscreen --> doFullFloat ]
In den meisten Fällen wird man die zweite Variante wählen.
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über hinaus 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, dass 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" ... }
[3] nennt weitere Beispiele bei ggf. anderen Bedingungen.
Probleme beim Update
In den letzten zwei Jahren kam es immer wieder und regelmäßig zu Problemen mit den Abhängigkeiten zwischen den einzelnen XMonad- und Haskell-Paketen. Üblicherweise gelingt zwar eine Installation, Updates gehen jedoch oft schief. pacman sagt dann, einige Pakete hätten nicht aktualisiert werden können usw. Abhilfe (im Sinne eines Notbehelfs) schafft eine komplette Deinstallation (inkl. des Compilers ghc) mit anschließender Neuinstallation:
pacman -Rs xmonad-contrib xmonad pacman -S xmonad-contrib xmonad
Man hat danach wieder eine saubere Installation, ohne Pakete von Hand hinzubasteln zu müssen. Diese beiden Schritte gehen meist schneller als man denkt, vielleicht 2min, denn die Pakete hat man ja üblicherweise im Cache.
Vor dem Neustart des X-Servers ist es angebracht, das lokale binary von XMonad, das sich in ~/.xmonad befindet, neu zu compilieren:
xmonad --recompile
Läuft dieser Befehl ohne Fehlermeldung durch, hat man direkt sichergestellt das keine Fehler in der Datei xmonad.hs enthalten sind und alle Abhängigkeiten verfügbar sind.
Die installierten GHC-Module inklusive der Version erfährt man durch ghc-pkg list
. In der Liste sollten xmonad und xmonad-contrib in der Version 0.10 oder höher aufgeführt sein.
Weblinks
- Xmonad Homepage
- Dokumentation aller XMonad-Erweiterungen
- Screenshots
- FAQ im Haskell Wiki (darin viele sehr nützliche Antworten!)