Hlavní navigace

Dlaždice trochu jinak: rozšíření a widgety pro Awesome

9. 10. 2014
Doba čtení: 10 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 dnešním dílu seriálu se zaměříme na velmi zajímavou oblast WM Awesome – rozšíření a různé widgety a pluginy do stavového panelu.

Již dříve jsem zmiňoval, že oblast rozšíření všeho druhu je velmi silnou stránkou Awesome. Samotná rozšíření jsou dostupná v mnoha formách a zaměřují se na různé stránky WM. My se ale budeme věnovat především takovým, které rozšiřují možnosti stavového panelu. Zaměříme se proto na tzv. widgety, které tuto funkci v různém rozsahu i formě plní. Už jsem dříve uvedl nějaké odkazy na widgety nebo jejich komplexnější knihovny. Tím se pomalu dostáváme k jedné docela zapeklité otázce: k dispozici je docela dost možností, a co já teď s tím? Co si mám vlastně vybrat?
Jak jistě tušíte, odpověď na tuto otázku není vůbec jednoduchá a asi se ani nedá obecně zodpovědět.

Jenom pro osvěžení uvedu několik možností, které uživatel Awesome má:

  1. již ve výchozí instalaci jsou k dispozici knihovny flaw, obvious a vicious.
  2. na Wiki projektu je odkaz na další dvě knihovny: BlingBling a Lain
  3. v přehledu uživatelských rozšíření je uvedena ještě jedna knihovna: Delightful

Jenom z tohoto stručného přehledu a výčtu nám vypadlo celkem 6 možností, což už je dost slušné číslo. Proto se na začátek pokusím nabídku trochu zredukovat. Postupně proberu uvedené knihovny a trochu podrobněji si je popíšeme.

Flaw

awesome.naquadah.org/wiki/Flaw
github.com/dsoulayrol/flaw
david.soulayrol.name/en/pro­jects/flaw/

Pokud si trochu prohlédnete uvedené odkazy, zjistíte, že poslední verze je stará minimálně dva roky. Samo o sobě to nemusí být na překážku, ale vzhledem k změnám ve verzích 3.4 a 3.5 je to jinak. Problém je totiž docela nepříjemný. Pokud použijete výchozí verzi a do konfigurace zařadíte načtení knihovny, vyhodí to chybové hlášení. Pak je nutné „vyzobat“ jednotlivé widgety + potřebné globální skripty a je možné je použít. Mám vyzkoušené na Slackware + Awesome 3.5.2 a na Debianu testing + Awesome 3.4.15 grafy pro CPU a RAM.
Výhodou je velmi slušně popsané API a použití v konfiguračním souboru.
Z výše uvedených důvodů nepředpokládám další použití.

Obvious

awesome.naquadah.org/wiki/Obvious
github.com/hoelzro/obvious

Jak si jistě všimnete, o této knihovně není k dispozici mnoho informací. Vývoj je určitě aktivnější než v případě Flaw, verze jsou staré jen několik měsíců.
Obsahuje některé zajímavé widgety, jako např. bluetooth, gps a umts. Z knihovny jsem nic nezkoušel a ani se k tomu nechystám.

Vicious

awesome.naquadah.org/wiki/Vicious
git.sysphere.org/vicious/

O této knihovně jsem již psal v minulých dílech a použil ji pro pár příkladů.
Její problém vidím v tom, že se velmi liší konfigurace pro verze 3.4 a 3.5, což může být při přechodu na novější verzi problém (a také opravdu je…). Vývoj zatím pokračuje, poslední verze je z letošního ledna. Je k dispozici velmi podrobný popis konfigurace, což je určitě výhoda. Knihovnu mám vyzkoušenou a aktuálně ji využívám na hlavním stroji se Slackware.

BlingBling

awesome.naquadah.org/wiki/Blingbling
github.com/cedlemo/blingbling

Tato knihovna je také pořád ve vývoji, poslední verze je letošní. Je k dispozici sada samotných widgetů do stavového panelu, ale také widgetů obecných, které lze použít v kombinaci s jinými widgety či knihovnami. Přímo v distribuci je obsažena vlastní nápověda a příklady konfigurace. Problém vidím v tom, že je ve dvou verzích, kdy ta starší funguje s Awesome 3.4 a potřebuje k svému běhu balíček OOCairo. Nová verze už funguje na Awesome 3.5 a Cairo nepotřebuje. Po bližším zkoumání jsem se dál nezajímal, ani knihovnu nezkoušel.

Delightful

awesome.naquadah.org/wiki/Delightful
solitudo.net/software/awe­some/delightful/

Tato knihovna je rozšířením knihovny Vicious a ve většině případů je na ní také závislá. Na uvedených stránkách je k dispozici slušný návod na použití i konfiguraci. Vzhledem k tomu, že se jedná pouze o rozšíření, jsem knihovnu ani nezkoušel.

Lain

github.com/copycat-killer/lain
github.com/copycat-killer/lain/wiki/Widgets
github.com/copycat-killer/awesome-copycats

Jedná se o knihovnu, která je přes autora spojená se sadou docela zajímavých témat pro Awesome. Její vývoj je trvalý, některé změny jsou aktuální v řádech dnů. K dispozici je většina potřebných widgetů. Trochu problém je v tom, že widgety mají celkem komplexní konfiguraci, které ale není ani na wiki moc podrobně popsaná. Je tedy nutné se podívat na konfigurace k jednotlivým tématům a z nich si potřebné příkazy vyčíst nebo odvodit. Jinak se ale jedná o dobře použitelnou variantu.

Tento přehled bych ukončil tím, že mi nakonec zbyl výběr ze dvou knihoven, což už je mnohem lepší, než bylo na počátku. Abych to ale dlouho neprotahoval, tak jsem se nakonec rozhodl pro využití samostatné knihovny Lain. Je samozřejmě možná i jiná varianta a dokonce ani není problém kombinovat různé widgety z různých knihoven atd.
V rámci snahy o získání nějakých systémových informací jsem nakonec vybral dvě varianty jejich zobrazení:

  1. základní informace budou trvale zobrazeny ve stavovém panelu – sem jsem zařadil opravdu jenom základ: využití CPU v % a graficky, využití RAM v % a MB, základní informace o baterii a LAN/Wifi a hodiny s kalendářem
  2. všechny možné informace včetně třeba uptime, souborového systému, průběhu síťového provozu atd. budou zobrazovány pomocí Conky

Nyní se tedy pustíme do první varianty a použijeme k tomu možnosti knihovny Lain. Pro její využití je třeba ji nějak dostat do systému. To můžeme udělat dvojím způsobem:

  1. z webu stáhnout soubor master.zip, dekomprimovat ho a přesunout jeho obsah do adresáře $HOME/.config/awesome
  2. udělat klon z Githubu pomocí dvou příkazů:
# ~$ sudo aptitude install git
# ~$ git clone https://github.com/copycat-killer/lain.git ~/.config/awesome/lain

Já jsem použil druhou možnost a výsledkem je nový adresář lain s následujícím obsahem:

  • adresáře – .git, icons, layout, scripts, util, widgets a wiki (prázdný)
  • soubory – .gitmodules, asyncshell.lua, helpers.lua, init.lua a README.rst

Zatím se obsahem nebudeme podrobněji zabývat a pustíme se do konfigurace a zobrazení vybraných widgetů. Jako první musíme samozřejmě do konfigurace přidat volání vybrané knihovny, takže do řádku 13 vložíme příkaz

local lain = require("lain")

Tím máme hotový základ pro implementaci a konfiguraci vybraných stavových widgetů. Jako první jsem si vybral hodiny/kalendář. Jistě si vzpomenete, že v ukázkové verzi jsme použili kód z webu a soubor calendar2.lua. Problém je v tom, že to bylo ve verzi Awesome 3.4.15. Pokud bychom ten samý postup zvolili pro verze 3.5.2 nebo 3.5.5, bylo by to trochu jinak. Přidání stejných konfiguračních příkazů sice nevykáže žádnou chybu při startu ani běhu WM, ale bohužel také nevykáže pražádnou funkčnost. Musíme na to tedy jinak, a jak jinak než s pomocí knihovny Lain, že? Proto se přesuneme na řádek 146 a provedeme zde dvě změny:

  • původní text nahradíme „novým“:
clock = awful.widget.textclock()
  • do dalšího řádku přidáme kód:
lain.widgets.calendar:attach(clock)

Pak se přesuneme na řádek 223 a upravíme název hodin takto:

right_layout:add(clock)

Nyní provedeme restart WM pomocí kombinace Ctrl+Win+r a na prvním obrázku v galerii vidíme, že se nevyskytla žádná chyba, ale taky žádná změna. To je ale jenom zdání, protože pokud najedeme myší nad zobrazení hodin, dostaneme výsledek, který je na druhém obrázku. Výsledek je alespoň podle mého názoru mnohem lepší, než byl v ukázkovém řešení v minulých dílech. Kalendář je jednak lokalizovaný a také mnohem přehlednější. To ale není ještě všechno, co by se v tomto ohledu dalo změnit. Vrátíme se tedy znovu na řádek 146 a provedeme konečnou úpravu kódu. Pokud je k dispozici kalendář, není nutné, aby na malém displeji notesu zabírala zbytečně místo duplicitní informace. Na velkém displeji už je pak otázka, jak formát hodin upravit. Kód bude vypadat takto:

clock = awful.widget.textclock("%H:%M")

To ale ještě není všechno, dá se totiž nastavit i samotné zobrazení kalendáře, a proto na řádek 147 vložíme následující kód:

lain.widgets.calendar:attach(clock, {
  fg = "red",
  font_size = 10,
  position = "bottom_right"})

Jak je z nastavení kalendáře jasné, bylo by vhodnější (a podle mého názoru i přirozenější) přesunout celý panel na dolní okraj obrazovky. Proto na řádku 220 upravíme kód následovně:

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

Po uložení změna restartu WM vidíme výsledek na třetím obrázku. Tímto bych hodiny a kalendář považoval za dostatečně vyřešené a můžeme tedy postoupit dál a zkusit si zobrazit zatížení procesoru a obsazení RAM. CPU zatím zobrazíme pouze jako textovou informaci, až později se pustíme do grafu. Ještě než se do toho ale dáme, přidáme si do konfigurace dvě položky, které nám v následujících úpravách pomohou panelové widgety od sebe opticky oddělit. Bez dalšího komentáře tedy přejdu na řádek 87 a vložím tento kód:

separator = wibow.widget.textbox()
separator:set_text(" | ")
spacer = wibox.widget.textbox()
spacer:set_text(" ")

V této chvíli bych znovu rád upozornil na rozdíle mezi verzemi. Ve verzi 3.4.15 by totiž definice obsahu měla tvar spacer.text=" ". Proto pozor na to! Nyní už se můžeme dát do wigdetu CPU a použijeme k tomu vzor, který je na GitHubu.

Na řádek 92 vložíme následující kód:

textCPU = lain.widgets.cpu({
    timeout = 10,
    settings = function()
        widget:set_markup("CPU: " .. cpu_now.usage .. " %")
    end })

Pro jistotu vyzkoušíme, jestli jsme se při psaní nespletli, a pokud je vše v pořádku, přesuneme se na řádek 242 a přidáme zobrazení nově vytvořeného widgetu takto:

right_layout:add(textCPU)

