Hlavní navigace

Suckless: dynamický správce oken dwm

Martin Kopta 30. 12. 2013

Součástí projektu Suckless, který vyvíjí méně smradlavý software, je i Dwm. Jde o minimalistický dlaždicový správce oken (tiling window manager), který se konfiguruje změnou zdrojového kódu a jeho počet řádků kódu je shora omezen na 2000. Jde o vlajkovou loď Suckless komunity a považuje se za dokončený.

Předchůdci dwm: wmi a wmii

Správce oken dwm pochází ze Suckless dílny a předcházeli mu dva projekty. Prvním byl správce oken wmi. Hlavním autorem wmi, stejně jako wmii i dwm je Anselm R. Garbe. Poslední vydání wmi bylo v roce 2004 a od té doby bylo plně nahrazeno projektem wmii a později pak projektem dwm. Wmii bylo vyvíjeno mezi lety 2005 a 2012 a nyní se považuje za mrtvý projekt. Wmii se vyznačovalo použitím myšlenek ze systému Plan 9, například použitím souborového systému pro interakci s uživatelem. Nakonec se ale ukázalo, že vyvíjet software s myšlenkami Plan 9 na GNU/Linux systémech není vhodné a kód se příliš zkomplikoval. Garbe se tedy rozhodl to zkusit ještě jednou, tentokrát ještě jednodušeji než předtím.

Správce oken dwm

Správce oken dwm je velmi minimalistický. O tom svědčí například to, že nepoužívá žádný konfigurační soubor s nějakou syntaxí, ale konfiguruje se úpravou hlavičkového souboru. Dalším rysem ukazující na minimalismus je rozhodnutí vývojářů nikdy nepřekročit 2000 logických řádků kódu. Také seznam schopností (features) dwm je omezený a není zájem jej rozšiřovat. Veškeré další úpravy dwm se umisťují na Suckless wiki, kde jsou dostupné ve formě záplat (patchů).

Dwm je dlaždicový správce oken (tiling window manager), což znamená, že okna vždy vyplňují celou obrazovku a uživatel nerozhoduje, jak velká okna budou a kde budou umístěna. Dwm má ale celkem tři módy, ve kterých může operovat. Prvním z nich je právě zmíněný dlaždicový. Další je pak takzvaný monocle, kde je zobrazeno jen jedno okno, které zabírá celou obrazovku (podobné Gnome 3). Poslední mód je plovoucí, ve kterém se dwm nechává rozmístění a velikost oken na uživateli.

Uživateli jsou také k dispozici tagy, které trochu připomínají virtuální plochy, ale fungují jinak. Každé okno náleží k nějakému tagu a uživatel má možnost říct pomocí klávesových zkratek nebo myší, které tagy mají být vidět (a tedy nepřímo která okna mají být vidět). Běžně se zobrazuje jen jeden tag a uživatel přepíná na jiné, což trochu připomíná ony virtuální plochy, ale jde skutečně pouze o jakousi mapu viditelnosti oken. Rozložení oken nebo mód zobrazení se mezi jednotlivými tagy z těchto důvodů neuchovává.

Dwm má podporu více monitorů. Pokud si nakonfigurujete svůj okenní systém pomocí xrandr, vytvoří dwm automaticky na každém monitoru svou novou instanci. Mezi těmito instancemi lze pak přecházet (myší a klávesovými zkratkami) a přehazovat mezi nimi okna.

Dwm je vhodné použít ve spojení s dynamickým menu dmenu a případně s emulátorem terminálu st (oboje opět Suckless software). Další drobné schopnosti dwm se lze dočíst v manuálové stránce dwm a pozorným čtení konfiguračního souboru  config.h.

Stažení, kompilace a instalace

Zdrojové kódy dwm lze stáhnout na webových stránkách dwm. Poslední a finální verzí dwm je verze 6.0. Dwm je také možné stáhnout přímo z git repositáře (doporučovaná možnost).

$ git clone http://git.suckless.org/dwm 

Některé distribuce nabízejí dwm i jako balíček, ale kvůli konfiguraci kompilací je takováto distribuce vhodná spíše pouze jako ukázka správce ve výchozím nastavení. Některé distribuce ale umožňují takovýto balíček ještě rekompilovat s vlastními nastavením.

Konfigurace dwm se provádí editací souboru config.h. Ten pokud neexistuje, je vytvořen kopií souboru config.def.h. Konfigurace změnou hlavičkového souboru je překvapivě jednoduchá a každý, kdo umí alespoň trochu s jazykem C, nebude mít žádné problémy. Konfigurační soubor je okomentovaný a má přibližně 100 řádek. Uživatel si může nastavit font hlavní lišty, barevné schéma, velikosti okrajů oken, zobrazení hlavní lišty, štítky (tagy), permanentní pravidla pro umisťování programů, parametry rozložení a klávesové zkratky (klávesnice i myši). Pro začátek stačí určitě použít výchozí konfiguraci a znát pouze zkratku pro otevření terminálu: alt + shift + enter. Kompilace se spouští klasicky pomocí make (žádné ./configure).

$ time make
dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.1" -DXINERAMA
LDFLAGS  = -s -L/usr/X11R6/lib -lX11 -lXinerama
CC       = cc
CC drw.c
CC dwm.c
CC util.c
CC -o dwm
real    0m0.983s
user    0m0.917s
sys     0m0.037s
$ du dwm
40      dwm
$ ldd dwm
        linux-vdso.so.1 (0x00007fff37f9f000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fd9a41da000)
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00007fd9a3fd7000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007fd9a3c2d000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fd9a3a0e000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fd9a380a000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x00007fd9a35f8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd9a4515000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fd9a33f4000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fd9a31ee000)
$ 

Po kompilaci lze dwm nainstalovat pomocí make install (doporučuji se podívat na obsah souboru Makefile), případně jej prostě spouštět z jeho aktuálního umístění (například $HOME/dwm/dwm). Pro spuštění pak stačí dodat do souboru $HOME/.xinitrc řádek exec $HOME/dwm/dwm (nebo exec dwm) a spustit okenní systém pomocí příkazu  xinit.

Příklad $HOME/.xinitrc:

#!/bin/sh
xsetroot -solid black
xsetroot -name $(hostname)
xterm &
exec dwm 

Několik tipů

Po každé změně konfigurace je nutno dwm rekompilovat a restartovat. To je poněkud nudné především ze začátku, když si člověk dwm konfiguruje poprvé. Je ale možno použít trik se smyčkou v  .xinitrc.

while true; do
      dwm
      [ -e /tmp/dwm-exit ] && exit 0
done 

Dwm se pak vypíná klávesovou zkratkou alt + shift + q.

Dwm status se dá využít pro tisk zajímavých informací jako například data či baterie notebooku. Jednoduchý příklad použití (z  .xinitrc):

while true
do
        datetime=$(date +%Y-%m-%d\ %H:%M)
        battery=$(acpi -b | awk -F, '/Discharging/{print $2}')
        layout=$(setxkbmap -query | awk '/layout/{print $2}')
        mail=$(find .mail/*/Inbox/new -type f | wc -l)
        name="${layout} | ${datetime}"
        [ -n "${battery}" ] && name="${battery} | ${name}"
        [ "${mail}" != 0 ] && name="New mail: ${mail} | ${name}"
        xsetroot -name "${name}"
        sleep 2
done & 

Výchozí klávesu pro zkratky alt lze v config.h  jednoduše přemapovat na windows klávesu.

#define MODKEY Mod4Mask 

Budoucnost dwm

Dwm se považuje za hotový, dokončený projekt. Jeho budoucnost je tedy velmi nezajímavá. Nicméně, s příchodem náhrad za stávající okenní systém X.org je tendence dwm přeportovat. Již nyní existuje experimentální fork dwm pro Wayland zvaný adwm.

Příště

V dalším pokračování seriálu o Suckless software se podíváme na velmi kontroverzní neexistující operační systém Stali a myšlenky s ním spojené.

Našli jste v článku chybu?

30. 12. 2013 9:31

Jestli to chce někdo používat, nemám s tím problém a fandím mu. Ale já osobně bych hlavní smysl tohoto a dalších podobných projektů viděl ve vzdělávání a především sebevzdělávání. Už jenom to, že takový projekt šel napsat a lze vůbec nějak používat mi přijde velmi poučné, a to jsem ani nemusel otevřít kód. Pokud bych se chtěl někde učit, jak se takové věci píšou, tak dwm bude první na ráně. Mohl bych si v něm dělat drobné úpravy a ověřovat si tím funkce jednotlivých částí a přitom si pořád držet…

30. 12. 2013 9:33

A ještě jednu zásadní výhodu vidím. Pokud člověk ztratí naději opravit pro něj nejzásadnější chyby a nedostatky jeho oblíbeného software, může si vždycky ulevit tím, že alespoň na pár věcí použije něco hodně jednoduchého.

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

Přehledná titulka, průvodci, responzivita

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

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

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

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

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

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

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

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

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

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

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

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

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

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

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

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

Recenze Westworld: zavraždit a...

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

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

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

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?