Awesome WM IV. – konfiguračný súbor II. časť

Awesome WM IV. – konfiguračný súbor II. časť
29.07.2010 22:06 | Články | Fridolín Pokorný
Dnes budume v našom seriáli o Awesome WM pokračovať. Pozrieme sa bližšie na úpravu spracovávania udalostí v rc.lua a povieme si aj o témach a vzhľade celkovo.


Spoločnými silami sa ideme opäť pozrieť do hlbín konfigurácie Awesome WM. Výsledkom tohto článku je tradične konfiguračný súbor rc.lua, ktorý naväzuje na predošlý článok. Tento konfiguračný súbor je obohatený o komentáre v slovenčine a je ho možné stiahnuť na konci tohto článku.


Signály - spracovávanie udalostí

V predošlých článkoch sme spomenuli vysokú konfigurovateľnosť Awesome WM. Medzi prvky konfigurovateľnosti patrí aj spravovanie udalostí, zjednodušene signály. Môžeme tak jednoducho nastaviť správanie Awesome WM, ktoré vykoná jednotlivé akcie definované v rc.lua.


Pre zjednodušenie som vybral signál, na ktorom si ukážeme základnú prácu so signálmi. V ukážke predstavuje client objekt, ktorému pridáme signál. V tomto prípade client predstavuje klientsku aplikáciu vo všeobecnosti. Klientska funkcia add_signal() tohto objektu očakáva dva argumenty. Prvý argument predstavuje názov signálu, v našom prípade je to "manage", ktorý povie, že chceme daného klienta spravovať pri objavení a druhý parameter je funkcia, ktorá sa prevedie pri danom signále. Táto funkcia má dva argumenty. Prvý argument označený ako c je klientska aplikácia a druhý argument je flag, ktorý je nastavený na TRUE, ak ide o štart aplikácie, v opačnom prípade na FALSE. Pozorný čitateľ sa určite pozastavý nad objektom client a objektom c v argumente funkcie. Objekt client predstavuje akúkoľvek aplikáciu (aplikáciu vo všeobecnosti), no objekt c je nastavený na konkrétnu aplikáciu pri zaznamenaní nového client. Napríklad takto možno prideliť členskej aplikácii (resp. oknu) záhlavie (titlebar). Funkcia awful.titlebar.add() očakáva dva argumenty, prvý je klient a druhý je zoznam (podrobnejšie doc). Práve pre prvý argument sme potrebovali konkrétnu klientsku aplikáciu. Ďalej môžeme pridávať signál našej konktrétnej klientskej aplikácii. V ukážke je nastavené prepnutie okna klientskej aplikácie pri presunutí kurzora myši na okno aplikácie (signál "mouse::enter").

client.add_signal("manage", function (c, startup)
-- Nastavenie záhlavia okien (titlebar)
    awful.titlebar.add(c, { modkey = modkey })


-- Výber okna pri presunutí myši nad okno
    c:add_signal("mouse::enter", function(c)
            client.focus = c
        end
    end)
end)


Vo vytváraní signálov netreba hľadať nič zložité. Zvolený príklad je možno kúsok zložitejší pre začiatočníkov. Ak by som to mal zjednodušiť, signály v ukážke prideľujeme v dvoch úrovniach. Prvý krát pri objavení sa klientskej aplikácie, kde nám funkcia client.add_signal() zjednodušene len zistí konkrétnu klientsku aplikáciu a priradí ju c. Následne s objektom c ďalej pracujeme, kde mu v druhej úrovni prideľujeme signál. V budúcom článku si ukážeme vytvorenie jednoduchého signálu pre vlastný widget.


Štandartná téma Awesome WM.
Štandartná táma Awesome WM.

