Fvwm - konfigurace

Úvod

Jak už jsem uvedl v předcházejícím díle seriálu, je systémová konfigurace uložená v souboru /etc/X11/fvmw/system.fvwmrc. Tento konfigurační soubor je platný pro celý systém, pokud ovšem nemá uživatel vytvořenou vlastní konfiguraci v souboru .fvwm2rc ve svém domácím adresáři.

Aby se vám lépe experimentovalo, stáhněte si ukázkový konfigurační soubor vytvořený speciálně pro tento článek a uložte jej ve svém domácím adresáři (doufám, že jsem v něm nenasekal příliš mnoho chyb).

Správce oken fvwm je velmi dobře dokumentován ve své manuálové stránce:

man fvwm2

Vlastní manuálovou stránku má i každý modul fvwm.

Struktura konfiguračního souboru

Konfigurační soubor nemá žádnou pevně danou strukturu, nelze jej v žádném případě přirovnat například k xml souborům nebo ke konfiguračnímu souboru samby. Fvwm používá pro svou konfiguraci spíš jednoduchý programovací jazyk. Přesto lze vysledovat v konfiguraci několik logických částí.

Menu

Většina menu se vytváří příkazem AddToMenu. Vyjímku mohou tvořit dynamická menu, ale ta jsou námětem na jeden dlouhý celovečerní díl tohoto krátkého seriálu. Prvním povinným parametrem příkazu je název příslušného menu. Potom následuje textový nápis a nakonec požadovaná akce. Pokračovat v příkazu lze na dalším řádku, ten musí začínat znakem +.

AddToMenu HlavniMenu 
+ "**** Hlavní menu ****" Title
+ ""                      Nop
+ " X terminál"           Xterm
+ " Mozilla"              Exec /usr/bin/mozilla
+ " Programy"             Popup Programy
+ " Okolní počítače"      Popup Pocitace
+ " Konec práce"          Popup Quit-Verify

Ve výše uvedeném příkladu je pro tvorbu menu vystřílený praktický celý využitelný arsenál možných akčních příkazů. Title a Nop pravděpodobně nepotřebují bližší vysvětlení. Exec je využitý pro přímé spuštění programu a Popup pro vyvolání dalšího podmenu. Trochu nejasná může být akce Xterm - jde o volání funkce. Narozdíl od Mozilly Xterm spouštím velmi často a navíc různými způsoby podle okamžité nálady a počtu volných rukou. Pro jeho vyvolání mám proto v konfiguračním souboru definované i další zkratky - doubleclick (MS patented) na volné ploše nebo stištění klávesy "rozevláté wokno". Abych nemusel v konfiguračním souboru vypisovat pokaždé startování xtermu se všemi jeho početnými parametry, mám volání xtermu definované ve funkci na jediném místě.

Funkce

Funkce se vytvářejí příkazem AddToFunc. Syntaxe při tvorbě funkcí je podobná jako při tvorbě menu. Prvním parametrem je jméno funkce a dále následují jednotlivé akce, tak jak je má hezky za sebou funkce provádět. U každé akce se navíc dá stanovit, za jakých podmínek se akce provádí.

AddToFunc Xterm I Exec xterm +xb -ls -bg "#c0c0a0" \
  -fn '-misc-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-2' \
  -T db1 -e ssh db1 

AddToFunc Xterm-or-Root-menu
+ D Xterm
+ C Menu HlavniMenu Nop

V příkladu jsou definované dvě funkce. Vysvětlení si zaslouží trochu záhadné písmenko, které se vyskytuje před samotnou definicí požadované akce. Jde o jednoduchý podmíněný příkaz, který říká, za jakých podmínek se má akce spustit. Písmenem I (Immediate) jsou označené akce, které se mají provést okamžitě. Písmenem C (Click) nebo D (Doubleclick) se označují akce, které se provádějí při kliknutí myší a nakonec písmenem H (Hold) se označují akce, které se mají provádět, drží-li uživatel tlačítko myši stištěné.

Některé funkce mají speciální význam. Jsou to hlavně funkce StartFunction, InitFunction a RestartFunction. Ty se provádějí okamžitě po nastartování nebo restartování okenního manažeru.

Myšové zkratky

Provádění změn v myších zkratkách musím často konzultovat s manuálovou stránkou, a to i přesto, že jsem si přímo do konfiguračního souboru popsal jednotlivé parametry. Pro definování myších zkratek slouží příkaz Mouse:

# Myš na ploše
Mouse 1  R  N  Xterm-or-root-menu
Mouse 2  R  N  Xterm-or-Window-Ops
Mouse 3  R  N  Xterm-or-Windows-List
Mouse 1  R  C  Xscreensaver

V příkladu je definováno chování myši při poklikání na volnou plochu obrazovky. V dřívější ukázce jsme si definovali funkci Xterm-or-root-menu. V této funkci se volá buď hlavní menu nebo xterm podle toho, jestli bylo myší kliknuto na plochu jednou nebo dvakrát. Ostatní funkce mají podobný význam.

Příkaz Mouse má čtyři parametry. Prvním je číslo tlačítka myši. Tlačítko levé má obvykle číslo 1, tlačítko prostřední má číslo 2 a tlačítko pravé má číslo 3. Pokud na tlačítku nezáleží a akce se má vyvolat při použití libovolného tlačítka, použije se v konfiguračním souboru číslo 0.

Dalším parametrem je kontext, ve kterém bylo tlačítko stištěno. V příkladu je kontext R - root window - pracovní plocha. Dalšími možnostmi jsou T - titulek okna, I - ikona, W - aplikační okno, S - rámeček okna, F - rohy rámečku okna. Číslice 0 až 9 označují jednotlivá tlačítka umístěná v horní liště okna (počet a vzhled tlačítek lze nastavit). Písmena lze sdružovat dohromady, následující příklad umožňuje měnit velikost oken jak pomocí rožků tak i rámečku okna:

Mouse 1 FS A Resize-or-Raise

Dalším parametrem je modifikátor (Ctrl, Alt, Shift a podobně). N - žádný (no) modifikátor, C - control, M - meta (na klávesnici PS se ukrývá pod klávesou Alt), L - caps lock a nakonec A - jakýkoliv modifikátor. X11 znají další modifikátory mod1 až mod5. Ty zná fvwm jako modifikátory 1 až 5. Modifikátory se mohou sdružovat dohromady a tak lze přiřadit akci například kombinaci Ctrl-Alt-Click pro uzamčení obrazovky (v přiloženém konfiguračním souboru je použita jednodušší kombinace bez Alt):

Mouse 1 R CM Xscreensaver

V přiloženém ukázkovém konfiguračním souboru je na různé kombinace kláves CTRL a doubleclicků pověšeno volání různých xtermů s přístupy na různé počítače. Abych měl při práci ihned jasno, jsou xtermy na různých počítačích odlišené svou barvou.

Klávesové zkratky

Klávesové zkratky jsou tvořené prakticky úplně stejně jako zkratky myší. V prostředí X11 je u klávesových zkratek někdy trochu složitější najít jméno pro příšlušnou klávesu. Nepojmenovaná bývá třeba klávesa "rozevláté wokno". Pojmenovat neznámé klávesy je možné pomocí příkazu xmodmap a xev. Ty ovšem nejsou součástí fvwm. Příkazem xev zjistíme scan kód příslušné klávesy a pomocí příkazu xmodmap pak přiřadíme klávese jméno. Jak na to si můžete přečíst v krásném článku Multimediální a jinak vylepšené klávesnice, případně v článku Upravte si klávesnici na Rootu.

Styly

Další možnosti, jak upravit chování a vzhled různých oken, nabízejí styly. Jejich pomocí se dá nastavit třeba vzhled horní lišty, počet knoflíků na liště, použité písmo, ikony, barvy a podobně. Každou aplikaci je možné nastavit zvlášť.

Příkaz Style má celkem jednoduchou syntax. Za příkazem je jméno (nadpis) okna, kterého se vlastnosti týkají, následované seznamem vlastností, které se mají pro okno nastavit. Seznam je oddělený čárkami. Ve jméně okna se dá použít hvězdičková konvence, pokud je v názvu okna mezera, je nutné uzavřít jméno do uvozovky.

MenuStyle  * fvwm, Font -adobe-helvetica-medium-r-*-*-16-*-*-*-*-*-iso8859-2
Style * Font -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-2
Style * IconFont fixed
Style * IconBox 640x480+1034+10
Style * BorderWidth 7, HandleWidth 7
Style * ClickToFocus

# Styly pro xv:
Style "*unregiste*"  NoTitle, NoHandles, BorderWidth 0
Style "*unregiste*"  Iconbox -40 10 -0 500
Style "*schnauzer*"  Iconbox -40 10 -0 500
Style "*schnauzer*"  ClickToFocus, ClickToFocusRaisesOff

I když jsem se snažil vybrat jen některé věci, je ukázka stylů poměrně veliká. Hned na prvních třech řádcích se definují fonty - ty lze nastavit pro každou část zvlášt (titulek, ikona, menu...). Na dalších řádcích se říká, kde se mají na obrazovce skladovat ikony, jak mají být široké okraje a jak se mají okna chovat při kliknutí na plochu okna.

Chování se dá pro některé aplikace dále upravit. Obrázky si prohlížím archaickým programem xv. Kolem obrázku žádné okraje nechci, nastavuji tedy NoTittle, NoHandles, BorderWidth 0. Chci, aby se ikonky programu xv skladovaly na jiném místě obrazovky - pro xv vytvářím vlastní IconBox.

Při prohlížení obrázků mám samotný obrázek (bez okrajů a titulků) na popředí. Okno se seznamem obrázků (visual schnauzer) mám utopené pod obrázkem a chci, aby utopené zůstalo, i když na ně kliknu. Volby ClickToFocus, ClickToFocusRaisesOff umožňují, aby jedno konkrétní okno zůstalo stále vespod, i když je aktivní (celé chování je ve skutečnosti trochu složitější - okno lze vytáhnout do popředí kliknutím na rámeček nebo titulek). Zbývající okna tímto nastavením nejsou ovlivněná a chovají se normálně - při kliknutí se dostanou nahoru nad ostatní okna.

Ostatní nastavení

Sem jsem zahrnul vše ostatní, co v rozmezí tohoto článku nezapadlo jinam. Fvwm má bezpočet různých konfiguračních příkazů, ze kterých uvedu alespoň tři:

ClickTime 200
DoubleClickTime 150
OpaqueMoveSize  unlimited

Příkaz ClickTime říká fvwm, jak dlouhé stištění tlačíka myši (v milisekundách) má ještě považovat za kliknutí a co už považovat za držení stištěného tlačítka. Stejně tak příkaz DoubleClickTime dává fvwm vědět, co má být považováno za doubleclick a co za dva nezávislé kliky po sobě. Konečně příkaz OpaqueMoveSize unlimited říká, že po obrazovce se mají vždy přesouvat okna i s celým svým obsahem. V dnešní době superrychlých akcelerovaných videokaret nemá smysl nastavovat něco jiného. V době, kdy jsem ještě honil okýnka na tři osm šestce s videokartou Cirrus Logic 5434 (tehdy úžasné dělo), mělo význam nastavit hodnotu například na 25 - u všech oken, větších než 25 % obrazovky se přesouval pouze rámeček okna, obsah následoval jako poslední až po uvolnění tlačítka myši.

Ladění konfigurace - restart fvwm

Pro snazší ladění je vhodné někam do menu vložit volání funkce Restart. Ta má jeden parametr - jméno okenního manažeru, který se má místo fvwm nastartovat. Tak můžeme místo fvwm nastartovat úplně jiné prostředí, aniž by bylo třeba se odhlásit. Nejčastěji ovšem startuju opět fvwm2 - při změně konfiguračních souborů tak dojde k implementaci všech provedných změn v konfiguraci, aniž by se ukončily běžící aplikace.

Závěr

O konfiguraci fvwm jsem nenapsal ani zdaleka vše. V krátkém článku nelze zacházet do přílišných detailů. Vůbec jsem nezmínil například efektnější nastavení stylů (obrázky, barevné přechody), virtuální obrazovky, moduly a určitě mnoho dalšího. O tom napíšu snad zase někdy příště.