Hlavní navigace

Dlaždice trochu jinak: seznámení s XMonad

Jaromír Vojtaj 28. 8. 2014

V předchozím dílu seriálu o tiling WM jsme se věnovali WM Subtle. V dnešním díle budeme pokračovat a to sice úvodem do dalšího správce oken – XMonad. Ten je napsaný ve funkcionálním jazyce Haskell a pomocí tohoto jazyka je možné jej také konfigurovat. První verze XMonad vyšla teprve v roce 2007.

Jak je z článku na Wikipedii zřejmé, XMonad je možné využít v mnoha linuxových i *BSD distribucích. Poslední stabilní verze vyšla na začátku roku 2013, což je cca 1,5 roku zpátky. Tato aktuální verze se také nachází v Debianu Testing:

# ~$ aptitude search xmonad
i A libghc-xmonad-contrib-dev - Extensions to xmonad
v libghc-xmonad-contrib-dev-0.11.3-f30c6
- i A libghc-xmonad-contrib-doc - Extensions to xmonad; documentation
p libghc-xmonad-contrib-prof - Extensions to xmonad; profiling libraries
v libghc-xmonad-contrib-prof-0.11.3-f30c6
i A libghc-xmonad-dev - Lightweight X11 window manager
v libghc-xmonad-dev-0.11-bd2b0
i A libghc-xmonad-doc - Lightweight X11 window manager; documentation
p libghc-xmonad-prof - Lightweight X11 window manager; profiling libraries
v libghc-xmonad-prof-0.11-bd2b0
- i xmonad - Lightweight X11 window manager written in Haskell

Jak je z výpisu patrné, je zde k dispozici více dalších balíčků a některé z nich jsou automaticky instalované příkazem

# ~$ aptitude install xmonad

Důležitou součástí je balíček GHC (Glasgow Haskell Compiler), který je nutný pro kompilaci změn v XMonad.

Co může být trochu zarážející, je celková velikost instalovaných balíčků. Před XMonad byl instalován pouze Xorg, mc a Lightdm a tato velikost je skoro 550 MB. Samo o sobě to sice není mnoho, ale na „lehkotonážní“ WM je to celkem dost. Samotný XMonad má na Debianu tři důležité balíčky:

  • xmonad – umožní spustit WM ve výchozí konfiguraci

  • libghc-xmonad-dev – umožní měnit konfigurační soubor při využití základní funkcionality

  • libghc-xmonad-contrib-dev – obsahuje všechny rozšiřující moduly

Hlavní webová stránka projektu se nachází na adrese Xmonad.orgHned na úvodní straně je možné najít snímky obrazovek a videa. Také je zde krátký výčet toho, jaký XMonad je:

  • tiling – dynamický styl správy oken

  • minimalistický – žádné dekorace oken, žádný panel, žádné ikony, nic podobného

  • stabilní – postaven na Haskellu a smart programming practices

  • rozšiřitelný – existuje velmi obsáhlá knihovna rozšíření

  • mocný – obsahuje už v základu mnoho možností včetně práce na více obrazovkách

  • jednoduchý – snaha o maximální využitelnost výchozí konfigurace

  • přátelský – je k dispozici mailing list a irc kanál a velmi rozsáhlá nápověda

XMonad je po instalaci ve výchozí konfiguraci, ale žádný konfigurační soubor není třeba hledat. Kdo by ho ale chtěl nebo potřeboval, je k dispozici přímo na webu projektu.

Jedná se o soubor xmonad.hs. Tento soubor se umístí do uživatelského adresáře $HOME/.xmonad. Ještě předtím, než začnete s XMonad cokoliv zkoušet, je dobré podívat se na výchozí nastavení klávesových zkratek.

Vzhledem k tomu, že po spuštění WM se prakticky nic viditelného nestane a plocha nereaguje na žádný „běžný“ pokyn myši či klávesnice, bude se tato mapa klávesových zkratek a myších akcí docela hodit. Já z celé řady uvedu pouze pár základních:

  • Alt+Shift+Enter – otevře terminál, standardně xterm

  • Alt+Shift+c – zavře aktuální okno

  • Alt+Shift+q – zastavení WM a přechod do DM

  • Alt+q – restart WM

Vzhledem k tomu, že na „čistě“ spuštěném XMonad WM není prakticky nic vidět, ukážeme si, jak to vypadá po spuštění jednoho, dvou a tří oken. Pro tři terminály si ukážeme, jak je možné pomocí klávesové zkratky Alt+Mezerník měnit vzhled stylu umístění oken. Pomocí kombinací Alt+Shift+j a Alt+Shift+k pak můžeme měnit pořadí oken. Pomocí kombinací Alt+h nebo Alt+l pak můžeme měnit velikost nebo spíše poměr mezi velikostí hlavního okna vůči ostatním. Na webu projektu naleznete více informací a příklady.

Moje obrázky ze zkušebního virtuálu jsou pak v následující galerii.

Ještě bych se zmínil o jedné věci: výše v textu bylo uvedeno, že výchozím terminálem je XTerm. Nyní provedeme instalaci jiného terminálu, např.

# ~$ sudo aptitude install sakura

Pokud po instalaci znovu spustíme Alt+Shift+Enter (zatím jsme vůbec nevytvořili uživatelskou konfiguraci XMonad!), neobjeví se XTerm, ale rovnou Sakura!.
Ve výchozí konfiguraci je nastaveno spuštění aplikací dmenu a gmrun pomocí kombinací Alt+p a Alt+Shift+p. Proto obě aplikace instalujeme:

# ~$ sudo aptitude install dmenu gmrun

a vyzkoušíme – viz obrázky:

To by asi pro prvotní seznámení s XMonad mohlo stačit a nyní se pustíme do uživatelské konfigurace. Tu je možné provést dvojím způsobem, kdy oba požadují vytvoření příslušného adresáře uživatele:

# ~$ cd /home/user
mkdir .xmonad

Do takto vytvořeného adresáře můžeme nakopírovat soubor xmonad.hs z výše uvedeného odkazu a v něm pak provádět potřebné změny a úpravy. Druhou variantou je vytvořit prázdný soubor xmonad.hs a v něm se odkázat na výchozí konfiguraci a buď přidávat nové položky nebo měnit nastavení položek výchozích. My se zaměříme na druhou variantu a vytvoříme tedy prázdný soubor:

# ~$ cd .xmonad
touch xmonad.hs

Do souboru vložíme velmi jednoduchý kód:

import XMonad

    main = xmonad $ defaultConfig
        { borderWidth        = 2
        , terminal           = "xterm"
        , normalBorderColor  = "#cccccc"
        , focusedBorderColor = "#cd8b00" }

Po uložení změn je vhodné ověřit, jestli je konfigurační soubor syntakticky a typově správný (je třeba si uvědomit, že se vlastně jedná o kód v Haskellu). Z terminálu je také možné WM restartovat. To je možné provést těmito příkazy:

# ~$ xmonad --recompile
xmonad --restart

Pokud se neobjeví žádné hlášení, tak je konfigurace v pořádku. Pokud by byla v souboru nějaká chyba (schválně jsem vynechal poslední složenou závorku), objeví se chybové hlášení. Ono by se vlastně ani nic složitého nemělo dít, protože se použije poslední platná konfigurace (prostě se nepřeloží nová verze „aplikace“ a zůstane ta stará…). Chybové hlášení je vidět na obrázku:

Po správné konfiguraci můžeme restartovat příkazem Alt+q a použít nové nastavení. Pokud zadáme Alt+Shift+Enter, otevře se XTerm a vzhled vypadá trochu jinak. Viz obrázek:

Nyní provedeme změnu hlavního modifikátoru z klávesy Alt na Win. K tomu je třeba změnit náš konfigurační soubor takto:

import XMonad

defaultModMask :: KeyMask
defaultModMask = mod4Mask

    main = xmonad $ defaultConfig
        { borderWidth        = 2
        , terminal           = "xterm"
        , normalBorderColor  = "#cccccc"
        , focusedBorderColor = "#cd8b00"
        , XMonad.modMask     = defaultModMask }

Pak už obvyklé xmonad –recompile a následně pak xmonad –restart nebo Alt+q. Poté už ale naše „známé“ příkazy nefungují, protože Alt bylo nahrazeno Win a tak je nutné provádět např. Win+Shift+Enter pro otevření terminálu a Win+Shift+c pro jeho zavření.
Můžeme zkusit další úpravu: spuštění aplikace při startu WM. Podobně jsme to zkoušeli na Subtle a Parcellite. Problém je v tom, že zatím nemáme žádný panel a systémovou oblast, kde by se ikona aplikace mohla zobrazit. Takže to zkusíme trochu jinak a upravíme konfiguraci takto:

import XMonad

defaultModMask :: KeyMask
defaultModMask = mod4Mask

    main = xmonad $ defaultConfig
        { borderWidth        = 2
        , terminal           = "xterm"
        , normalBorderColor  = "#cccccc"
        , focusedBorderColor = "#cd8b00"
        , XMonad.modMask     = defaultModMask
        , startupHook = do
                      spawn "sakura"}

Po zkoušce správnosti musíme nyní WM ukončit příkazem Win+Shift+q a při opětovném spuštění máme na ploše otevřený terminál Sakura. To je opravdu ale jenom pro jednoduchou demonstraci, takže se následně pustíme do konfigurace panelu a jeho zobrazení v XMonad. Ještě předtím si ale ukážeme možnosti, jak doplnit nastavené klávesové zkratky o další, uživatelské. Bylo by samozřejmě možné použít výchozí konfigurační soubor a v něm provádět změny či přídavky, ale my si to ukážeme na naší „zjednodušené“ konfiguraci.

import XMonad
import XMonad.Util.EZConfig(additionalKeys)

defaultModMask :: KeyMask
defaultModMask = mod4Mask

    main = xmonad $ defaultConfig
        { borderWidth        = 2
        , terminal           = "xterm"
        , normalBorderColor  = "#cccccc"
        , focusedBorderColor = "#cd8b00"
        , XMonad.modMask     = defaultModMask
        , startupHook = do
                      spawn "sakura"
        } `additionalKeys`
        [ ((0, xK_Print), spawn "gcalctool")  ]

Jednoduchým doplněním tří řádků – importu příslušného rozšíření a přidání příkazu na spuštění GCalcTool pomocí klávesy PrintScreen jsme doplnili defaultní klávesové zkratky o další. Obdobným způsobem je možné pokračovat i dále, ale je nutné dávat pozor, abychom nepoužili stávající kombinace kláves a nezrušili tak defaultní nastavení.

Výše jsme již zmínili možnost použití panelu v XMonad. Na stránkách projektu jsou v této souvislosti uváděné dvě aplikace: XMobar a Dzen (dnes už tedy spíš Dzen2). Vzhledem k tomu, že XMobar je vlastně jistou součástí projektu XMonad, tak si jeho použití a konfiguraci ukážeme v příštím dílu.

Dnešní díl jsme věnovali úvodu do WM XMonad a v dílu příštím se vrhneme do náročnější konfigurace pomocí defaultního konfiguračního souboru a ukážeme si možnosti panelu XMobar.

Našli jste v článku chybu?

29. 8. 2014 14:47

Petr Ježek (neregistrovaný)

V Archu je instalační objem díky celému haskellu skoro gigový a neobsahuje žádný překladač, ale pouze různá data balíky. Takže pokud je v debianu hlavní bumbrlíček GHC překladač, pak jinde může jít o mnoho jiných žroutů datového prostoru. Arch je přitom na závislosti méně náročný než debian...

30. 8. 2014 19:48

Na notion jsem se taky díval, ale "odradil" mě manuální styl správy oken a nepřítomnost systémového panelu. A tak jsem si řekl, že když už LUA, tak v Awesome

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?