Dlaždice trochu jinak: Awesome v kombinaci se Sawfish

2. 10. 2014
Doba čtení: 11 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. Od dnešního dílu se začneme zabývat mnohem praktičtější činností a postupně si nainstalujeme a nakonfigurujeme Awesome v kombinaci se Sawfish.

Už jsem to sice uváděl v prvním dílu seriálu, ale pro jistotu znovu zopakuji konfiguraci mého notýsku: jedná se o stařičký (já ho pořizoval před několika lety už jako bazarový), ale zatím dokonale funkční Dell Latitude D420 (jedno jádro Intel Core Solo 1,06 GHz ULV, maximálně možných 1,5 GB RAM, HDD ZIF 1.8“ 64 GB, displej 12,1“ – 1280×800 bodů, zajímavě oddělitelný dock). Na nic moc důležitého a zásadního ho nevyužívám, a proto jsem se rozhodl na něm odlehčit jak WM, tak aplikace na maximální, ale pro mne ještě únosnou míru.

Nyní je na notesu taková pokusná instalace všech možných WM a aplikací, která předcházela vytvoření této série článků. Po dalších zkušenostech a pokusech jsem se rozhodl, že provedu instalaci a konfiguraci něčeho „definitivnějšího“.

Instalovat budu Debian Testing 32-bit. K instalaci jenom pár poznámek:

  • instalovat se bude pouze základní systém
  • disk bude dělený na tři oddíly: 512 MB boot-EXT2, 57.5 GB root-XFS, 2 GB swap
  • po instalaci se provede doplnění repozitářů o zdroje CONTRIB a NON-FREE
  • po aktualizaci se budou instalovat balíčky xorg, mc a lightdm
  • po instalaci WM se provede konfigurace X11

V rámci nové konfigurace jsem se kromě jiného rozhodl, že ukážu instalaci a nastavení nejnovějších verzí WM – Awesome 3.5.5 a Sawfish 1.10. Na první pohled by se mohlo zdát, že toto není nijak odvážné předsevzetí, ale záhy se ukáže, že to tak úplně jasné a jednoduché není. Problém je totiž v tom, že v Debianu Testing je Awesome verze 3.4.15. Ta je sice plně funkční, ale má odlišnou konfiguraci a chybějící funkce proti verzi 3.5.5. To samé platí pro Sawfish, který je v Debianu ve verzi 1.5.

Pokud se podíváme na verze Awesome v různých verzích Debianu: Debian-Awesome-verze , tak zjistíme, že aktuální verze je až ve verzi Experimental, a tak se jí uživatelé asi hned tak nedočkají. Proto musela být zvolena jiná metoda, jak do systému nejnovější verzi dostat. Jal jsem se tedy hledat a našel launchpad.net/~klaus-vormweg/+archive/ubuntu/ppa.

Kromě jiného jsou zde aktuální verze Awesome (balíčky awesome a awesome-extra) pro poslední dvě verze Ubuntu. Zkoušel jsem tedy přidat PPA do repozitářů Debianu, což se nezdařilo vzhledem k rozdílné konfiguraci adresářů v PPA (ve zkušebním Lubuntu 14.04 na virtuálu ale PPA funguje naprosto v pohodě, to jsem záhy ověřil). Druhou variantou, opět neúspěšnou, byla instalace balíčků, přímo stažených z PPA. Zde jsem narazil na cyklicky nesplněné závislosti a to se mi nechtělo řešit. Už jsem si myslel, že budu muset zůstat na starší verzi, ale nakonec se ukázala jako schůdná cesta, kterou jsem považoval za nereálnou: stáhnout a instalovat balíček z Debianu Experimental.

Tuto akci jsem provedl a pokračoval dál v instalaci aplikací. Tam jsem narazil na nečekaný problém, hlavně v instalaci některých grafických a MM aplikací: při snaze o instalaci se několikrát nepodařilo z repozitáře stáhnout některou z podpůrných knihoven a tudíž i celá instalace nedoběhla do zdárného konce. Bylo to dost nepříjemné zjištění, a tak jsem začal uvažovat, co s tím. Řešení je jistě více, ale po delším rozmýšlení a zkoušení jsem zvolil tuto cestu: budu místo Debianu instalovat Ubuntu 14.04. K tomuto závěru mne vedlo několik důvodů:

  • problémy s instalací některých aplikací v Debianu Testing
  • trochu nedůvěra k balíčku z verze Experimental
  • Ubuntu už vyšlo v první opravné verzi a mělo by být celkem vychytané
  • jedná se o LTS verzi, kde je úplně jasná podpora do budoucna
  • už po instalaci je k dispozici třeba kompletní audio a další věci
  • zvýšené nároky na systémové prostředky jsou v rámci statistické chyby

Abych to dlouho neprodlužoval, zvolil jsem instalaci z tohoto média pro 32-bit: help.ubuntu.com/community/In­stallation/MinimalCD

Rozdělení disku jsem nechal stejné a z nabídky metabalíků jsem vybral Lubuntu minimal installation. Další podrobnosti nemá smysl popisovat, takže skočím hned na první přihlášení. Při instalaci se automaticky přidá LightDM, kde jsou k dispozici tři sezení: Lubuntu, Lubuntu Netbook a Openbox. Prostředí je tedy připravené (ve velmi omezeném rozsahu, kdy je k dispozici vlastně jenom správce souborů PCManFM a XTerm) a můžeme přikročit k instalaci a konfiguraci nejnovější verze Awesome. Pro instalaci je třeba provést několik kroků:

  1. instalovat potřebný balíček příkazem # ~$ sudo aptitude install software-properties-common
  2. přidat příslušné PPA: # ~$ sudo add-apt-repository ppa:klaus-vormweg/awesome
  3. aktualizovat dostupné balíčky: # ~$ sudo aptitude update
  4. ověřit přítomnost nových verzí příkazem # ~$ aptitude versions awesome
  5. instalovat příslušné balíčky: # ~$ sudo aptitude install awesome awesome-extra
  6. ověřit úspěšnost instalace příkazem # ~$ aptitude versions awesome

Pokud vše dopadlo úspěšně (celková velikost WM po instalaci je cca 8,7 MB), můžeme zahájit konfiguraci. Do adresáře $HOME/.config/awesome zkopírujeme konfigurační soubor /etc/xdg/awesome/rc.lua a provedeme několik úvodních kroků (byly popsány již dříve, proto neuvádím žádné podrobnosti):

  • snížíme počet tagů na 4
  • z hlavního menu odstraníme položku Debian Menu
  • v panelu odstraníme zobrazení přepínače layoutů
  • zatím nechávám v panelu zobrazení hlavního menu včetně ikony Awesome
  • terminál nastavím na aplikaci termit

Pak provedeme přihlášení do Awesome a výsledek vidíme na prvním obrázku galerie. Ještě než se pustíme do další konfigurace, rád bych upozornil na jednu velmi zajímavou změnu ve funkčnosti nové verze. Je možné si jí všimnout na dvou místech. Jednak je to v konfiguračním souboru, kde je v sekci klávesových zkratek na konci definována funkce Show Menubar (Win+p). Pokud tuto zkratku použijeme, dostaneme výsledek, který je zřejmý z druhého obrázku. Více je možné si přečíst na awesome.naquadah.org/wiki/Menubar.

Jedná se o velmi zdařilou „náhradu“ dříve použité aplikace dmenu s rozšířenou funkčností. Dmenu si položky bere z adresáře /usr/bin nebo /usr/local/bin, tato volba z /usr/share/applications nebo /usr/local/share/applications. Má to samozřejmě svoje výhody i nevýhody. Výhodou je to, že zobrazuje v panelu také ikony a umožní tak lépe vyhledávat potřebnou aplikaci. Vyhledávání funguje stejně, pomocí postupného psaní názvu aplikace. Stejné je i zavření nabídky klávesou Esc. Také si ve výše uvedeném Wiki příspěvku můžete všimnout dalších možností pro práci s Menu Bar. Nevýhodou je to, že daná aplikace musí v adresáři mít svůj APPName.desktop soubor. Pokud by tam ale nebyl (upozorním na to, že po instalaci nějaké aplikace nemusí být v nabídce automaticky viditelná. Stačí ale restartovat WM a vše je v pořádku), je možné aplikaci přímo spustit zadáním jejího názvu. Pro moje účely je tato varianta dostatečná, takže dmenu nebudu vůbec instalovat a přidám pouze gexec – celkem 78 kB na disku:

# ~$ sudo aptitude install gexec

Provedu dvě změny v konfiguraci, kdy spuštění Menu Bar nastavím na Ctrl+MezerníkGexec na Ctrl+Alt+Mezerník (původní nastavení nechám beze změny):

altkey = "Mod1"
gexec = "gexec"

awful.key({modkey}, "p", function() menubar.show() end),
awful.key({"Control"}, "space", function() menubar.show() end),
awful.key({altkey,"Control"}, "space", function() awful.util.spawn(gexec) end)

Pro první fázi jsem vynechal záměrně čárky na konci řádků, abych demonstroval již dříve zmíněné chybové hlášení. Jak to vypadá po snaze o restart WM, je vidět na třetím obrázku v galerii. Pokud ale vložíme kód podle příkladu, bude vše OK a po restartu můžeme nově definované zkratky použít. Pokud by se vám zdálo, že nabídky v menu jsou příliš drobné, je možné to změnit nastavením globálního fontu pro WM. Proto přidáme na řádek pod nastavení tématu například tento kód:

awsome.font "Monospace Bold 20"

Opět si všimněte, že jsem vynechal jeden znak v názvu WM a vyvolal tak ještě podrobnější chybou hlášku – viz obrázek č. 4. Pokud text opravíme a provedeme restart, je všechno v pořádku, ale font je pořád stejně malý. Problém může být v tom, jestli je daný font v systému přítomný a jestli jsme „trefili“ jeho název. A nejsou to jenom tyto dva problémy. Toto naše nastavení totiž „přebíjí“ font, který je nastavený v rámci zvoleného tématu. K řešení vedou dvě cesty. Ta složitější je popsána na <a>awesome.naquadah.org/wi­ki/Customizing_Fonts.

Ta jednodušší je jako root otevřít soubor /usr/share/awesome/themes/de­fault[sky,zenburn]/theme.lua a upravit řádek s fontem dle libosti. Na pátém obrázku je výsledek nastavení

theme.font = "sans bold 8"

Tím se dostáváme do dalšího kroku, což je spuštění správce schránky při startu WM. Jako první krok samozřejmě instalujeme

# ~$ sudo aptitude install parcellite

Jako druhý krok pak upravíme konfiguraci a trochu ji rozšíříme proti ukázkové v minulých dílech. Použijeme návod z awesome.naquadah.org/wi­ki/Autostart.

a přidáme do konfiguračního souboru pokročilejší funkci pro spouštění aplikace jenom v jedné instanci. Kód je zde:

function run_once(prg,arg_string,pname,screen)
    if not prg then
        do return nil end
    end

    if not pname then
       pname = prg
    end

    if not arg_string then
        awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. "' || (" .. prg .. ")",screen)
    else
        awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. " ".. arg_string .."' || (" .. prg .. " " .. arg_string .. ")",screen)
    end
end

Pro spuštění konkrétní aplikace pak přidáme kód

run_once("parcellite","&")

Výsledek našeho snažení vidíme na šestém obrázku. Já konkrétně používám spuštění pouze správce schránky. Dalším logickým kandidátem by asi byla aplikace pro nastavení sítě/WiFi. Já pro tento účel používám Wicd-gtk, protože Network Manager se mi zdá zbytečně moc obsáhlý. Přes malou velikost (cca 3 MB) při spuštění Wicd požere skoro 25 MB paměti, a to se mi zdá dost na to, abych ho měl spuštěný trvale.

Dříve jsme v konfiguraci nastavili „napevno“ jako terminál aplikaci termit. Jedná se jeden z mnoha emulátorů terminálu. Já jsem si ho vybral pro práci na notýsku i hlavním stroji hlavně proto, že má jako Awesome konfiguraci v jazyce LUA. Více informací o něm lze nalézt na GutHubu.

V Ubuntu je starší verze 2.9.4–2, na webu je ke stažení verze 2.9.6, obě z roku 2012. pro nejnovější verzi 2.10 jsou na webu k dispozici zdrojové kódy. I když byl termit instalován, výchozím terminálem zůstává původní XTerm. My máme dvě možnosti, jak to změnit. Tu první už jsme ukázali – nastavili jsme si termit pouze pro práci v Awesome. Pokud bychom ho ale chtěli nastavit jako výchozí systémový terminál, musíme změnit systémové nastavení. To je možné provést příkazem pro změnu tzv. alternatives a následnou volbou příslušné aplikace. Více je vidět na sedmém obrázku v galerii. Aby byla změna plná, provedeme ještě úpravu konfigurace na původní stav:

terminal = "x-terminal-emulator"

Po úpravě a restartu můžeme kombinací Win+Enter vyzkoušet, že se skutečně spustí termit. Jenom pro představu a případné zájemce o vyzkoušení přidávám obsah aktuálního konfiguračního souboru $HOME/.config/termit/rc.lua.

require("termit.colormaps")
require("termit.utils")

defaults = {}
defaults.windowTitle = 'Termit'
defaults.tabName = 'Terminal'
defaults.encoding = 'UTF-8'
defaults.wordChars = '+-AA-Za-z0-9,./?%&#:_~'
defaults.scrollbackLines = 4096
defaults.font = 'Monospace Bold 12'
defaults.foregroundColor = "#00FF00"
defaults.backgroundColor = "black"
defaults.geometry = '80x24'
defaults.hideSingleTab = false
defaults.showScrollbar = true
defaults.fillTabbar = false
defaults.hideMenubar = false
defaults.allowChangingTitle = false
defaults.visibleBell = false
defaults.audibleBell = false
defaults.urgencyOnBell = false
setOptions(defaults)

setKbPolicy('keysym')

Než se pustíme do dalších nastavení, provedeme pár změn v konfiguraci, které nám následně i do budoucna mohou trochu usnadnit práci. Definujeme si totiž několik lokálních proměnných, které zajistí spouštění uživatelských aplikací. Změní se tak výše uvedené jednoduché nastavení, které jsme si na počátku definovali. Tato akce obsahuje dva příkazy. První z nich definuje spouštěné aplikace a druhý způsob spuštění (kde by to bylo logické, můžeme samozřejmě použít výše definovanou funkci na spuštění jediné instance dané aplikace). Pro první fázi bude tato sekce velmi jednoduchá:

local command = {
gexec = "gexec"
}

local exec = awful.util.spawn
local sexec = awful.util.spawn_with_shell

Pro budoucí využití máme již vše pro spouštění aplikací připravené a stačí jenom přidávat další položky do příkazu command (položky je NUTNÉ oddělit čárkou!). Nyní můžeme upravit také příkaz na spuštění aplikace pomocí definované klávesové zkratky takto:

awful.key({ altkey,"Control"},"space", function() exec(command.gexec) end)

Po uložení a restartu WM můžeme vyzkoušet kombinaci Ctrl+Alt+Mezerník a výsledek vidíme na osmém obrázku. Toto je styl, který bude fungovat při nastavení výchozího layoutu (float). Pokud bychom ovšem přešli do v pořadí druhého layoutu (tile, mnou jednoznačně nejčastěji užívaný styl), už to vypadá mnohem „divněji“ – viz devátý obrázek v galerii. Zkusíme s tím tedy něco udělat tak, aby se „rozumné“ zobrazení aplikace podařilo zajistit vždy, bez ohledu na aktuální layout. Za tímto účelem se přesuneme v konfiguraci do sekce Rules (cca 385. řádek). Zde jsou nastavena pravidla pro několik aplikací (MPLayer, pinentry, gimp a Firefox). Pro první tři je nastaven layout float, pro Firefox (standardně je akce nefunkční, ale jako příklad stačí) pak spuštění na druhém tagu=ploše a první obrazovce-monitoru. Já ani jednu z těchto aplikací nepoužívám, takže provedu jednoduchou úpravu pravidla pro pinentry:

{ rule = { class = "gexec" },
properties = { floating = true }},

Po zkoušce a restartu WM však bohužel vidíme, že se situace vůbec nezměnila! Jenom pro připomenutí jedna důležitá informace: po restartu se WM vždy nastaví do výchozího (prvního v pořadí konfigurace) layoutu float, tak je třeba na to myslet! Problém nefunkčního zobrazení je celkem zákeřný, ale řešitelný. Hlavní problém je totiž v příkazu class = … Zde je totiž bezpodmínečně nutné nastavit systémově správné pojmenování. Naštěstí k tomu existuje pomocná aplikace. Celé se to provede následovně:

  1. otevře se okno gexec
  2. v terminálu se zadá příkaz # ~$ xprop WM_CLASS
  3. myší se klikne do okna gexec
  4. v terminálu se objeví hledaný název

Celé je to vidět na předposledním obrázku. Nyní stačí změnit název třídy z gexec na Gexec, uložit, restartovat WM, změnit layout na tile a spustit gexec a ejhle – vše funguje naprosto bezvadně. Jako poslední nastavení tohoto dílu si ukážeme změnu lokalizace WM. Jak jste si jistě všimli hlavně na panelových hodinách, WM je nastaven na angličtinu. To samozřejmě může někomu vyhovovat. Někdo to také může řešit pomocí systémových nástrojů. My se ale podíváme, jak to vyřešit pomocí nastavení Awesome. Nejprve si ověříme, jaká lokalizace je nastavená v systému,  a sice příkazem:

# ~$ env | grep LANG
LANG=cs_CZ.UTF-8
GDM_LANG=cs
LANGUAGE=cs

Potom na začátek konfiguračního souboru za sekci inicializace knihoven přidáme jeden příkaz:

ict ve školství 24

os.setlocale(os.getenv("LANG")

Jak se situace po uložení a restartu změní, vidíme na posledním obrázku.

Tímto dnešní díl zakončíme a v příštím dílu se zaměříme hlavně na výběr, instalaci a konfiguraci rozšíření stavového panelu.

Autor článku