Hlavní navigace

Konfigurace Dwm – překlad nové verze, tagy a okna, manipulace s nimi

Jaromír Vojtaj 6. 10. 2016

Minulý díl byl věnován dokončení konfigurace Qtile – stylu rozložení oken a panelu. V dnešním dílu se zaměřím na Dwm, způsob překladu, konfiguraci tagů a oken, klávesových zkratek a spouštění aplikací

V minulém dílu jsem dokončil ukázku uživatelské konfigurace WM Qtile a od dnešního dílu se přesunu na dalšího zástupce dlaždicových WM v pořadí – Dwm. Ten jsem již krátce představil a předvedl. Bylo to ale ve standardní konfiguraci, pouze na základě instalace z balíčků distribuce. V tomto případě je vlastní spustitelný soubor uložen v adresáři /usr/bin. Aby bylo možné Dwm uživatelsky konfigurovat, je potřeba někde vzít konfigurační soubor. Jak už jsem dříve uvedl, od ostatních zmíněných WM se Dwm liší hlavně v tom, že se u něj konfigurace provádí přímo ve zdrojovém, resp. hlavičkovém souboru. Změny se pak do aplikace promítají prostřednictvím běžného překladu programu v jazyce C. To má samozřejmě svoje výhody i nevýhody, ale je to prostě holý fakt. V základní instalované verzi žádné zdrojové soubory nejsou k dispozici, takže je nutné stáhnout celý balíček z webu Suckless DWM

Aktuální je balíček s označením dwm-6.1.tar.gz z roku 2015 o velikosti necelých 26 kB. Tento archiv se někam rozbalí a na obrázku je vidět obsah celého adresáře

Zdrojové kódy Dwm

Jak je z obrázku zřejmé, je zde k dispozici celkem patnáct souborů, z nichž čtyři jsou spíše informativní (BUGS, LICENSE, README, TODO). Ostatní jsou pak soubory, které mají nějaký smysl pro překlad dané aplikace. Při bližším zkoumání souboru README se zájemcům dostane velmi stručných informací o další možné činnosti:

  • pro úspěšný překlad je v systému nutné mít k dispozici hlavičkové soubory knihovny Xlib
  • při překladu se spustitelná aplikace ukládá do adresáře /usr/local
  • samotný překlad se provádí příkazem

make clean install

  • nově přeložený WM se pak spustí příkazem pro odlišení od stávající verze z distribučních balíčků
exec /usr/local/bin/dwm
  • stavové informace je možné zobrazit v panelu pomocí aplikace xsetroot
  • konfigurace se provádí vytvořením a úpravou souboru config.h a následným překladem aplikace

Jak je z předchozího obrázku a popisu jasně patrné, žádný takový soubor pro konfiguraci ale v balíčku není. Tedy alespoň na první letmý pohled. Na druhý pohled už je to lepší a tento soubor ve standardním tvaru je možné vytvořit velmi jednoduše:

cp $HOME/Dokumenty/dwm-6.1/config.def.h $HOME/Dokumenty/dwm-6.1/config.h

Jeho standardní verzi dávám do přílohy

Dwm – standardní konfigurace

Při pohledu do útrob nového konfiguračního souboru je možné zjistit několik věcí:

  • jedná se o běžný hlavičkový soubor jazyka C
  • konfigurace se nastavuje pomocí deklarací statických proměnných
  • soubor má celkem 112 řádků včetně těch prázdných a nápovědy
  • určitá základní konfigurace je již nastavená

Konfiguraci nebudu zatím podrobněji rozebírat a nechám to na později. Teď by asi bylo dobré si vyzkoušet prvotní překlad ve standardní konfiguraci a nově vytvořený WM zkušebně spustit. K překladu je nutné v příslušném adresáři otevřít terminál a spustit příslušný příkaz pro překlad. Ten bude ale vypadat trochu jinak, než je v nápovědě. Vzhledem k tomu, že se soubor instaluje do systémových adresářů, je nutné přidat administrátorské oprávnění:

sudo make clean install

Jak je ale patrné z dalšího obrázku, první krok se velmi nepodařil a skončil chybou:

Chyba při prvním překladu

To je sice při standardní konfiguraci a aktuálních souborech z webu projektu divné, ale bohužel reálné. Náprava je naštěstí rychlá a jednoduchá:

  • je nutné otevřít soubor config.mk
  • najít v něm řádek č. 21
  • zakomentovat příslušný příkaz FREETYPEING=${X11ING}/freetype2, který se vztahuje pro překlady na systému OpenBSD
  • změny uložit
  • výsledek je vidět na dalším obrázku

Úprava konfigurace

Následný pokus o překlad bude již přes několik varování úspěšný – viz obrázek. Další obrázek dokazuje, že spustitelný soubor je na svém místě (jak to ostatně hlásí i komentáře k překladu):

Úspěšný překlad

Nový spustitelný soubor

Pak už nezbývá, než do příslušné sekce iniciačního souboru $HOME/.xinitrc provést přesměrování na nový spustitelný soubor a zkusit novou verzi WM spustit:

dwm)
    exec /usr/local/bin/dwm
;;

Na dalším obrázku je jasně vidět, že spuštění bylo úspěšné

Nová verze Dwm

Aby byl důkaz ještě přesvědčivější, tak provedu v konfiguraci dvě velmi jednoduché změny. Jak je z obrázku patrné, je zde k dispozici celkem devět tzv. tagů. Je to něco jako pracovní plochy v jiných WM, ale ne zase tak úplně. Pro účely článku ale toto srovnání úplně postačí. Tagy jsou v Dwm definovány jako proměnná tags. Změny je samozřejmě možné provádět i na „živém“ Dwm, takže uvedu jenom několik standardních klávesových zkratek pro důležité akce:

  • otevření spouštěče aplikací dmenu – Alt+P
  • otevření terminálu st – Alt+Shift+Enter
  • zavření aktuálního okna – Alt+Shift+C
  • ukončení dwm – Alt+Shift+Q

Změny v konfiguraci budou pouze dvě (stačila by jenom jedna, ale bude lepší z konfigurace odstranit, co je tam zbytečné). První bude spočívat v úpravě příslušné sekce definice proměnné tagů:

/* tagging */
static const char *tags[] = { "1", "2", "3" };

Druhá pak bude spočívat ve smazání zbytečných definic pro přechod do již neexistujících tagů (čísla 3–8). V konfiguraci pak zůstanou jenom tři definice:

TAGKEYS(                        XK_1,                      0)
TAGKEYS(                        XK_2,                      1)
TAGKEYS(                        XK_3,                      2)

Změny se uloží, provede se nový překlad, ukončení a nový start Dwm. Pozitivní výsledek ukazuje další obrázek

Nastavení tagů

Jak je možné si všimnout, pro přechody mezi tagy jsou (podobně jako třeba u Spectrwm) použity klávesy číslic, konkrétně těch, které se nacházejí v horní řadě klávesnice s diakritickými znaky. Jejich použití není úplně ideální, takže opět použiju již dříve uvedenou náhradu – funkční tlačítka F1-F3. Aby bylo možné tato tlačítka použít, je nutné udělat dvě změny. První z nich bude v souboru dwm.c. Tam je nutné přidat jeden řádek pro zahrnutí jednoho konkrétního hlavičkového souboru do kódu mezi ostatní podobné příkazy:

#include <X11/XF86keysym.h>

Druhá změna pak bude provedena samozřejmě v konfiguračním souboru config.h:

TAGKEYS(                        XK_F1,                      0)
TAGKEYS(                        XK_F2,                      1)
TAGKEYS(                        XK_F3,                      2)

Provede se nový překlad, ukončení a opětný start Dwm a je možné si vyzkoušet hned čtyři různé varianty manipulace s tagy a okny v nich. Tedy přesněji řečeno: bylo by to možné, kdyby nebylo nastavení takové, jako aktuálně je. Možná to někoho nemusí na první pohled napadnout (a já se mezi takové „hrdě“ hlásím), ale kombinace kláves Ctrl+Alt+F2 nedělá spuštěnému grafickému prostředí libovolného typu zrovna moc dobře! Bude proto nutné před samotnou zkouškou udělat pár dílčích změn, které souvisejí s nastavením modifikátorů. Jak už asi vyplynulo z minulých příkladů, hlavním modifikátorem je klávesa Alt. Celou operaci je možné provést ve dvou krocích:

  • deklarace všech potřebných modifikátorů, resp. čtyř základních:
#define MOD Mod4Mask
#define ALT Mod1Mask
#define CTRL ControlMask
#define SHIFT ShiftMask
  • náhrada všech stávajících názvů modifikátorů jejich novými verzemi, nejlépe s pomocí textového editoru

Klávesa Alt sice není v aktuální konfiguraci využita, ale pro další použití se bude hodit. Nyní ale jenom uložím změny a zkusím nový překlad. Pokud se případným experimentátorům nevloudila nějaká nečekaná, nezvaná chybička, překlad by měl proběhnout bez problémů. Pokud by tomu bylo jinak, překladač samozřejmě vyhodí nějakou chybovou hlášku, ze které lze většinou velmi dobře odhadnout problém. Ještě než se vrátím zpět k tagům, tak ještě změním několik příkazů a jim přiřazených klávesových zkratek:

místo původního použitého terminálu st nastavím lilyterm

static const char *termcmd[]  = { "lilyterm", NULL };

spuštění Dmenu nastavím na Win+Alt+P

{ MOD|ALT,               XK_p,      spawn,          {.v = dmenucmd } },

spuštění terminálu nastavím na Win+Alt+Enter

{ MOD|ALT,               XK_Return, spawn,          {.v = termcmd } },

zavření aktivního okna nastavím na Win+Ctrl+X

{ MOD|CTRL,              XK_x,      killclient,     {0} },

ukončení Dwm nastavím na Win+Ctrl+Q

{ MOD|CTRL,              XK_q,      quit,           {0} },

Nyní už je možné se vrátit k práci s tagy. Definici kláves (F1 – F3) jsem uvedl výše v textu, takže zbývá pouze nová verze definice akcí, které jsou k tagům přímo vázané:

#define TAGKEYS(KEY,TAG) \
    { MOD,            KEY,      view,           {.ui = 1 &lt;&lt; TAG} }, \        /*1*/
    { MOD|CTRL,       KEY,      toggleview,     {.ui = 1 &lt;&lt; TAG} }, \        /*2*/
    { MOD|SHIFT,      KEY,      tag,            {.ui = 1 &lt;&lt; TAG} }, \        /*3*/
    { MOD|CTRL|SHIFT, KEY,      toggletag,      {.ui = 1 &lt;&lt; TAG} },            /*4*/

Ke každému řádku/příkazu bude vhodné uvést jeho funkci:

  • Win+F1/F2/F3 – přesun na vybraný tag (1/2/3)
  • Win+Ctrl+F1/F2/F3 – pokud se použije jako poslední tlačítko vybraného tagu, který obsahuje alespoň jedno otevřené okno, všechna tato okna se zobrazí (nejedná se o jejich přesun!) v aktuálním tagu. Pokud se okno zavře na libovolném tagu, automaticky se zavře na všech, kde je otevřené
  • Win+Shift+F1/F2/F3 – přesune aktivní okno na vybraný tag. Kurzor zůstává na původním tagu
  • WinCtrl+Shift+F1/F2/F3 – otevře aktivní okno (opět se nejedná o přesun, ale jakousi „kopii“) na vybraném tagu. Pokud se okno zavře na libovolném tagu, automaticky se zavře na všech, kde je otevřené

Zde je asi trochu vidět potvrzení, uvedené výše v textu: tagy nejsou přesně to samé, co pracovní plochy a proto je možné s nimi dělat různé roztodivnosti… Než pokročím dále v manipulaci s okny, bylo by asi vhodné se zmínit o systému, který Dwm pro správu oken používá (tzv. Window model). Na obrazovce/monitoru jsou vlastně tři oblasti: panel (tím se zatím nebudu zabývat), hlavní a stohovací oblast (master+stack). Už to bylo zmíněno v předchozích dílech, takže je toto uspořádání celkem běžné. Hlavní oblast je standardně vlevo, stohovací napravo. Nové okno aplikace se vždy otevře v hlavní oblasti a to, které zde bylo předtím se přesune to stohovací oblasti. To by asi na vysvětlenou stačilo a mohu se vrátit ke změněné konfiguraci:

{ MOD,                   XK_Right,  focusstack,     {.i = +1 } },
{ MOD,                   XK_Left,   focusstack,     {.i = -1 } },
{ MOD,                   XK_Up,     incnmaster,     {.i = +1 } },
{ MOD,                   XK_Down,   incnmaster,     {.i = -1 } },
{ MOD,                   XK_Prior,  setmfact,       {.f = -0.05} },
{ MOD,                   XK_Next,   setmfact,       {.f = +0.05} },
{ MOD,                   XK_Return, zoom,           {0} },
{ MOD,                   XK_Tab,    view,           {0} },

Klávesové zkraty mají následující funkce:

  • WIN+šipka vpravo – přesune kurzor na následující otevřené okno
  • Win+šipka vlevo – přesune kurzor na předchozí otevřené okno
  • Win+šipka nahoru – změní rozložení oken z vertikálního na horizontální
  • Win+šipka dolů – vrátí zpět rozložení oken na vertikální
  • Win+PageDown – zvětší hlavní oblast na úkor té stohovací
  • Win+PageUp – zvětší stohovací oblast na úkor té hlavní
  • Win+Enter – přesune aktivní okno ve stohovací oblasti do oblasti hlavní
  • Win+Tab – přesune kurzor na předchozí aktivní tag, prohazuje tak vlastně dva poslední aktivní tagy

To už by pro dnešní díl stačilo a více si toho o možnostech manipulace s tagy a okny aplikací nechám na díl příští.

Dnešní díl jsem věnoval popisu získání a překladu zdrojových souborů Dwm. Kromě toho jsem ukázal principy změn v konfiguračním souboru včetně nastavení tagů a klávesových zkratek. Na základě toho bylo možné provést ukázku způsobu spouštění aplikací pomocí klávesových zkratek, ovládání tagů a manipulace s otevřenými okny aplikací. V příštím dílu se zaměřím na dokončení konfigurace správy tagů a oken. Dále proberu konfiguraci stylů rozložení oken a jejich ovládání. Na závěr pak dokončím konfiguraci spouštění základní sady uživatelských aplikací a nastavení parametrů spouštěných aplikací. Zmíněny budou i možnosti ovládání prostředí pomocí myších tlačítek.

Našli jste v článku chybu?

6. 10. 2016 9:19

V Manjaro je taky balíček pro DWM, ale chtěl jsem ukázat kompletní instalaci ze zdrojů na webu. Taky kvůli tomu, že v dalších dílech budou ukázky konfigurace pomocí hlavičkového souboru

6. 10. 2016 9:06

ikar (neregistrovaný)

Místo Altu používám L-Win a nemusím řešit jak obejít interferující kombinace Ctrl_Alt-cosi

BTW - článek mi připadá nějak strašně složitý, hlavně ta instalace, ale možná to bude tím, že v balíčcích Fedory je tohle už nějak implementováno (balíček dwm a balíček dwm-user).

Pro informaci - dwm používám na PC v zaměstnání od doby, kdy Fedora zavedla Gnome's Hell a už bych neměnil za nic jiného. Na začátku mi skript nastaví pozadí plochy, screensaver, dunst, easystroke, kalendář a indikátor CPU do l…

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí