Hlavní navigace

Dlaždice trochu jinak: další widgety pro Awesome

16. 10. 2014
Doba čtení: 8 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. Minule jsme zahájili proces úprav stavového panelu Awesome postupným přidáváním widgetů pro zobrazení systémových informací. Dnes v tom budeme pokračovat a doplníme i další změny v konfiguraci.

Naším posledním krokem v minulém dílu byla úprava rozložení widgetů v panelu pomocí definovaných oddělovačů. Dnes se na začátku vrhneme na dříve avizovaný widget grafického zobrazení činnosti procesoru. Můj původní záměr byl vystačit si pouze s widgety v knihovně Lain. Po několika pokusech jsem ale z tohoto předpokladu musel trochu slevit. Jde totiž o to, že příslušný widget v Lain produkuje výsledek ve formě textového boxu. To jsme s úspěchem využili pro widget se zatížením procesoru, ale pro graf se to nezdá moc vhodné. Bylo by samozřejmě možné to nějak dodělat či přiohnout, ale zase se mi nechtělo se pouštět do nějak složitých úprav. Proto jsem se rozhodl pro jednodušší variantu – použiju příslušný widget z knihovny Vicious. Bylo by samozřejmě možné použít výchozí verzi, ale pro jistotu provedu stažení verze aktuální pomocí příkazu

# ~$ git clone http://git.sysphere.org/vicious ~/.config/awesome/vicious

Velikost je asi 600 kB, takže to není žádný problém ani pro můj miniaturní disk. Pak už je možné přistoupit ke konfiguraci a provést tři změny:

  • na začátek vložit načtení knihovny
local vicious = require("vicious")
  • přidat inicializaci, konfiguraci a registraci widgetu
   graphCPU = awful.widget.graph()
   graphCPU:set_width(50)
   graphCPU:set_background_color("#0000FF")
   graphCPU:set_color("#00FF00")
   vicious.cache(vicious.widgets.cpu)
   vicious.register(graphCPU, vicious.widgets.cpu, "$1", 10)
  • přidat zobrazení widgetu za jeho textovou variantu
right_layout:add(graphCPU)

Výsledek je viditelný na prvním obrázku v galerii. Na tomto obrázku si také můžete všimnout, že jsem upravil jeden z oddělovačů, kdy jsem použil změnu nastavení

separator:set_text(" || ")

Pro práci na notebooku je určitě důležité mít informace o stavu baterie. O to víc je to důležité v momentě, kdy notes ani baterie nejsou z nejnovějších. Musím ale říct, že i po těch letech (baterie je pořád originál a nějak se mi nechce investovat do výměny) je pořád „živá“ a bez napájení se dá pracovat běžným způsobem cca 50 minut. Zde se opět vrátíme ke knihovně Lain a widgetu s názvem bat – github.com/copycat-killer/lain/wiki/bat.

Pokud se na něj podíváme blíž, zjistíme, že je možné z něj získat 4 základní informace:

  1. status – stav baterie
  2. perc – procenta nabití baterie
  3. time – čas do nabití/vybití
  4. watt – nabíjecí/vybíjecí příkon

Dále to zatím nebudu rozvádět a zkusíme si vytvořit a zobrazit první verzi widgetu:

statusBAT = lain.widgets.bat({
   settings = function()
      widget:set_markup("BAT: " .. bat_now.perc .. " %")
   end })

Jak si jistě všimnete na druhém obrázku, informace se sice objevila, ale zjevně není úplně přesná… (notes je připojen na zdroj). To ale není asi žádná novinka, protože se mi to stalo při pokusech s tiling WM a widgety vícekrát. Když to víme, tak to můžeme nechat být. Já si ale myslím, že by bylo vhodnější to upravit tak, aby se zobrazovalo obvyklých 100%. Kód pak vypadá třeba následovně:

