Awesome WM III. – konfiguračný súbor I. časť

Awesome WM III. – konfiguračný súbor I. časť
06.07.2010 22:00 | Články | Fridolín Pokorný
Po teoretických základoch je čas posunúť sa o ďalší diel ďalej. V tejto časti sa pozrieme kúsok bližšie na konfiguračný súbor Awesome WM a pustíme sa do kreatívnych úprav. Ukážeme si nevyhnutné základy konfiguračného súboru.


Hlavný konfiguračný súbor Awesome je relatívne rozsiahly a nie je problém pri nastavovaní Awesome WM vytvoriť niekoľko sto riadkový konfiguračný súbor. Je preto dobré, aby bol konfiguračný súbor čo najviac prehľadný. Zabránite vypadaniu vlasov a presedeniu niekoľkých hodín pred monitorom.


Prvá konfigurácia Awesome WM môže byť zdĺhavá a nudná. K článku som pripravil konfiguračný súbor s komentármi. Na konci článku si ho môžete stiahnuť a vyskúšať ho s Awesome WM. Bol testovaný pod aktuálnou stabilnou verziou 3.4.5 s označením "Close To You". Staršie, prípadne novšie verzie Awesome WM môžu vyžadovať zmeny v konfiguračnom súbore. Hlavne pri novších verziách odporúčam nahliadnuť do Wiki, kde sa nachádzajú poznámky k úprave konfiguračného súboru pri prípadnej zmene v nových verziách.


Konfiguračný súbor Awesome WM je možné otvoriť v akomkoľvek textovom editore a robiť prípadné zmeny. Konfiguračný súbor dodávaný k článku som rozčlenil do niekoľkých sekcií, aby sa čitateľ pri čítaní alebo zmenách nestratil. Podľa týchto sekcií budeme postupovať aj v našom seriáli, preto ho odporúčam stiahnuť a umiestniť do ~/.config/awesome/rc.lua, čo je štandartné umiestnenie konfiguračného súboru. Po každej úprave Awesome WM odporúčam spustiť príkaz awesome -k (awesome --check), ktorý umožní odhaliť chyby v syntaxe ešte pred spustením samotného WM.


Xephyr - slovo pred konfiguráciou

V predošlom článku sa v komentároch objavilo odporúčanie na aplikáciu menom Xephyr. Táto aplikácia spustí novú X session v klientskom okne už spustenej X session. Vyhnete sa tak neustálemu reštartovaniu X a editáciu môžete robiť v grafickom prostredí, ak sa nekamáratite s konzolovými textovými editormi. Vo väčšine distribúcií je Xephyr súčasťou balíčku xorg-server, prípadne je osamostatnený v balíčku s menom xserver-xephyr.


Po nainštalovaní môžme Xephyr spustiť príkazom Xephyr -ac -br -noreset -screen 800x600 :1. Prepinák -ac spôsobí vypnutie kontroly prístupu obmedzenia, -br spôsobí vytvorenie klientského okna s čiernym pozadím, -noreset zamedzí reštartovaniu, pokým je spustený klient a -screen umožní okrem iného aj špecifikovať rozlíšenie spúšťanej X session v klientskom okne. Po zmene premennej DISPLAY (viď parameter :1) môžeme spúšťat aplikácie z konzoli na definovanú X session.
DISPLAY=:1; xterm #spustí xterm v klientskom okne X session
DISPLAY=:0; xterm #spustí xterm v hlavnom X session
Takto možno prepínať X session podľa toho, kde chceme okno klientskej aplikácie, prípadne Awesome WM spustiť. Pre spustenie Awesome WM v klientskom X session stačí teda zadať:
DISPLAY=:1; awesome
prípadne pridať prepinák -c (--config) a špecifikovať tak konfiguračný súbor s ktorým chceme Awesome WM spustiť. Samozrejme stačí nastaviť premennú DISPLAY raz pre každú X session.


V seriáli sa dostaneme aj ku nastavovaniu klávesových skratiek. Ak by sme chceli vyskúšať klávesové skratky v Awesome WM spusteného cez Xephyr, nebude reagovať, prípadne zareaguje Awesome WM spustený v hlavnej X session. Je to spôsobené tým, že po stlačení klávesovej skratky preberie kontrolu najprv hlavná X session a až potom predáva kontrolu ďalším klientskym aplikáciam, teda aj klientskemu oknu X session. Pre prepnutie do klientskej X session použijeme klávesovú skratku Ctrl+Shift. Teraz sa bude klientská X session správať ako hlavná. Preberie kontrolu nad skratkami a zároveň obmedí myš len na svoju plochu. Pre spätné prepnutie do hlavnej X session použijeme znovu spomínanú klávesovú skratku Ctrl+Shift.


Ja som použil Xephyr, keď som nastavoval konfiguračný súbor pre prácu s externým obrazovým výstupom s odlišným rozlíšením. Mohol som tak vidieť výsledok konfigurácie v klientskom okne bez toho aby som mal pripojený externý obrazový výstup. Po nastavení rozlíšenia v Xephyr som mohol vidieť správanie sa rozloženia aplikácií alebo napríklad zabrániť pretekaniu widgetov vo wiboxe bez reštartovania X servera.



Inicializačná sekcia:

V prvej sekcii inkludujeme knižnicu awful. Táto knižnica je základnou knižnicou Awesome WM. Dovolí nám použiť funkcie nevyhnutné pre konfiguráciu window managera:
require(“awful”)
Ďalšou dôležitou knižnicou je knižnica nesúca označenie beautiful. Funkcie, ktoré tvoria túto knižnicu, nám umožňujú nastaviť vzhľad Awesome WM. Každý fungčný konfiguračný súbor musí Awesome WM povedať, ktorú tému má Awesome WM použiť. Je preto nevyhnutné nastaviť tému, ináč by mohlo dôjsť ku komplikáciám. Pre začiatok použijeme základnú tému dodávanu s Awesome WM. Výzor zodpovedá obrázkom k článku.
require(“beautiful”)
beautiful.init("/usr/share/awesome/themes/default/theme.lua")
Nasleduje nastavenie niektorých premenných. Ako prvé si nastavíme preferovaný emulátor terminálu. Ak budete chcieť zmeniť preferovaný emulátor terminálu, jednoducho vymeníte xterm. Takto bude konfiguračný súbor prehľadnejší a komplexnejši.
terminal = "xterm"
Analogicky nastavíme preferovaný terminálový textový editor a príkaz, ktorým ho spustíme v termináli:
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
Pozn.: Často sa nastaví preferovaný editor v distribúciách pod premennou EDITOR (preto os.getenv("EDITOR")). Pozri export EDITOR v ~/.bashrc.
Ako posledné je v tejto sekcii definovaná premenná modkey. Ako bolo už v predošlom dieli uvedené, Awesome používa ako hlavné tlačidlo označované Mod4 pre svoje klávesové skratky. Je to zvyčajne klávesa medzi Alt a Ctrl, klávesa s logom Windows. Ak chcete, môžete zmeniť podľa svojich predstáv, no dajte pozor na prípadné kríženie a prekrývanie skratiek.


Sekcia tagy

V minulom dieli sme si predstavili tagy. Takéto virtuálne plochy predstavuju základ okenného manažéra Awesome WM a dovoľujú nám efektívne rozdeliť prácu medzi viac plôch. Čas strávený pri konfigurácii Awesome WM sa pri dobrom nakonfigurovaní určite vráti. Na každom tagu si môžeme nastaviť preferované rozloženie. Predstavenie jednotlivých rozložení zjednodušuje obrázok:

Aby sme konfiguračný súbor sprehľadnili, vytvoríme si zoznam, ktorý bude obsahovať jednotlivé rozloženia:
layouts =
{
awful.layout.suit.floating,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.spiral,
awful.layout.suit.spiral.dwindle,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.magnifier
}
Teraz si vytvoríme už spomínané tagy. Každý tag môžeme pomenovať ľubovoľne. Je len na vás, aký názov si vyberiete. Mne sa osvedčilo pomenovanie tagov podľa práce, ktorú na jednotlivých tagoch robím. Hranaté zátvorky používam len na vizuálne oddelenie tagov na wiboxe, nie sú nutné. Každý tag má prednastavené rozloženie okien. Pri štarte Awesome sa na tomto tagu nastaví rozloženie, ktoré uvedieme v layout, pričom záleží na poradí. Prvému tagu označenému ako “[term]” bude prislúchať rozloženie layouts[3], teda awful.layout.suit.title.left (tretie zo zoznamu).
tags = {
names = { "[term]", "[web]", "[chat]", "[work]", "[code]", "[other]" },
layout = { layouts[3], layouts[1], layouts[1], layouts[5], layouts[1], layouts[7] }
}
Jednoduchým for cyklom nastavíme takéto tagy na všetky obrazové výstupy (členská funkcia count() objektu screen vracia počet aktívnych obrazových výstupov). Analogicky je možné definovať tagy a ich ďalšie možnosti pre každý obrazový výstup špecificky. Awesome má výbornú podporu obrazových výstupov a v tomto smere medze rozhodne nekladie.
for s = 1, screen.count() do
tags[s] = awful.tag(tags.names, s, tags.layout)
end

Sekcia menu

Ak postupujete krok za krokom podľa tohto návodu, určite ste Awesome WM skúšali spustiť. Ak ste sa s ním hrali dlhšie zistili ste, že Awesome vyvolá menu pri pravom kliknutí myši na plochu, prípadne pri kliknutí na ikonu s logom Awesome WM umiestnenom vo wiboxe. V konfiguračnom súbore si môžeme toto menu prispôsobiť podľa svojich požiadaviek. Ak by sa konfiguračná sekcia s menu stala príliš rozsiahlou, odporúčam vytiahnuť menu do osobitného konfiguračného súboru a importovať ho pomocou funkcie require(). Samotná konfigurácia menu je jednoduchá. Stačí nám vytvoriť zoznam s položkami menu a prideliť akciu objektu (spúšťaču/ikone), aby toto menu použilo pri požadovanej akcii. Položky menu vytvoríme jednoducho:
myawesomemenu = {“názov položky”, akcia, ikona}

Ak chceme vytvoriť menu, ktoré má otváracie časti použijeme:
myawesomemenu = {“názov otváracej položky”, premenná obsahujúca zoznam položiek po otvorení, ikona}

Ikona je v obidvoch prípadoch nepovinná. Tu konfigurácia menu nekončí. Ak by ste spustili Awesome s touto konfiguráciou, menu by sa nezobrazilo. Akciu pre otvorenie menu budeme pridávať neskôr v tomto článku.

Sekcia panely

Ako už bolo povedané, panel (wibox) skutočne tvoria widgety, ktoré si môžeme na panel ľubovoľne pridať, usporiadať a zarovnať. O správnu prácu základných widgetov sa postará knižnica awful. Môžeme si pridať napríklad hodiny, systray, zoznam spustených aplikácií na tagu a mnoho iných. Napr:
mytextclock = awful.widget.textclock({ align = “right” })
mysystray = widget( { type = “systray” } )

Pre viac widgetov odporúčam prečítať dokumentáciu alebo prečítať komentáre v konfiguračnom súbore priloženému k článku. Konfiguračný súbor k článku obsahuje nakonfigurované dva wiboxy (horný a dolný). Tu popíšem konfiguráciu len jedného. Opäť odporúčam nahliadnuť do konfiguračného súboru dodávaného k článku. Najprv deklarujeme premennú wibox a taglist pre zoznam tagov:
mywibox = {}
mytaglist = {}

V jednoduchom cykle for nastavíme na každý obrazový výstup wibox:
for s = 1, screen.count() do
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons),
mywibox[s].widgets = {
mytextclock,
s == 1 and mysystray or null
layout=awful.widget.layout.horizontal.leftright
mytaglist[s]
}
end

Takto sme vytvorili jednoduchý wibox s hodinami, zoznamom tagov a systrayom (systray je zobrazovaný len na 1. obrazovom výstupe).

Gestá myšou

V sekcii venovanej gestám myšou sú uvedené pravidlá v tabuľke. Funkcia root.buttons() prevedie nastavenia pre klávesové skratky uvedené v tabuľke, ktorú preberá ako argument. Do tabuľky vkladáme pomocou funkcie awful.table.join(). Ako parametre uvedieme naše skratky, ktoré nám pomôže nastaviť funkcia awful.button(). Nastavenia môžu vyzerať napríklad:
root.buttons(awful.util.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end),
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
)
)

Tu sú popísané tri základné gestá. Funkcia awful.button() očakáva prvý parameter zoznam kláves. My klávesy nechceme použiť a tak predáme prázdny zoznam. Druhý parameter je v našom prípade 3. Číslo 3 predstavuje zvyčajne právé tlačítko na myši. Analogicky 1 predstavuje ľavé tlačítko na myši, 4 a 5 sú scrollovacie pohyby na koliesku myši (4 smerom dopredu, 5 smerom dozadu). Ak máte viactlačítkovú myš, vyskúšajte si označenie jednotlivých tlačidiel (pokračujte v číslovaní). Takéto nastavenie prevedie na ploche akcie pre posun na predchádzajúci a nasledujúci tag pri rolovaní kolieska a vyvolanie menu, ktoré sme si vytvorili v sekcii venovanej tvorbe menu.

Klávesové skratky

Klávesové skratky nastavíme podobne ako gestá myšou v predchádzajúcej sekcii. Pre sprehľadnenie nepredávame funkcii root.buttons() hneď tabuľku, ale túto akciu urobíme pomocou premennej (skutočne ide len o sprehľadnenie, pretože klávesových skratiek je veľa). Tu však musíme funkciu awful.button() vymeniť za funkciu awful.key(). Zatiaľčo awful.button() sa používa na skratky definované pomocou myši, funkcia awful.key() sa používa pri nastavení klávesových skratiek (viď 2. parameter pri týchto funkciách). Ukážka konfigurácie a niektorých klávesových skratiek z konfiguračného súboru:
globalkeys=awful.table.join(
--predchadzajúci tag po stlačení Mod4 a šípky vľavo
awful.key( { “Mod4” }, “Left”, awful.tag.viewprev ),
--nasledujúci tag po stlačení Mod4 a šípky vpravo
awful.key( { “Mod4” }, “Right”, awful.tag.viewnext )
)
--Funkcia, ktorá prevedie nastavenia v Awesome WM.
root.keys(globalkeys)

Výsledný konfiguračný súbor v praxi:

Týmto dnešný diel končí. V ďalšom diely si povieme niečo o signáloch, pravidlách a ako prispôsobiť Awesome ešte o kúsok viac WM.


Stiahnuť upravený konfiguračný súbor rc.lua.
    • Dobree 11.07.2010 | 23:39
      Avatar Dare_devil Debian, OpenSuse  Používateľ
      Dobree, len tak dalej!! Tesim sa na pokracovanie !
      There is no flag large enough to cover the shame of killing innocent people
      • Re: Dobree 12.07.2010 | 12:09
        Avatar Milan Dvorský debian,mint kde,android  Administrátor
        trochu som zabudol na ten clanok, takze az neskor som ho publikoval.
    • Preco nejde NetBeans? 18.07.2010 | 18:47
      dash   Návštevník
      Zdravim,
      chcel som sa spytat, preco v inych prostrediach ako KDE, GNOME, XFCE mi NetBeans ide, ale ked ho pustim v Awesome, tak dostanem len biely stvorec. Na zaciatku sa normalne spusti ten maly modry stvorec, kde loaduje moduly a potom ked sa uz akoze ma spustit tak nabehne biely stvorec a nic v nom.

      Najskor som si myslel, ze mam pokazene nejake baliky tak som vsetko rekompiloval. Nechal som zbehnut revdep-rebuild, system som aj updejtol s --newuse a --deep flagom. Az neskor som prisiel na to, ze ked spustim akekolvek ine prostredie, tak NetBeans ide. Pouzivam distribuciu Gentoo.

      Napadlo ma to len preto, lebo ked som spustam FlightGear simulator tak ten mi zasa padal.

      Momentalne som spat a pouzivam XFCE, pretoze NetBeans je pre mna existencne potrebne :) a Awesome ma totalne odradilo, mal som s nim niekolko zlych skusenosti.
      • Re: Preco nejde NetBeans? 18.07.2010 | 18:59
        Avatar Fridolín Pokorný Fedora 21  Používateľ
        Odpoved bude pravdepodobne tu.
        FlightGear bude asi nejaka hra (podla google), s tou nepomozem.
        Samozrejme kazdemu sedi nieco ine. Awesome WM je prostredie, ktore si vyzaduje podrobnejsiu konfiguraciu na zaciatku a lahku priebeznu udrzbu. Pri castej praci sa to urcite vrati.
        Samozrejme nikomu nic nevnucujem, ale som rad, ze aspon niekoho serial zaujal. :)