Hlavní navigace

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.

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?

26. 9. 2014 22:50

ebik (neregistrovaný)

U mnou předvedeného programu je také potřeba gcc jen v případě změny konfigurace (ano, musel by být napsaný o trochy lépe, než jsem naznačil). A to co se snažím říct je, že použít winowmanager typu XMonad s defaultni konfiguraci je jako jezdit s Ferari z D5 na D1 skrz centrum Prahy (protoze prece pres centrum se dostanete vsude).

26. 9. 2014 20:19

FrostyX (neregistrovaný)

> Pak by teprve binarka vyzadovala nainstalovane gcc. Stejne jako v pripade xmonadu.

Jenže vtip je v tom, že binárka XMonadu nainstalované ghc nevyžaduje. Takže si myslím, že jsem použil správné přirovnání.

Navíc já jsem reagoval na úplně jinou věc. Autor totiž tvrdil, že XMonad je obrovský moloch pouze kvůli tomu, že je pro jeho kompilaci potřeba nějaký konkrétní překladač (který není nejmenší). Ta logika prostě nedává smysl. Navíc pokud vám stačí výchozí konfigurace, tak ten překladač nem…

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

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

Přehledná titulka, průvodci, responzivita

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

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

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

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

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

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

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

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

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

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

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

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

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

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

1. den EET? Problémy s pokladnami

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

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

Jsou čajové sáčky toxické?