Jednotlivé signály možno rozdeliť do týchto skupín:
awesome - pre spravovanie samotného Awesome WM
button - pre spravovanie signálov myši
client - pre spravovanie signálov pre klientske aplikácie
dbus - pre spravovanie signálov od D-Bus daemon-a
key - pre spravovanie signálov klávesnice
menu - pre spravovanie signálov pre Awesome WM menu
screen - pre spravovanie signálov pre obrazovku (xrandr)
tag - pre spravovanie signálov pre tagy Awesome WM
timer - pre spravovanie signálov pre timer Awesome WM
tooltip - pre spravovanie signálov pre tooltip Awesome WM
wibox - pre spravovanie signálov pre panely (wibox)
widget - pre spravovanie signálov pre widgety
vlastné - pre spracovanie vlastných objektov

Koncepcia signálov je v projekte Awesome WM relatívne nová (až od verzie 3.4), čo sa odzrkadlilo aj vo Wiki. Momentálne sú signály najhoršie zdokumentovanou časťou Awesome WM, no v najbližšej dobe by sa to malo zmeniť. Aspoň základné informácie k jednotlivým signálom možno nájsť vo Wiki.


Pravidlá pre aplikácie

V minulom článku sme si predstavili tagy, ktoré sa odlišujú od virtuálnych plôch iných managerov tým, že možno jednotlivé aplikácie otagovať. Otagované aplikácie budú vždy pri spustení umiestnené na tag, ktorý bol nami špecifikovaný v rc.lua. Tým Awesome WM urobí poriadok na tagoch za nás a my sa môžeme sústrediť plne na prácu. Túto vymoženosť oceníte, ak mávate spustených mnoho aplikácií a často hľadáte plochu, na ktorej je daná aplikácia spustená. Pri dobrom pomenovaní tagov, dobrom nastavení rozloženia okien a správnom otagovaní aplikácií sa stáva práca na Awesome WM viac než prehľadná.


Tagovanie aplikácií je jednou z variant pre nastavenie pravidiel pre klientske aplikácie. Jednoducho priradíme zoznam s pravidlami do premennej awful.rules.rules.

awful.rules.rules = {
    {
    -- Nastavenie pravidiel pre každú spustenú klientsku aplikáciu
        rule = { },
      properties = {
                    -- Veľkosť ohraničenia okna
                    border_width = beautiful.border_width,
                    -- Farba ohraničenia okna
                    border_color = beautiful.border_normal,
                    -- Aktivovanie posledného spusteného okna klientskej aplikácie
                    focus = true,
                    -- Gestá myšou a klávesové skratky
                    keys = clientkeys,
                    buttons = clientbuttons 
                   }
    },

    {
        rule = {
                class = "gimp"
                },
    --Pravidlá pre Gimp
      properties = {
                    -- Nastaviť plávajúce okná
                    floating = true,
                    -- Pri štarte zobraziť na šiestom tagu prvého obrazového výstupu
                     tag = tags[1][6] 
                    }
    },

    { rule = {
                class = "XTerm",
                instance="ncmpcpp"
            },
    -- Pravidlá pre ncmpcpp spustený v XTerm
      properties = {
                    -- Pri štarte zobraz na tretom tagu v druhom obrazovom výstupe
                    tag = tags[2][3] 
                    }
    },

}
V zozname uvádzame ďalší zoznam, ktorý už obsahuje dané pravidlá. Prvou položkou v tomto zozname je rule. V rule definujeme, v ktorom prípade sa má dané pravidlo použiť. Nastavením rule = { class = "XTerm" } definujeme, že sa dané pravidlo má previesť, ak ide o aplikíciu s WM_CLASS "XTerm". WM_CLASS zistíme jednoducho, stačí, ak z emulátoru terminálu spustíme aplikáciu xprop:
$ xprop WM_CLASS
Kurzor myši sa zmení na krížik a po kliknutí na dané okno klientskej aplikácie nám vypíše podrobnosti o danom klientskom okne:
WM_CLASS(STRING) = "ncmpcpp", "XTerm"
Ako možno vidieť ide o aplikáciu ncmpcpp spustenú v emulátore terminálu XTerm pomocou:
$ xterm -name "ncmpcpp" -e ncmpcpp
(pre pochopenie prepinákov viď man xterm) Takto môžeme selektovať spustené konzolové aplikácie v xterm pomocou jednoduchej podmienky danej v rc.lua:
rule = { class = "XTerm" }
pre všetky okná aplikácie XTerm a podmienkou:
rule = { class = "XTerm", instance="ncmpcpp" } pre okná spustené pomocou hore uvedeného príkazu, kde class je druhá položka WM_CLASS a instance je prvá položka WM_CLASS. Takto jednoducho možno nadefinovať, ktoré okná sa majú na ktorom tagu spúšťať:
properties = { tag = tags[1][6] } }
prípadne či má byť daná aplikácia vykreslená plávajúco:
properties = { floating = true, tag = tags[1][6] }
a pod.


Vzhľad

Priaznivci eye-candy window managerov si pravdepodobne pri Awesome WM neprídu na svoje. Je skutočnosťou, že Awesome WM kladie vysoký dôraz na konfiguráciu na úkor vzhľadu. Ani v tomto seriáli sa nebudeme veľmi témamy zaoberať, aj my dáme dôraz skôr na konfiguráciu, pretože vytváranie tém je rutinná záležitosť


sky
Téma sky dodávaná s Awesome WM.

V predošlom článku sme si povedali, že o témy sa stará knižnica beautiful a každý konfiguračný súbor by mal v sebe zahŕňať nastavenie témy pre Awesome WM. Nastavili sme si štandartnú tému dodávanu s Awesome WM pomocou funkcie beautiful.init(). Štandartná téma sa nachádzala v /usr/share/awesome/themes/default/theme.lua (umiestnenie môže záležať od distribúcie). O adresár vyššie (teda /usr/share/awesome/themes/) sa vyskytujú aj iné témy dodávane spolu s Awesome WM. Súbor theme.lua možno editovať v akomkoľvek textovom editore. Štruktúra témy je veľmi jednoduchá - l-hodnote je priradená farba v RGB. Farba sa zadáva vo formáte #RRGGBB, pričom RR reprezentuje hexadecimálnu hodnotu červenej farby, GG hexadecimálne zelenú a analogicky BB modrú. Preložením anglického názvu l-hodnoty ľahko zistíme, čo nastavujeme. V úvode theme.lua je zvykom nastaviť typ a veľkosť písma používaného v Awesome WM:
theme= {}
theme.font = "Georgia 13"
Nasleduje definovanie celého príkazu pre nastavenie pozadia plochy. Tento príkaz sa prevedie pri štarte Awesome WM. Je možné použiť rôzne aplikácie, ktoré dokážu nastaviť pozadie v X (napr. feh, nitrogen a pod.), no Awesome WM prináša so sebou utilitu s pomenovaním awsetbg:
theme.wallpaper_cmd = { "awsetbg -c /usr/share/awesome/themes/default/background.png" }
Aplikácia awsetbg nastaví ako pozadie plochy obrázok, ktorý jej je predaný ako argument. Pomocou prepináku -c pozadie vycentruje, -f roztiahne na celú plochu. Viac informácií man awsetbg.


Pomenovanie l-hodnôt je intuitívne. Napríklad predaním #RRGGBB hodoty l-hodnote theme.fg_normal nastavíme bežnú farbu písma (fg z anglického slova foreground, bg background). Analogicky theme.bg_normal nastavíme bežnú farbu pozadia prvkov Awesome WM (napr. wiboxu). Ďalej existujú hodnoty theme.fg_focus a theme.bg_focus, ktoré nastavujú farbu písma a wiboxu pri zvýraznení - napr. na paneli pri vybranom tagu. Ak sa napríklad zmení stav klientskej aplikácie na jednom z tagov, v zozname tagov sa tag s danou aplikáciou vyfarbí do farieb definovaných v hodnotách theme.fg_urgent a theme.bg_urgent (opäť theme.fg_urgent pre písmo, theme.bg_urgent pre pozadie tagu).


V Awesome WM môžu byť okná klientskych aplikácií plne ohraničené. Pre nastavenie hrúbky ohraničenia stačí v Awesome WM upraviť theme.border_width. Farbu ohraničenia môžeme následne zmeniť úpravou theme.border_normal pre štandartnú farbu, theme.border_focus pre aktuálne vybrané okno a theme.border_marked pre vyznačené okno klientskej aplikácie.


V tomto článku sme si ukázali, ako oknám klientskych aplikácií pridať záhlavie. Ak vám farba záhlavia nevyhovovala, môžete editovať theme.titlebar_bg_focus, čím nastavíte farbu záhlavia vybraného klientskeho okna aplikácie a úpravou theme.titlebar_bg_normal zmeníte štandartnú farbu záhlavia.


Ak by ste chceli farbou odlíšiť tagy na wiboxe od ostatných widgetov, môžete editovať theme.taglist_bg_normal, theme.taglist_bg_focus, theme.taglist_bg_urgent a theme.taglist_fg_normal, theme.taglist_fg_focus, theme.taglist_fg_urgent. Ak by ste chceli podobne ako tagy odlíšiť aj tasklist, analogicky editujte theme.tasklist_bg_normal, theme.tasklist_bg_focus, theme.tasklist_bg_urgent a theme.tasklist_fg_normal, theme.tasklist_fg_focus, theme.tasklist_fg_urgent. Podľa názvov a predošlých l-hodnôt určite uhádnete, farbu ktorej vlastnosti nastavujete.


V konfiguračnom súbore pre témy je možné navoliť si vlastné farby a použiť ich v hlavnom konfiguračnom súbore napr. pri widgetoch. V editácií však ešte nekončíme. Ak ste podľa minulých dielov vytvorili menu, tu môžete nastaviť šírku a výšku jednej položky v menu:
theme.menu_height = "25"
theme.menu_width = "150"


Okrem nastavenia farieb a veľkostí menu a ohraničenia sa v konfiguračnom súbore témy nastavujú aj ikony pre niektoré vidgety. V minulom článku sme si pridali na wibox widget, pomocou ktorého sme dokázali prepínať rozloženie okien. Obrázky, ktoré znázorňovali aktuálne rozloženie boli definované práve v konfiguračnom súbore témy. Editáciou theme.layout_[názov rozloženia] možno upraviť obrázok, ktorý bude vykreslený vo widgete pri danom rozložení. Názov rozloženia je možné nájsť na obrázku v predošlom článku, prípadne v konfiguračnom súbore. Napr: theme.layout_dwindle = "absolútna/cesta/k/obrázku"


zenburn
Téma zenburn dodávaná s Awesome WM.

Pri obrázkoch aj skončíme editáciu konfiguračného súboru témy. Podobne ako pri obrázkoch vo widgete signalizujúceho rozloženie, je možné nastaviť obrázky ukazujúce sa v záhlaví okien. Pred vytváraním témy odporúčam nahliadnuť do nejakej už vytvorenej témy. Mnoho tém je vytvorených, stačí nahliadnuť do Wiki.


Dostali sme sa na koniec dnešného dielu o kúsok netradičnom Awesome WM. Ukázali sme si základy signálov, tagovania aplikácií a pozreli sme sa aj na štruktúru konfigurčného súboru témy. Ak nám zostanete verní aj naďalej, v piatej a zároveň poslednej časti si znovu upravíme náš konfiguračný súbor, pozrieme sa na widgety a využijeme doposiaľ nadobudnuté vedomosti.


Stiahnuť upravený konfiguračný súbor rc.lua.
    • ospravedlnenie 23.08.2010 | 00:30
      Avatar Milan Dvorský debian,mint kde,android  Administrátor
      ospravedlnujem sa vsetkym za oneskorene publikovanie clanku.
    • screeny 23.08.2010 | 00:53
      Avatar cinan ArchLinux  Používateľ
      bolo by celkom zaujimave spomenut nieco o nastaveni a pracu na viacerych obrazovkach
      • Re: screeny 23.08.2010 | 10:39
        Avatar Fridolín Pokorný Fedora 21  Používateľ
        Posledna cast je uz davnejsie napisana a je venovana widgetom (konkretne kniznici vicious), ale mozem to tam kludne zakomponovat.
    • awesome 24.08.2010 | 03:20
      ado   Návštevník
      Nwm, ale mne to príde suché a nudné. Ničím nezaujímavé. Už len počet čítaní a komentárov hovorí za všetko. Aj to len autor a admin napísali v každom návode.

      • Re: awesome 24.08.2010 | 11:15
        Avatar Milan Dvorský debian,mint kde,android  Administrátor
        ten clanok je vonku dva dni, su prazdniny, takze je jasne, ze nebude hned 10 000 citani ... a ja sa zapajam len sporadicky ... ked uz ide o to ;) a ak sa ti to zda suche a nudne, uz cakam na tvoj clanok :)
      • Re: awesome 24.08.2010 | 18:52
        Avatar Fridolín Pokorný Fedora 21  Používateľ
        Rad privitam nejake rady, ako to ozivit podla tvojho nazoru. Ak niekto nastavuje Awesome WM pochybujem, ze bude chciet citat vtipy na kazdom druhom riadku.
        Snazil som sa zakomponovat veci, ktore vo Wiki alebo v doc nenajdes a budu urcite vhodne v prvotnej konfiguracii.
        Po druhom clanku ma na jabber kontaktovali viaceri, podla clanku nastavovali a zoznamovali sa s Awesome WM. Nie kazdemu sedi, ja si toho dom vedomy.
    • ntb 11.09.2010 | 13:52
      Mepho   Návštevník
      Dufam ze si coskoro najdem cas a tuto seriu clankov aj aplikujem, mam osobitny runlevel na awesome/powersave pre notebook.

      Najviac sa mi na awesome paci ze z Xka startuje < 1 sec, a ze vseho vsudy (hal udev) zaberam 60mb ram po boote (ktory navyse trva s POSTom 19 sekund).

      Predpokladam, ze awesome bol skor robeny na vacsie monitory, ale to mi zatial nevadi. Dik za clanok
      • Re: ntb 11.09.2010 | 16:45
        Avatar Fridolín Pokorný Fedora 21  Používateľ
        Ja pouzivam Awesome WM na 14" (1440x900) a je este to v pohode. Pripajam aj 19" externy, pri ktorom sa mi pracuje spolu s 14" super :) Ale mas pravdu, neviem si ho uplne predstavit na mensom ako 13"-14". Myslim, ze by to nebola spravna volba. Alebo pouzit napr. fullscreen layout na kazdom tagu, ale to by uz nebolo ono.
        • Re: ntb 12.09.2010 | 18:43
          Mepho   Návštevník
          Btw nepoznas nejaku rychlu cestu ako prepinat tie layouty
          (ak je to v tom configu a nesvimol som si to tak sry).
          Ja som bol vzdy zvyknuty prepinat medzi nimi cez Ctr+Alt+Left/Right,
          nieco take by bolo super.
          • Re: ntb 12.09.2010 | 18:48
            Mepho   Návštevník
            Nvm, uz som si nasiel. MagicKey + cislo (sipka), take jednoduche :)
            Idem po experimentovat, zacinam rozmyslat o pouziti awesome ako defaultneho WM :)
            • Re: ntb 12.09.2010 | 19:03
              Avatar Fridolín Pokorný Fedora 21  Používateľ
              Layout prepnes pomocou Mod4+Space (Mod4+Shift+Space pre predchadzajuci).
              Mod4+sipky vlavo/vpravo prepinas medzi tagmi. Tak je to aspon v konfiguracnom subore, ktory je na stiahnutie vo vsetkych dieloch a myslim, ze to tak je aj v default configu.
              Ak si to chces prenastavit, pozri sa na globalkeys. Bolo to rozoberane v predoslom clanku.