statusBAT = lain.widgets.bat({
   settings = function()
        if bat_now.status == "Full" then
           widget:set_markup("BAT: Full-100 %")
        elseif tonumber(bat_now.perc) >= 100 then
           widget:set_markup("BAT: " .. bat_now.status .. "-100 %)
        else
      widget:set_markup("BAT: " .. bat_now.perc .. " %")
   end
end })

To ale není všechno. Možná se to někomu bude zdát zbytečné, ale já se podívám ještě na kód samotného widgetu v souboru $HOME/.config/awesome/lain/wid­gets/bat.lua. Proti dříve zmiňovaným widgetům je o poznání složitější a má skoro 160 řádků. Rád bych upozornil na několik jeho částí:

  • na začátku jsou definované výchozí hodnoty nastavení (perioda aktualizace, identifikace baterie, povolení/zákaz upozornění)
  • následuje definice dvou upozornění na vybíjení baterie – stav nízký – aktivuje se při poklesu pod 15 %, stav kritický – pod 5 %, zde je samozřejmě možné si nastavit konfiguraci těchto hlášek včetně periody, textu a barev
  • dále je z kódu zřejmé, že zásadní informace se získávají z adresáře /sys/class/power_supply (já tam mám položky AC a BAT0 – je již nastaveno)
  • na řádku 76 je pak definována jedna z výstupních veličin – stav baterie. Zde jsou 4 stavy – Not present, Full, Charging a Discharging. Já jsem se rozhodl, že toto nastavení změním a dosáhnu dvou cílů: hlášení se zkrátí a přiblíží českému uživateli. Proto jsem na řádky 77 – 81 přidal následující kód:
if bat_now.status == "Discharging" then
   bat_now.status = "Vyb"
elseif bat_now.status == "Charging" then
   bat_now.status = "Nab"
end

Na základě této změny musíme provést úpravy ještě na řádcích 89, 92 a 130.

  • po této sekci následuje oddíl, kde se počítají všechny potřebné výstupní hodnoty
  • od řádku 130 pak je sekce s nastavením hlášení vybíjecích stavů, kde na řádcích 133 a 140 můžeme nastavit výše zmíněné hranice, kdy se hlášení aktivuje

K těmto hlášením a jejich nastavení se ještě vrátím, takže nyní je změna pouze v zobrazení stavu baterie. Na dalších třech obrázcích tak můžete vidět, jak se změnilo zobrazení stavu baterie při plném nabití, vybíjení a nabíjení. Vzhledem k malému displeji nebudu o baterii v panelu zobrazovat více údajů a doplním je v Conky.

Tím se dostáváme k poslednímu widgetu, který hodlám mít na panelu. Jedná se o zobrazení informací o stavu síťového připojení. Já mám v notesu asi nejběžnější kombinaci: LAN připojení a Wifi (tedy podle informací z adresáře /sys/class/net vlastně tři: eth0, lo a wlan0). O obou zásadních by se daly získat mnohé informace, ale já použiju jenom jednu jedinou a jednoduchou: je síť připojená nebo není? Informace o widgetu jsou <a>na GitHubu.

Jedná se o poměrně jednoduchý widget, ale pro moje potřeby má celkem dobré výhody: nemusí se deklarovat použitá síťová karta a je možné nastavit hlášení v momentě, kdy se síť odpojí či připojí. Proto také použiju velmi jednoduché nastavení:

statusNET = lain.widgets.net({
   timeout = 30,
   settings = function()
      widget:set_markup("NET: " .. net_now.state .. "")
end })

K tomu si ještě trochu pohraju se samotným souborem $HOME/.config/awesome/lain/wid­gets/net.lua provedu několik úprav:

  • na řádku 38 změním hlášku pro upozornění
  • na řádek 75 vložím kód pro změnu názvu stavů sítě
   if net_now.state == "up" then
      net_now.state = "ano"
   elseif net_now.state == "down" then
      net_now.state = "ne"
   end
  • na řádku 86 začíná definice hlášení o změnách v síťovém připojení. Zde si upravím text hlášení, změním dobu zobrazení hlášky a přemístím jí do pravého dolního rohu

Nastavený widget přidám do panelu a na šestém obrázku pak můžete vidět jeho vzhled. Protože hláška s upozorněním text zakrývá, přidávám ještě další obrázek pro úplný přehled.
Pro tuto chvíli bych považoval stavový panel a widgety za prozatímně dostačující a můžeme se tedy pustit do dalších úprav celkové konfigurace. Jako první si změníme nastavení tagů a připravíme si tak prostor pro další práci. Provedu tedy dvě změny v konfiguraci:

  • na řádek 158 doplním kód takto:
   tags = {
    names = {"1", "2", "3", "4", "5", "F"},
    layout = {layouts[2], layouts[2], layouts[2], layouts[2], layouts[1] }}

Tyto změny znamenají následující:

  • zůstane zachovaný původní počet tagů včetně názvů 1 – 4
  • přibude pátý tag s názvem F
  • pro každý definovaný tag bude nastavený příslušný layout
  • pro změnu layoutu je možné použít také cestu změny na řádcích 133 – 144 co se týká pořadí
  • uplatněné řešení mi přijde vhodnější, není nutné měnit pořadí tagů a pro každý tag je možné deklarovat použity layout
  • já nejčastěji používám layout tile, proto je definován pro první 4 tagy
  • pátý tag má ve výchozím stavu nastavený layout floating
  • na řádku 163 změním kód takto:
tags[s] = awful.tag(tags.names, s, tags.layout)

Pak už stačí jenom změny uložit, ověřit správnost a restartovat WM. Mnoho změn na první pohled viditelných není, ale přesto jsou k vidění na osmém obrázku. Nyní se trochu vzdálíme od Awesome, ale jenom na okamžik a ne daleko. Už jsem v textu několikrát zmiňoval, že se chystám využít aplikaci Conky. Tuto aplikaci není asi třeba nijak zvlášť představovat nebo rozebírat, většina místních čtenářů jí jistě zná nebo používá.

Proto pouze uvedu, že se jedná o svobodný a „lehkotonážní“ systémový monitor pro X-systémy na linuxu nebo *BSD. V aktuálním kontextu je asi zajímavé, že pro Conky je možné psát rozšíření v jazyce LUA. Více informací o něm je možné nalézt zde:

Pro uplatnění Conky na notesu je třeba provést několik kroků:

1. nejprve samozřejmě instalace

# ~$ sudo aptitude install conky  – instalují se tři soubory a výsledná velikost je cca 1,5 MB

2. konfigurace Conky

Po instalaci se Conky spouští s globálním konfiguračním souborem /etc/conky.conky.conf. Pro uživatelskou konfiguraci je třeba tento soubor kopírovat do uživatelského adresáře:

# ~$ cp /etc/conky/conky.conf ~/.conkyrc

Samotnou konfiguraci nebudu popisovat, pouze do přílohy dávám aktuální konfigurační soubor conkyrc.

3. vytvoříme klávesovou zkratku

Klávesová zkratka Conky podle potřeby spustí. Na řádek 75 konfiguračního souboru Awesome přidáme příkaz

conky = "conky"

Nezapomeňte na konec předchozího řádku doplnit čárku! Na řádek 372 přidáme příkaz pro samotné spuštění:

awful.key({ altkey, "Control"}, "Return", function(), run_once(command.conky) end)

Opět předchozí řádek zakončit čárkou pro oddělení příkazů. Konfiguraci uložíme, restartujeme WM a po stisku kombinace Ctrl+Alt+Enter se nám objeví Conky.

Celkovou konfiguraci můžeme samozřejmě takto nechat, ale zkusíme to ještě trochu jinak a využijeme nového tagu s definovaným layoutem a nastavíme si pravidla pro spuštění Conky tak, aby se automaticky spouštěl na pátém tagu (F). Vzhledem k definici už nemusíme (ale můžeme) nastavovat typ layoutu. Využijeme dříve zmíněné a ve výchozím stavu zakomentované pravidlo pro Firefox a změníme kód na řádcích 467 a 468. Ještě předtím bude lepší si pomocí příkazu:

# ~$ xprop WM_CLASS

Ověřte název třídy aplikace. Oba uvedené řádky tedy budou vypadat následovně:

   { rule = { class = "Conky" },
     properties = { tag = tags[1][5] } },

Můžeme klidně přidat i definici layoutu, kdy pak bude o řádek víc:

CS24_early

   { rule = { class = "Conky" },
     properties = { tag = tags[1][5],
                floating = true } },

Uložíme změny, provedeme restart WM a spustíme Conky známou zkratkou. Na první pohled je změna pouze ve změně barvy tagu F – viz předposlední obrázek. Pokud na tento tag přejdeme (např. kombinací Win+šipka vlevo), uvidíme Conky v celé jeho kráse, podobně, jak je vidět na posledním obrázku dnešního dílu. Okno Conky můžeme zavřít obecnou kombinací Win+Shift+c.

Tímto dnešní díl ukončíme a v příštím dílu se zaměříme na změnu tématu Awesome a zkusíme přidat do WM jednu drobnou vychytávku. Zároveň ukončíme delší pojednání o Awesome včetně jeho zhodnocení a krátké porovnání dlaždicových a běžných správců oken.

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

Autor článku