Dlaždice trochu jinak: rozšíření správce Awesome

Jaromír Vojtaj 25. 9. 2014

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 jsme dokončili ukázky ze základní konfigurace WM Awesome a dnes se podíváme na jeho velmi silnou stránku – rozšíření.

Jak jsem již několikrát psal, většina tiling WM se pyšní různě rozsáhlým aparátem pro všelijaké přídavky a rozšíření. Nejinak je na tom také Awesome, které pro tyto účely (podobě jako dva předchozí zmiňované WM) využívá nějaký „běžný“ programovací jazyk. V tomto konkrétním případě se jedná o jazyk Lua. Jako asi všechno má toto řešení svoje výhody a nevýhody. Nevýhodou je určitě nutnost přítomnosti nějakého parseru jazyka konfigurace, který musí být k dispozici v základu WM. Naopak výhodou je určitě to, že je možné konfiguraci provádět externě, bez nutnosti rekompilovat WM (jako je třeba u DWM) a využít k tomu standardní nástroje daného jazyka.

Jazyk Lua zde nebudu nijak podrobně představovat, jenom uvedu, že se snaží prosadit jako lehký, ale mocný skriptovací jazyk s nízkými nároky na systémové zdroje. Více informací pro případné zájemce je přímo na stránkách projektu nebo existuje docela pěkné stručné shrnutí možností. Na Rootu vycházel také rozsáhlý seriál Pavla Tišnovského.

Pro tvorbu rozšíření se samozřejmě využívá možností jazyka Lua, ale také samotného WM. Awesome má k dispozici velmi rozsáhlé a také podrobně dokumentované API. Jeho základní přehled a rozsah je možné získat v dokumentaci na webu projektu.

Pokud byste věnovali trochu času hledání, najdete již hotových rozšíření na netu docela slušnou řadu. Můžete je pak využít rovnou nebo se v nich inspirovat pro úpravu stávajících nebo vytvoření vlastních. Základní přehled rozšíření je přímo na webu Awesome.

Už zde je jich docela slušný počet, a většinou se ještě jedná o komplexní knihovny, které obsahují celé sady nástrojů a rozšíření. Proto uvedu jenom několik vybraných:

  • Radical – vyspělý a konfigurovatelný systém menu
  • Obvious – knihovna widgetů
  • Vicious – knihovna widgetů
  • Naughty – knihovna pro pop-up upozornění
  • Shifty – dynamická knihovna pro tagging-štítkování
  • Tyrannical – následovník Shifty
  • Flaw – objektově orientovaná knihovna widgetů
  • BlingBling – knihovna widgetů postavená na Cairo
  • Lain – knihovna widgetů

Pak existuje přehled, kde jsou uvedena některá uživatelská rozšíření z různých oblastí nasazení.

To by asi na úvod mohlo stačit a pustíme se do praktické ukázky. Aby se zbytečně nekomplikovala situace, pro ukázku vyberu knihovnu Vicious, která je součástí balíčku awesome-extra a je tedy dostupná po základní instalaci v Debianu. Jedná se o knihovnu s řadou základních systémových widgetů. Komu by tato varianta nestačila, je možné aktuální verzi stáhnout z Gitu.

Pokud se vrátíme ke standardní instalaci v Debianu, tak je příslušný adresář umístěn na adrese /usr/share/awesome/lib/vicious (zde si můžeme také prohlédnout, co všechno tato knihovna nabízí, protože v adresáři widgets je přehled všech možností). Kromě této knihovny jsou tam k dispozici ještě další: awful, flaw, obvious, revelation a shifty.

Nyní máme dvě možnosti, jak s tímto faktem naložit. Pokud nemáme v úmyslu na knihovně něco měnit či nastavovat, můžeme vše nechat tak, jak je to ve výchozím stavu. Pokud bychom ale nějaké změny měli v plánu, můžeme celý adresář překopírovat do $HOME/.config/awesome. Když se vrátíme na příslušnou stránku knihovny Vicious, zjistíme zde v sekci příkladů tři věci:

  1. jak již zde bylo uvedeno, zásadně se liší konfigurace pro Awesome verzí 3.4 a 3.5
  2. widgety můžeme zobrazit ve třech formách jako textbox, graf a progressbar
  3. pro nastavení a zobrazení widgetů jsou nutné tři základní kroky

Vzhledem k tomu, že nebudeme žádné změny v knihovně provádět, nebudeme nic kopírovat a hned se pustíme do úpravy uživatelské konfigurace. Je třeba ještě trochu poopravit předchozí bod v tom, že je nutné pro zobrazení widgetů provést kroky vlastně čtyři. Tím prvním je příkaz, který do konfigurace vloží odkaz na požadovanou knihovnu. Tento příkaz umístíme do příslušné sekce hned na začátku souboru:

local vicious = require ("vicious")

Pro jednoduchost si ukážeme čtyři widgety, které se nacházejí příkladech na stránkách knihovny:

  1. využití RAM v % a celkově v MB jako text
  2. využití RAM jako progressbar
  3. vytížení procesoru jako text
  4. vytížení procesoru jako graf

Pro příklad zde uvedu podrobnější rozbor pouze jednoho widgetu a pro ostatní dám pouze kód pro vložení do konfigurace. Nyní se tedy můžeme vrátit k uvedeným třem krokům a postupně je provést:

  1. nastavení jména a typu widgetu – inicializace
    memwidget1 = widget({ type = "textbox" })
  2. nastavení třídy widgetu, způsob zobrazení a frekvence obnovení – registrace
    vicious.register(memwidget1, vicious.widgets.mem, "MEM: $1 % - $2 MB/$3 MB | ", 10)
  3. vložení registrovaného widgetu na příslušné místo v panelu, v tomto případě na řádek 192 za widget hodin
    memwidget1,

Inicializaci a registraci můžeme umístit do konfiguračního souboru umístit prakticky kamkoliv. Po ukončení konfigurace každého widgetu vždy ověříme správnost konfigurace a v případě úspěchu můžeme ihned provést restart WM. To se samozřejmě projeví zobrazením nového widgetu na panelu. Ke konfiguraci widgetů bych chtěl uvést ještě dvě krátké poznámky:

  • pokud chceme, můžeme k definici některých widgetů přidat vyrovnávací paměť pro zobrazení hodnot. Umístíme tedy mezi inicializaci a registraci příkaz
    vicious.cache(vicious.widgets.mem)
  • pro jednoduchost jsem v příkladech vkládal všechny widgety do již definovaného panelu dole. Je samozřejmě možné vytvořit i druhý, horní panel, a do něj umístit vybrané položky. Kód se zařadí za definici prvního panelu a může vypadat např. takto:
    topwibox[s] = awful.wibox({ position = "top", height="24", screen = s })
          topwibox[s].widgets = {
        memwidget1,
        memwidget2,
        cpuwidget1,
        cpuwidget2,
            layout = awful.widget.layout.horizontal.rightleft
        }

Nyní se vrátím k výše zmíněným widgetům a uvedu zde zjednodušený kód pro tři zbývající:

memwidget2 = awful.widget.progressbar()
memwidget2:set_width(50)
memwidget2:set_background_color("blue")
memwidget2:set_border_color(nil)
memwidget2:set_color("yellow")
vicious.register(memwidget2, vicious.widgets.mem, "$1", 10)

cpuwidget1 = widget({ type = "textbox" })
vicious.cache(vicious.widgets.cpu)
vicious.register(cpuwidget1, vicious.widgets.cpu, "CPU: $1%")

cpuwidget2 = awful.widget.graph()
cpuwidget2:set_width(50)
cpuwidget2:set_background_color("green")
cpuwidget2:set_color("red")
vicious.register(cpuwidget2, vicious.widgets.cpu, "$1")

Výsledky našeho snažení si můžeme prohlédnout na obrázku:

Jako poslední bych zde uvedl změnu konfigurace, které se vztahuje k zobrazení data, hodin a kalendáře. Pokud to někdo zkoušel, tak ví. Pokud nezkoušel, tak tedy znovu opakuji: zobrazené datum nemá zabudovanou žádnou reakci na klávesovou či myší akci. To je jednak škoda a především je to celkem běžná funkce v jiných WM. Pokusíme se to tedy nějak změnit a zaonačit. K tomu musíme provést několik kroků:

  1. na stránce widgetu zkopírujeme kód modulu (úplně poslední kód na stránce)
  2. tento kód nakopírujeme do souboru calendar2.lua podle doporučení
  3. soubor umístíme do adresáře $HOME/.config/awesome
  4. otevřeme uživatelskou konfiguraci Awesome a vložíme za příslušný řádek s Vicious odkaz na vytvořený soubor:
    require("calendar2")
  5. najdeme a upravíme řádek s konfigurací hodin takto:
    mytextclock = awful.widget.textclock({ align = "right" },"%H:%M")
  6. za tento řádek přidáme další:
    calendar2.addCalendarToWidget(mytextclock, "%s")
  7. provedeme restart WM a výsledek vidíme na obrázcích

Pokud se myší kurzor ocitne nad zobrazením hodin v panelu, v pravém horním rohu obrazovky se objeví kalendář s aktuálním měsícem a zvýrazněným dnešním dnem. Kromě samotného zobrazení (lépe by samozřejmě sedělo v panelu při horní hraně) jsou k dispozici další dvě funkce:

  • při levém kliku na hodiny kalendář přejde na minulý měsíc, při pravém na příští měsíc, při pohybem kolečka myši od sebe se jde o měsíc zpátky, při pohybu k sobě o měsíc dopředu
  • pokud budeme uvedené myší akce kombinovat s klávesou Shift, dojde k posunu o celý rok

Je jasné, že to není žádný extrémně vyspělý a funkcemi nabušený kalendář, ale pro základní přehled je jistě dostatečný. Navíc námaha na jeho zprovoznění byla velmi malá. Tímto bych popis základní konfigurace nejdůležitějších rozšíření Awesome považoval za ukončený. Dalo by se jistě pokračovat i dál, ale vzhledem k dalším plánům by to nemělo valný význam. Proto bych na závěr uvedl pouze dvě další informace. První bude podobná těm v předchozích dílech – výhody a nevýhody Awesome a důvody, proč jsem si ho nakonec mezi ostatními vybral pro denní využití. Druhá bude stručným porovnáním systémových požadavků všech třech probíraných WM jak v momentě instalace, tak v rámci provozu.

Jako výhody bych určitě zdůraznil tyto:

  • poměrně snadná a přehledná konfigurace v jazyce Lua
  • Lua jde dost snadno zvládnout v přiměřeném rozsahu
  • již v základní instalaci je k dispozici rozsáhlé nastavení, se kterým se dá ihned pracovat
  • je k dispozici základní globální menu v panelu i na ploše
  • standardně je k dispozici stavový i systémový panel
  • stavový panel je „aktivní“ ve smyslu možnosti ovládání myší
  • má dynamický styl správy oken a k dispozici je množství výchozích layoutů
  • pokud je v uživatelské konfiguraci chyba, systém nastartuje s výchozí konfigurací a je možné bez problémů dále ladit
  • je k dispozici systém chybového hlášení
  • přímo v instalaci je k dispozici několik přídavných knihoven s rozšířeními a widgety
  • dostatek rozšíření je možné najít na stránkách projektu i jinde
  • minimální velikost celého WM

Nevýhod jsem tolik neobjevil, ale přece jenom něco by se našlo:

  • poměrně zásadní rozdíl v konfiguraci mezi verzemi 3.4 a 3.5
  • rozdíl mezi verzemi je i z hlediska základní funkčnosti
  • některá rozšíření jsou funkční jenom pro starší verzi 3.4

A na úplný závěr slíbené porovnání. Jako první z hlediska obsazení diskového prostoru pro instalaci základních balíčků:

Subtle       16.5 MB

XMonad       546 MB
XMobar       10 MB
Dzen2        153 kB
Stalonetray  213 kB
Trayer       69.5 MB
Celkem       557 MB

Awesome+extra    9 MB

Jak je vidět, Subtle a Awesome si sice relativně docela liší, ale  je to při dnešních kapacitách disků absolutně zanedbatelné. XMonad je ale hlavně díky nutnosti instalace GHC slušný moloch. Druhé porovnání je z hlediska využité RAM při startu WM na virtuálních strojích. Pro zjištění této hodnoty jsou vždy použity údaje ze systémových panelů. Spuštěné jsou nutné součásti pro zobrazení stavového a systémového panelu a Parcellite. Jenom doplním, že zatížení procesoru ve vždy pohybuje do 2 %, a tak nemá cenu ho vůbec zmiňovat.

widgety

Subtle                         90 MB
XMonad+XMobar+Stalonetray      240 MB
Awesome                94 MB

Je vidět, že i zde je celkem značný rozdíl v neprospěch XMonad.

V příštím dílu se vrátíme k Awesome, ale již v trochu praktičtějším duchu. Ukážeme si totiž instalaci a konfiguraci WM Awesome a Sawfish v nejnovějších verzích na Debianu Testing a mém notýsku.

Našli jste v článku chybu?
Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

120na80.cz: Pálení žáhy: která jídla ne a co nás uzdraví?

Pálení žáhy: která jídla ne a co nás uzdraví?

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

DigiZone.cz: Ginx TV: pořad o počítačových hráčích

Ginx TV: pořad o počítačových hráčích

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

Vitalia.cz: Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Vitalia.cz: Pryč se zastaralým stravováním ve školách

Pryč se zastaralým stravováním ve školách

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští