JWM (Joe's Window Manager) je lehký okenní manažer pro systémy X Window napsaný v jazyce C. Hlavním vývojářem je Joe Wingbermuehle a vývoj WM stále probíhá (poslední verze je ze září roku 2011). Má minimum závislostí, kdy nutná je pouze knihovna Xlib a ostatní knihovny jsou volitelné.
Vzhledem ke své velikosti (či spíš malosti) a minimální spotřebě systémových prostředků se s oblibou používá v malých linuxových distribucích jako je např. Puppy Linux nebo Damn Small Linux.
V článku budu dále porovnávat JWM a další známý lehký okenní manažer – PekWM. Testoval jsem na virtuálním stroji v Debianu Stable. Instalace byla provedena s výchozími hodnotami a bez grafického prostředí. Po instalaci byla provedena aktualizace repozitářů a instalován xorg server včetně základní konfigurace. Pro samotné testování pak byly instalovány balíčky mc, sakura, lxtask a oba WM. Žádné balíčky se neodstraňují, DM instalován nebyl.
Jak JWM vypadá
Základní vzhled obou WM v uvedeném pořadí je vidět na obrázcích 1 a 2. U JWM je vidět několik výchozích ovládacích prvků, u PekWM pak vlastně vůbec nic (pro ověření funkčnosti je možné pravým klikem myši vyvolat hlavní menu).
Ovládání JWM je soustředěno na panelu ve spodní části. Úplně vlevo je tlačítko s titulkem JWM, což je vlastně hlavní menu (dá se vyvolat také libovolným tlačítkem myši kdekoliv na ploše) – viz obrázek č. 3.
Menu je rozdělené na dvě části. V té horní jsou umístěné aplikace a ve spodní pak příkazy pro manipulaci s vlastním WM. Ty jsou standardně tři:
- Restart – provede restart WM
- Exit – provede návrat do DM nebo v aktuálním případě do konzole
- Shutdown – odkazuje na soubor /usr/lib/jwm/jwm-power-off.sh
Aplikací je v menu poměrně velké množství, ale ne všechny musejí být nutně instalované. Přehled je vidět na obrázku číslo 4.
Další tlačítko na panelu zajišťuje skrytí/obnovení otevřených oken a pak následuje pager se čtyřmi virtuálními plochami a možností jejich přepínání pomocí myši.
Dál je na panelu prostor pro ikonifikované spuštěné programy (TaskList). Jak ukazuje obrázek číslo 5, je možné s nimi přímo v panelu provádět základní operace – odeslat okno na zvolenou plochu, obnovit ho, zavřít okno nebo ukončit (kill) aplikaci.
Ikonifikaci/obnovení okna je možné provádět také pomocí levého kliku. Pokud je okno na ploše, je možné s ním provádět ještě další operace – viz obrázek číslo 6.
Pak následuje grafický plugin s průměrným zatížením systému (xload) a jako poslední jsou digitální hodiny. Levým nebo pravým klikem je možné na ploše zobrazit analogové hodiny xclock – viz obrázek číslo 7.
Konfigurace JWM
Nyní je možné přistoupit ke způsobům a možnostem konfigurace WM. Pro tyto účely slouží pouze jeden jediný konfigurační XML soubor: ~/.jwmrc. Výchozím konfiguračním souborem je /etc/jwm/jwmrc .
Oba tyto soubory jsou mírně přizpůsobené zvolené distribuci. Obecný příklad se pak nachází v souboru /usr/share/doc/jwm/examples/example.jwmrc.gz . V příloze uvádím distribuční soubor jwmrc.debian. Poměrně podrobný popis úprav a možností konfigurace je uveden přímo na stránkách projektu nebo třeba i na Wiki Arch Linuxu.
Postupovat se bude podle toho, jak po sobě následují jednotlivé sekce v konfiguračním souboru. Jak jsem již uvedl, veškerá konfigurace je soustředěna v jednom XML souboru. Asi by se daly vést dalekosáhlé diskuse, jestli je lepší formát XML nebo běžný text. Je otázka, jestli existuje nějaká relevantní a univerzální odpověď. K subjektivnímu zhodnocení se vrátím na konci článku.
První sekcí konfiguračního souboru je menu. V celém souboru zabírá většinou obsahu, ale jeho struktura je poměrně obecně daná a umožní vytvářet hlavní menu i submenu. Menu se skládá ze tří základních položek RootMenu, Menu a Program.
Každé hlavní menu musí obsahovat jednu nebo více položek RootMenu. Velmi důležitou vlastností RootMenu je onroot. Ta může nabývat celočíselných hodnot 0–9 a označuje způsob (tlačítko myši, panelový spouštěč aplikace nebo klávesová zkratka), pomocí kterého je možné dané RootMenu vyvolat. Výchozí hodnota je 123, což znamená, že je možné menu vyvolat klikem na levé nebo prostřední nebo pravé tlačítko myši. Hodnoty 4 a 5 představují pohyb kolečka myši. Ostatní zbylé hodnoty jsou určeny pro spouštění menu ze spouštěče v panelu nebo pomocí klávesových zkratek. Zde jsou výchozí příklady:
<TrayButton label="JWM">root:1</TrayButton> <Key mask="A" key="F1">root:1</Key>
V aktuálním případě je RootMenu použito pouze jedno, ale z výše uvedeného popisu vyplývá, že je možné s jeho pomocí vytvořit velmi složitý a uživatelsky vyladěný systém.
Další úrovně menu a submenu se tvoří pomocí vlastností XML souborů – odsazováním jednotlivých položek. Nejlépe viz příklad:
<Menu label="Debian"> <Menu label="Aplikace"> <Menu label="Editory">
Konkrétní položky v menu se pak spouštějí pomocí příkazů v položkách Program. Samotný příkaz může být velmi jednoduchý, ale také velice komplexní, jak ukazuje příklad:
<Program label="w3m" confirm="false">x-terminal-emulator -T "w3m" -e sh -c "/usr/bin/w3m /usr/share/doc/w3m/MANUAL.html"</Program>
Další možností nastavení Menu je vlastnost labeled. Ta je standardně nastavena na FALSE. Pokud se u některé položky Menu nebo RootMenu nastaví na TRUE, tak se v příslušném menu či submenu objeví štítek s názvem nadřazeného menu. Viz příklad v konfiguraci a výsledek na obrázku č. 8:
<Menu label="Debian" labeled=“true“> <Menu label="Aplikace"> <Menu label="Editory">
Štítek u hlavního RootMenu je standardně JWM. Pro oddělení položek menu je na libovolném místě možné použít vlastnost Separator.
Po RootMenu následuje v konfiguračním souboru sekce Groups. Tato sekce umožní pro skupiny programů podle jména a/nebo třídy nastavit společné vlastnosti. Je to něco, s čím jsem se ještě nesetkal, a tak možná úplně nechápu přínos takové funkce. Proto uvedu pouze jeden konkrétní příklad. Ten vychází z příkladu na ArchWiki, je jenom trochu upravený:
<Group> <Name>lxtask</Name> <Option>maximized</Option> <Option>desktop:2</Option> </Group>
Tento příkaz zařídí spuštění aplikace LXTASK na druhé virtuální ploše v maximalizované podobě. Je úplně lhostejné, jestli se spuštění provede z menu nebo příkazem v terminálu.
Další sekcí je nastavení panelů, které se zde nazývají Tray. Panelů je možné vytvořit více a nastavit jejich geometrii pomocí vlastností, jako jsou souřadnice x a y, width a height, layout (horizontal nebo vertical), halign a valign. U panelů je také možné nastavit automatické skrývání pomocí vlastnosti autohide=“true“ .
Do jednotlivých panelů je možné zařadit několik druhů ovládacích a zobrazovacích prvků, které se zde nazývají tagy.
Proberu je postupně od levého okraje panelu. Prvním typem tagu je TrayButton. Jedná se vlastně o spouštěč programů a aplikací. Standardně jsou nastavené dva – spuštění hlavního menu a ikonifikace/obnovení všech otevřených oken na ploše:
<TrayButton label="JWM">root:1</TrayButton> <TrayButton label="_">showdesktop</TrayButton>
Na panel lze jednoduše přidávat další spouštěče aplikací, viz příklad:
<TrayButton label="Home">exec:pcmanfm</TrayButton>
Spouštěče lze pojmenovat pomocí funkce label a přiřadit jim ikony pomocí funkce icon=“icon.png“.
V navazujícím článku dokončím konfiguraci panelu a provedu porovnání obou WM a závěrečné hodnocení.