Hlavní navigace

Dlaždice trochu jinak: správce oken Awesome

18. 9. 2014
Doba čtení: 14 minut

Sdílet

Pracovní prostředí nemusí být navzdory zažitému standardu tvořeno jen plovoucími okny. Dá se pracovat i s rozložením dlaždic, které je mnohem starší než okýnka. V minulém dílu našeho seriálu jsme dokončili průzkum XMonad a v tom dnešním nakousneme poslední z plánovaných tiling správce oken – Awesome.

Awesome je napsáno v jazyce C a pro konfiguraci a rozšíření používá jazyk LUA. Dá se o něm najít dostatečné množství informací, a,ř jako obvykle, celkem podrobný popis najdeme na ArchWiki.

Ještě než se pustíme do dalšího popisu, tak musím velmi důrazně upozornit na jednu důležitou věc, kterou je verze Awesome. Zásadní problém je totiž v tom, že na stránkách projektu je k dispozici aktuální stabilní verze 3.5.5 (Kansas City Shuffle) z dubna 2014. V Debianu je ale k dispozici balíček starší verze:

# ~$ aptitude versions awesome
Balík awesome:
i   3.4.15-1+b1
Balík awesome-extra:
i   2012061101

Novější verze není dokonce ani v Debianu Unstable. Až v Debianu Experimental je zmíněná verze 3.5.5. Verze 3.4.15 je podle webu projektu z února loňského roku.

Samo o sobě by to nemuselo nic tragického znamenat. Zásadní problém je ale v tom, že jsem zjistil (na notýsku je Debian + Awesome 3.4.15, na hlavním stroji pak Slackware + Awesome 3.5.2), že se od sebe docela dost významně liší konfigurace a některé postupy pro verzi 3.4 již ve verzi 3.5 nefungují. Pokud tedy nebude uvedeno jinak, všechny konfigurace, změny a nastavení se budou vztahovat k verzi 3.4.15! Jak už je asi zřejmé, hlavní stránka projektu se nachází na awesome.naquadah.org.

Sami autoři uvádějí o svém projektu tyto informace a důležité vlastnosti:

  • Awesome je vysoce konfigurovatelný WM nové generace pro systémy s X11
  • jedná se o velmi rychlý, rozšiřitelný projekt s licencí GNU GPLv2
  • je určen hlavně pro pokročilejší uživatele, vývojáře a všechny, kteří chtějí mít maximální kontrolu nad svým grafickým prostředím
  • je velmi stabilní, rychlý a nemá velké nároky na systémové prostředky
  • jako první WM využívá asynchronní knihovnu XCB místo staré synchronní Xlib. To zajišťuje hlavně rychlou odezvu prostředí
  • má velmi dobře dokumentovaný zdrojový kód a API
  • pokud je třeba, není k ovládání nutná myš, uživatel si vystačí pouze s klávesnicí
  • podpora pro více monitorů (XRandR, Xinerama nebo mód Zaphod) s podporou tagů
  • implementuje mnoho standardů Freedesktop: EWMH, XDG Base Directory, XEmbed, Desktop Notification, System Tray
  • nerozlišuje mezi vrstvami, není plovoucí nebo dlaždicová vrstva
  • používá tagy místo pracovních ploch, umožňuje umístit okna na různé tagy a zobrazit více tagů
  • je k dispozici velké množství rozšíření v jazyce LUA pro všechny možné účely
  • podporuje D-Bus

Nyní již můžeme přistoupit k samotnému Awesome a instalovat dva potřebné balíčky:

# ~$ aptitude search awesome
i   awesome        - highly configurable X window manager
i   awesome-extra  - additional modules for awesome

Po jejich instalaci může provést restart a po přihlášení uživatele uvidíme výchozí prostředí Awesome. Jak ukazuje první obrázek v galerii, je na něm docela dost viditelných položek. Asi nejviditelnější je docela zajímavě provedený nápis na ploše obrazovky.

Kromě něj vidíme na horním okraji obrazovky také panel, kde je zleva:

  • ikona hlavního menu = logo Awesome
  • devět virtuálních ploch – tagů
  • datum a čas
  • ikona pro změnu rozmístění oken

