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

28. 8. 2014
Doba čtení: 6 minut

Sdílet

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í.

bitcoin_skoleni

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.

Autor článku