Výsledek je viditelný na čtvrtém obrázku v galerii. Nyní se nebudeme věnovat ladění celkového vzhledu panelu, to uděláme až nakonec, až budou umístěné všechny požadované widgety. Dáme se tedy hned do dalšího widgetu, což je obsazení RAM v textovém režimu. Pokud se podíváme na popis možností tohoto widgetu, je opět na GitHubu.

Zjistíme, že je možné použít dvě definované veličiny: využitá RAM v jednotkách MB a využitý swap také v MB. Aktuální přehled o swapu pro mne není nijak podstatný, takže ho nechám až na zobrazení v Conky. Konfigurace pak bude na řádku 98 vypadat takto:

textRAM = lain.widgets.mem({
    timeout = 30,
    settings = function()
        widget:set_markup("RAM: " .. mem_now.used .. " MB")
    end })

Na řádek 249 přidáme zobrazení widgetu:

right_layout:add(textRAM)

a výsledek vidíme na dalším obrázku. Výsledek asi splnil očekávání, ale já za sebe si říkám, že by nebylo špatné mít přehled nejen o absolutní hodnotě obsazené paměti, ale také o procentním obsazení celkové RAM. V mém případě nemá smysl zobrazovat celkovou hodnotu, protože je na maximu 1,536 MB. Co ale s tím, když nám widget žádnou podobnou hodnotu nenabízí? Zde se opět musím zmínit o dvou výhodách konfigurace Awesome:

  1. díky jazyku LUA není příliš složité do ní proniknout
  2. z toho samého důvodu je možné velmi snadno upravovat cokoliv, včetně rozšíření a v našem případě pak widgetů

Proto si otevřeme soubor ~/.config/awesome/lain/wid­gets/mem.lua a trochu si ho rozebereme. Jak můžete sami vidět, je to soubor, který má pouze asi 60 řádků, z toho cca 10 řádků jsou komentáře. Druhá věc, která z kódu vyplývá, je použitý nástroj pro zjištění informací o paměti. Zde je asi logicky použit příkaz /proc/meminfo a v rámci widgetu jsou pro RAM uložené 4 hodnoty: MemTotal, MemFree, Buffers a Cached. Pro swap pak jsou k dispozici 2 hodnoty: SwapTotal a SwapFree. Pomocí těchto hodnot jsou pak na řádcích 49 a 50 vypočteny obě zmíněné hodnoty, které widget vrací uživateli. Není proto žádný velký problém tyto již načtené a vypočtené hodnoty využít a přidat další. Lidová tvořivost je samozřejmě možná, ale já udělám pouze jednu změnu a přidám funkci, která vrátí poměrnou hodnotu obsazené RAM v % z celkové hodnoty 1,5 GB. Za tímto účelem přidám na řádek 50 tento kód:

mem_now.rel = math.floor(mem_now.used / mem_now.total *100)

Jak jste si jistě všimli, využil jsem pro zaokrouhlení funkci, která je definovaná ve widgetu na řádku 15. Po uložení je vhodné vyzkoušet správnost změněné konfigurace, a pokud je vše v pořádku, tak se vrátit ke konfiguraci Awesome. Zde vyhledáme řádek 101 a změníme ho následovně:

UX DAy - tip 2

widget:set_markup("RAM: " .. mem_now.rel .. " % - " .. mem_now.used .. " MB")

Nic jiného se měnit nemusí a výsledek je pak viditelný na posledním obrázku v galerii. Tím se nám rozsah dnešního dílu téměř naplnil, takže nakonec doplním pouze ukázku možností při použití definovaných oddělovačů. Kód je na řádcích 248 – 253:

right_layout:add(spacer)
right_layout:add(textCPU)
right_layout:add(separator)
right_layout:add(textRAM)
right_layout:add(spacer)
right_layout:add(clock)

Dnešní díl jsme věnovali úvodu do konfigurace rozšíření a hlavně widgetů do stavového panelu. V příštím dílu se zaměříme na složitější widgety: grafický průběh zatížení procesoru, informace o baterii a síťovém rozhraní drátovém i bezdrátovém.

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