Pro první letmé seznámení se podíváme na menu. To je totiž k dispozici již ve výchozí konfiguraci a v předchozích probíraných WM nebylo vůbec. Menu je možné vyvolat dvojím způsobem:

  • levý klik na ikonu v panelu menu otevře, opětovný levý klik opět zavře, včetně „animace“ ikony
  • pravý klik kdekoliv na ploše menu otevře, opětovný pravý klik opět zavře

Jak menu vypadá, je vidět na šesti obrázcích v galerii (druhý až sedmý). Prostřední položka Debian není moc zajímavá, jedná se totiž o „běžné“ menu pro spouštění aplikací. Poslední položka je asi jasná, není moc co dodat. Jenom asi to, že vždy spouští výchozí terminál. Pro konfiguraci je určitě nejzajímavější první položka awesome, která má 4 možnosti:

  • manual – otevře v terminálu návod, obdoba příkazu man awesome
  • edit config – v editoru nano otevře globální konfigurační soubor, ovšem bez práva zápisu pro běžného uživatele…
  • restart – provede restart WM
  • quit – ukončí WM s návratem do předchozího kroku, zde do přihlašovací obrazovky LightDM

Na dalších čtrnácti obrázcích v galerii je vidět způsob a styl umístění oken jednotlivých aplikací. Postupně otevřeme tři aplikace – Sakura, XArchiver a Leafpad. Při jejich otevírání si můžete všimnout několika skutečností:

  • v panelu se objevuje nejenom titulek okna aplikace, ale také její ikona, což velmi přispívá k celkové přehlednosti prostředí
  • fokus se na okna přenáší jenom přesunutím myšího kurzoru. Je samozřejmě možné provést i klávesovou zkratkou
  • při přesunu fokusu se obarvuje titulek okna v panelu jinou barvou. Opět dobrý přínos k přehlednosti
  • styl umístění oken lze měnit klávesovou zkratkou nebo levým klikem na příslušnou ikonu na pravém kraji panelu
  • změna stylu je pozorovatelná nejenom na otevřených oknech, ale dojde také ke změně příslušné ikony v panelu
  • stylů uspořádání je definováno celkem 12

Další tři obrázky v galerii pak ukazují, jak se mění uspořádání oken, když se do každého z nich postupně provede levý klik myší v výchozím layoutu. To by asi k popisu základního prostředí stačilo a můžeme se směle pustit do konfigurace. Jak je asi patrné z předchozího popisu, je k dispozici nějaká výchozí konfigurace a systém je ihned po instalaci celkem dobře použitelný. Awesome také dodržuje standardy XDG, takže globální konfiguraci najdeme v adresáři /etc/xdg/awesome. Tam se nachází jednak hlavní konfigurační soubor rc.lua, ale také adresář debian a v něm soubor menu.lua. Ten obsahuje modul, který definuje globální menu pro spouštění aplikací. Aby nebylo nutné měnit globální konfiguraci, provedeme na počátku dva příkazy:

# ~$ mkdir $HOME/.config/awesome
cp /etc/xdg/rc.lua $HOME/.config/awesome

Tím máme připravenou půdu pro uživatelskou konfiguraci a můžeme se v následujících řádcích podívat na samotný konfigurační soubor – je v příloze jako default-rc.lua. Jak je asi na první pohled patrné, jedná se opět o poměrně rozsáhlý soubor, který má cca 380 řádků. Navíc v něm není příliš řádků s komentáři, takže se jedná o dost obsáhlou konfiguraci. Jak ale uvidíme dále, je v ní obsažena spousta zajímavých možností a vlastností už ve výchozím stavu.

Na začátku je pár příkazů pro aktivaci potřebných knihoven. Dále je krátká pasáž pro zpracování a hlášení chyb při změně konfigurace nebo při běhu Awesome. Na ř. 40 je definice grafického vzhledu prostředí – tématu. V instalaci Debianu jsou k dispozici 3 témata – default, sky a zenburn. Nacházejí se v /usr/share/awesome/themes/témaX.

Pak následuje nastavení dvou důležitých aplikací – terminálu a textového editoru. Jak je z příkazů jasné, používají se systémová nastavení. Je ale samozřejmě možné definovat aplikace přímo. Na ř.52 je pak definice hlavního modifikátoru, která je nastavený na klávesu Win. Pak je definováno již zmíněných 12 stylů umístění oken – layoutů. Následuje definice tagů – virtuálních ploch. Nastavení platí pro všechny použité obrazovky, tagů je definováno devět. Na dalších cca 100 řádcích jsou definovány položky na systémovém panelu a manipulace s nimi pomocí myši i klávesnice. Je zde nastaven obsah hlavního menu, ikona a menu v panelu, zobrazení času, systémová část panelu, ovládání tagů pomocí myši, ovládání oken aplikací na tasklistu panelu myší, myší ovládání pro přepnutí layoutů, umístění celého panelu a řazení položek v panelu.

Pak je krátké globální nastavení pro otevření hlavního menu pravým klikem a změna tagu pomocí kolečka dopředu i dozadu. Od ř. 200 pak následuje důležitá pasáž konfigurace – definice klávesových zkratek a následných akcí a reakcí. Jsou zde definovány zkratky pro manipulaci s tagy, změnu aktivního okna, otevření hlavního menu, změnu layoutů, spuštění terminálu, restart a ukončení Awesome, zkratka Win+r pro jednoduchý spouštěč aplikací v panelu a Win+x pro přímé spuštění kódu v jazyce LUA.

Rád bych také zmínil možnost pomocí levého kliku myši na titulek aplikace v panelu tuto aplikaci „aktivovat“ a zobrazit/skrýt ji na obrazovce. Je to určitá obdoba maximalizace/minimalizace oken v běžných WM a je to velmi šikovná věcička. Lze to samozřejmě provádět i pomocí klávesnice. Pak už jsou jenom pravidla pro zobrazení některých vybraných aplikací s více okny, jako je MPlayer a Gimp, a to by bylo asi všechno, na co jsem chtěl v konfiguračním souboru upozornit.

Jak je z předchozího popisu zřejmé, je konfigurace velmi rozsáhlá a propracovaná a díky tomu je možné systém začít prakticky ihned po instalaci a spuštění začít používat. Přesto se ale vrhneme na úpravu konfigurace a změny, které povedou k doplnění zkratek pro spouštění vybraných aplikací, zobrazení spuštěných aplikací (obvyklé Parcellite) při spuštění WM, doplnění ukazatelů systémových hodnot a další náležitosti. Postupně si také ukážeme příslušné obrázky, které jsou umístěné v dnešní druhé galerii.

Jako první si uděláme jednoduchou úpravu a snížíme počet tagů=virtuálních ploch z 9 na 4. Otevřeme tedy uživatelský konfigurační soubor a na řádku 77 provedeme tuto změnu včetně uložení:

tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1]) => tags[s] = awful.tag({ 1, 2, 3, 4 }, s, layouts[1]

Pak můžeme udělat dva kroky. Podobně jako u Subtle a XMonad je možné prověřit správnost konfiguračního souboru, což se zde provede příkazem:

# ~$ awesome -k

Pokud je konfigurace v pořádku, můžeme provést restart WM klávesovou zkratkou Win+Ctrl+r. Výsledek našeho snažení je vidět na prvním obrázku.

Výše v textu jsem zmínil, že součástí konfigurace je i systém chybového hlášení. Zkusíme si ho tedy předvést a záměrně vytvoříme chybu tak, že ve stejném řádku vynecháme poslední závorku na jeho konci. Pak provedeme oba uvedené kroky a výsledek vidíme na druhém obrázku. Chyba se ukázala v terminálu, ale při restartu se zdánlivě nijak neprojevila. Ale je to jenom zdání, protože se nám do hry opět dostalo devět výchozích tagů. To je způsobeno tím, že když Awesome narazí na nějakou chybu v uživatelské konfiguraci, použije pro práci globální konfigurační soubor. Má to tu výhodu, že vždy funguje alespoň výchozí nastavení a se systémem se dá pořád pracovat a ladit konfiguraci dle libosti.

V dalším pokusu vrátíme závorku na její původní místo a provedeme zakomentování řádků 11 a 91. Tím z hlavního menu odstraníme položku Debian, která většinou nebude k ničemu potřebná. Výsledek je na třetím obrázku. Je vidět, že se akce podařila, a tak buď můžeme nechat řádky zakomentované nebo je klidně vymazat, záleží na volbě uživatele.

Dále si ukážeme změnu tématu. Jak jsem už uvedl, jsou k dispozici témata tři. Od začátku je nastaveno Default a na dalších dvou obrázcích je vidět změna na Sky a Zenburn. Změna je velmi jednoduchá: přejdeme na řádek 40 a změníme pouze název tématu:

beautiful.init("/usr/share/awesome/themes/[default,sky,zenburn]/theme.lua

Vzhledem k tomu, že hlavní menu prakticky od dokončení konfigurace nepoužívám, není asi úplně nutné ho mít na panelu. Provedeme tedy jeho odstranění tím, že zakomentujeme řádky 96 a 97. Výsledek je pak vidět na šestém obrázku. Jak si jistě všimnete, žádná chyba není hlášená, restart se podařil, ale výsledek není zrovna povzbudivý a žádoucí. Nevadí, náprava je poměrně snadná: v první fázi jsme totiž zakomentovali pouze definici widgetu s ikonou a voláním menu, ale jeho zobrazení v panelu zůstalo zachováno. Proto musíme udělat i druhý krok a zakomentovat řádek 176 a výsledek už je mnohem lepší – viz sedmý obrázek v galerii.

Podobně by se zájemci mohli vypořádat i s ikonou a nastavením layoutů v pravém rohu panelu. Jeho konfigurace je na více místech, a tak to zkusíme provést nejjednodušší cestou – zakomentujeme jeho zobrazení v panelu na řádku 181 a výsledek vidíme na osmém obrázku.

Když už se nacházíme v této oblasti konfiguračního souboru, tak bych vaši pozornost odkázal na řádek 178. Zde je funkce o které již byla řeč – jednoduchý spouštěč aplikací. Je to něco podobného jako třeba ve Fluxboxu. Kdykoliv ho vyvoláte kombinací Win+r, následně se pak vedle zobrazených tagů v panelu objeví text Run: a je možné buď vepsat název spouštěné aplikace nebo pomocí šipek nahoru a dolů vyhledávat v již zadaných aplikacích. Spuštění vybrané či zadané aplikace se pak provede klávesou Enter. Zavření spouštěče se provede klávesou Esc. Více je pak vidět na devátém obrázku galerie.

Pokud zde už mluvíme o spouštěčích aplikací, spojíme si dvě věci dohromady a ukážeme si, jak přidat další spouštěče, a hlavně, jak je pomocí nových uživatelských klávesových zkratek spustit. Jako první krok provedeme instalaci tří aplikací: dmenu, gexec a parcellite. Tu poslední zatím nebudeme používat, ale nevadí. Dmenu patří neodmyslitelně do projektu Suckless (v Debianu je to dokonce synonymum pro balíček suckless-tools) a jedná se o jednoduchý spouštěč, který zobrazuje obsah adresáře /usr/bin a umožňuje aplikace vybírat postupným psaním znaků a následně je spouštět. Sice ho sám používám velmi výjimečně, ale přesto přidávám další spouštěč – gexec. Jedná se o malou GTK aplikaci, která je asi nepodobnější aplikacím grun a gmrun. Je sice již přes 7 let „stará“, ale to nepředstavuje zásadní problém vzhledem k omezenému rozsahu funkcí, které nabízí. Na instalované verzi pak ukážu její možnosti. Bylo by samozřejmě možné instalovat i náročnější spouštěče, jako je Gnome-Do, Kupfer nebo Launchy, ale přišlo by mi to jako zbytečné plýtvání místa na disku a systémových prostředků. Proto zadáme instalační příkaz:

# ~$ sudo aptitude install dmenu gexec parcellite

a do systému nám celkově přibude cca 1,7 MB dat. Potřebné aplikace máme instalované a můžeme se tedy vrátit ke konfiguračnímu souboru. Od řádku 200 začíná sekce nastavení klávesových zkratek a příslušných akcí k nim. My se ale prvně vrátíme do řádku 52 a přidáme si další modifikátor. Je to z toho důvodu, abychom mohli od sebe jednoznačně odlišit výchozí a uživatelské klávesové zkratky. Kód by pak vypadal takto:

modkey = "Mod4"
altkey = "Mod1"

Abychom trochu zlepšili čitelnost a přehlednost konfiguračního kódu, tak ještě na řádek 47 přidáme tento kód:

dmrun = "dmenu_run"
gxrun = "gexec"

Pak se přesuneme na řádek 250 a vložíme zde následující kód:

-- User applications
awful.key({         "Control" }, "space",   function () awful.util.spawn(dmrun) end),
awful.key({ altkey, "Control" }, "space",   function () awful.util.spawn(gxrun) end),

Velmi důležité jsou čárky na koncích příkazů, které jsou nezbytně nutné vzhledem k tomu, že se jedná o součást příkazu, který startuje na řádku 203. Po restart WM se zdánlivě nic neděje. To je ale jenom zdání, které můžeme vyvrátit pomocí klávesové zkratky Ctrl+Mezerník, která v horní části obrazovky odhalí seznam aplikací z dmenu. Návrat zpět je možný přes Esc. Na desátém obrázku si můžeme všimnout nejenom seznamu aplikací (už filtrovaný vypsáním dvou počátečních znaků lx), ale také toho, že na ploše nejsou žádná okna, i když v panelu jsou viditelně spuštěné Leafpad a Sakura. Je to jedna z dalších zajímavých vlastností Awesome – pokud klikneme levou myší na pruh aplikace v panelu, můžeme jí „minimalizovat“ a zase vrátit do původní podoby. Při pravém kliku se objeví seznam spuštěných oken aplikací a pomocí něj lze mezi okny přecházet. Seznam zmizí po opětovném pravém kliku na pruh aplikace. Oboje je vidět na dalších dvou obrázcích.

Pokud použijeme zkratku Ctrl+Alt+Mezerník, objeví se aplikace gexec – viz třináctý obrázek v galerii. Jak je z obrázku patrné, je zde řádek pro zadání spouštěného příkazu spolu s výběrem již zadaných příkazů či aplikací. Na rozdíl od jiných spouštěčů je zde možné použít volby pro spuštění příkazu v terminálu nebo s administrátorskými právy (pokud je to v systému dobře nastavené). Pro zavření je možné použít buď příslušné tlačítko ve formuláři nebo klávesu Esc. Na dalším obrázku je vidět spuštění příkazu mc spolu s jeho otevřením v terminálu. Další dva obrázky pak ukazují spuštění xterm s právy roota. Aby to fungovalo, musí být instalován balíček gksu a příslušný uživatel musí mít nastavená práva v /etc/sudoers. Nyní se můžeme vrátit k již instalované aplikaci Parcellite a k podobné úloze, kterou jsme řešili u předchozích WM – spuštění nějaké aplikace a umístění její ikony do systémové oblasti panelu. Awesome má jako Subtle a na rozdíl od XMonad tuto systémovou oblast v panelu již výchozí zabudovanou. Proto stačí udělat velmi jednoduchou věc, a sice na úplný konec konfiguračního souboru přidat tento kód:

os.execute ("parcellite &")

Po restartu je ikona již viditelná a Parcellite plně funkční – viz předposlední obrázek. Kromě systémového příkazu pro spuštění aplikace můžeme využít také vlastní příkaz konfiguračního jazyka LUA, který vypadá takto:

awful.util.spawn_with_shell("parcellite &")

Po restartu je situace úplně stejná, jako při použití předchozího příkazu. Pokud by někdy nastala potřeba spouštět některé aplikace pouze jednou a to hlavně při restartech WM, je možné postupovat několika způsoby, které jsou popsané na Awesome wiki.

Některé způsoby vyžadují vytvoření externích skriptů, ale jeden je tam vytvořen přímo v konfiguračním souboru v jazyce LUA. Jenom sem kód kopíruji jako příklad, sám jsem ho zatím nezkoušel.

function run_once(prg,arg_string,pname,screen)
    if not prg then
        do return nil end
    end

    if not pname then
       pname = prg
    end

    if not arg_string then
        awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. "' || (" .. prg .. ")",screen)
    else
        awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. " ".. arg_string .."' || (" .. prg .. " " .. arg_string .. ")",screen)
    end
end

run_once("xscreensaver","-no-splash")
run_once("pidgin",nil,nil,2)
run_once("wicd-client",nil,"/usr/bin/python2 -O /usr/share/wicd/gtk/wicd-client.py")

Poslední věc, kterou si dnes ukážeme, je „přestěhování“ stavového panelu na dolní okraj obrazovky. Řešení je velmi primitivní – stačí upravit řádek 176 takto:

CS24_early

 mywibox[s] = awful.wibox({ position = "bottom", screen = s })

Po restartu už je vše dle očekávání a je viditelné na posledním obrázku.

Dnešní díl jsme věnovali instalaci, spuštění a základní konfiguraci WM Awesome. V příštím dílu se zaměříme na jeho další silnou stránku – systémové pluginy, widgety, gadgety a další možná rozšíření.

Byl pro vás článek přínosný?

Autor článku