Fvwm - virtuální obrazovky

Úvod

V kterémsi z předchozích dílů jsem slíbil, že se ještě vrátím k některým zajímavějším modulům. Dnes slib plním a vy si tak můžete přečíst o virtuálních obrazovkách v prostředí fvwm.

Systém virtuální obrazovky

Fvwm je okenní manažer, na kterém jsem se poprvé setkal s virtuálními obrazovkami. Dnes je myšlenka dostatečně profláknutá, ale přesto vysvětlím, oč jde. Ve fvwm lze definovat velikost virtuální obrazovky například 2x2 - fyzické rozlišení je například 1024×768 a virtuální rozlišení 2048×1536 pixelů. Fyzická obrazovka tak tvoří pouze výřez z mnohem větší virtuální pracovní plochy. Okenní manažer fvwm takovou virtuální pracovní plochu označuje slovem "Desk". Virtuální pracovní plochu v tomto případě tvoří čtyři stránky - v terminologii fvwm "Page". Fvwm zná ještě další výraz "Screen" - tím označuje skutečnou, fyzickou obrazovku. Fvwm umí pracovat i s více fyzickými obrazovkami současně - v počítači musí být v takovém případě dvě video karty a připojené dva monitory (nebo více) a celý systém X11 musí být nastavený tak, aby dokázal obě videokarty obhospodařovat. Ale o tom se nebudu dále rozepisovat. Zájemci nechť si sami prostudují technologii označovanou jako Xinerama. Já jsem vícenásobné připojení fyzických obrazovek vzdal kvůli nemožnosti zprovoznit OpenGL akceleraci.

Chování manažeru fvwm lze nastavit různým způsobem. Sám mám nastavený rozměr virtuální pracovní plochy na 2×2. Jednotlivé stránky mé pracovní plochy jsou relativně nezávislé, ale fvwm lze nastavit tak, aby se fyzická obrazovka chovala jako skutečný průhled na větší pracovní plochu. Chování se řídí třemi příkazy: DeskTopSize, EdgeResistance a EdgeScroll:

DesktopSize 2x2
EdgeResistance 100 0
EdgeScroll 10 10

Parametry příkazu DesktopSize jsou, předpokládám, jasné - definují rozměry virtuální pracovní plochy v horizontálním a vertikálním směru. Protože fyzická obrazovka je pouze průhledem na skutečnou pracovní plochu, lze dalšími dvěma příkazy definovat, jakým způsobem se má systém virtální plochy chovat, když se kurzorem myši dostaneme na okraj.

Příkazem EdgeResistance definujeme citlivost okraje. První parametr okennímu manažeru sděluje, jak dlouho se musí kurzor myši zdržovat na okraji obrazovky (v milisekundách), než se začne posouvat celý průhled na virtuální pracovní ploše za kurzorem myši. Nastavením hodnoty na 10000 se přesun průhledu či přepínání jednotlivých stránek virtuální pracovní plochy pomocí myši zakáže úplně. Na další stránky pracovní plochy se lze nicméně i pak dostat jinými prostředky, například pomocí modulu FvwmPager nebo pomocí nějaké vytvořené klávesové zkratky.

Druhý parametr příkazu EdgeResistance definuje chování oken na okrajích stránky - říká, o kolik se musí okno při přesunech posunout za okraj fyzické obrazovky, aby je bylo možné přesunout na jinou stránku virtuální pracovní plochy. Dostatečně vysokým číslem lze přesun oken mezi jednotlivými stránkami virtuální pracovní plochy znemožnit úplně.

Příkazem EdgeScroll definujeme, o kolik procent se má posunout průhled na virtuální pracovní ploše při najetí kurzoru myši na okraj. Nastavit se dá zvlášť hodnota pro horizontální i vertikální směr. Při nastavení hodnot 0 0 se nebude průhled na plochu pohybovat vůbec, při nastavení hodnot 100 100 se při najetí kurzorem myši na okraj fyzické obrazovky přepne průhled na celou vedlejší stránku.

Když vyzkoušíte uvedené tři příkazy ve svém nastavení, bude vám rychle jasné, jak celý systém virtuální pracovní plochy funguje.

Modul FvwmPager

Pro symbolické zobrazení celé virtuální plochy slouží modul FvwmPager. Jistě nejjednodušším způsobem startování je jeho uvedení do funkce StartFunction. Vzhledem ke své funkci by měl mít modul FvwmPager nastavené ještě některé vlastnosti. Určitě je pro nás výhodné, zůstává-li okno modulu na jednom místě obrazovky, ať už se fyzický průhled pohybuje po virtuální pracovní ploše kterýmkoliv směrem. Pravděpodobně bude vhodné, aby modul FvwmPager neinteragoval s ostatními okny a byl hezky vespod (nebo nahoře, pak použijte parametr StaysOnTop) a nežádoucí jsou nejspíš i rámečky:

Style "FvwmPager"  Sticky, NeverFocus, StaysOnBottom, \
       NoTitle, NoHandles, BorderWidth 0

AddToFunc StartFunction
 + I Module FvwmPager

Pokud by modul FvwmPager na obrazovce zavazel, může se pověsit například na některou klávesovou či myší zkratku a zůstat na obrazovce jen dočasně, dokud nedokončíme požadovanou operaci s modulem:

Style "FvwmPager"  Sticky, NeverFocus, StaysOnTop, \
       NoTitle, NoHandles, BorderWidth 0

Mouse 3 R C Module FvwmPager -transient

V uvedeném příkladu se modul FvwmPager nastartuje kombinací CTRL + levé tlačítko myši a na obrazovce zůstává pouze do prvního kliknutí v okně modulu.

Modul FvwmPager může být použitý nejen pro přepínání stránek virtuální obrazovky. Levým tlačítkem myši můžeme posouvat fyzický průhled na virtuální plochu bez ohledu na hranice jednotlivých stránek. Prostředním tlačítkem pak lze "okno" v modulu FvwmPager uchopit a přesunout na jinou pracovní plochu nebo stránku.

Další rozšíření pracovní plochy

Jednu virtuální pracovní plochu lze používat i bez modulu FvwmPager, stačí nastavit parametry EdgeScroll a EdgeResistance, případně nastavit klávesové zkratky. Modul FvwmPager umožňuje dále rozšířit počet pracovních ploch. Ty už jsou navzájem nezávislé, nelze se mezi nimi například přepínat myší nebo mezi nimi přesovat okna.

Každá virtuální pracovní plocha (Desk) má své číslo. Pro využití více pracovních ploch je potřeba modulu FvwmPager říci, kolik pracovních ploch má fvwm vytvořit:

AddToFunc StartFunction I Module FvwmPager 0 3

V příkladu výše se říká, že modul FvwmPager má vytvářet pracovní plochy 0 až 3. Je možné, aby byl modul FvwmPager nastartovaný vícekrát, každý modul by pak měl mít vlastní jméno kvůli dalšímu nastavení. V takovém případě může každý modul vytvářet a obsluhovat vlastní sadu virtuálních pracovních ploch:

AddToFunc StartFunction 
 +I Module FvwmPager Franta 0 3
 +I Module FvwmPager Arnost 4 7

Při nastavování vlastností takto pojmenovaných modulů se nebude používat obecné jméno *FvwmPager, ale *Franta a *Arnost.

Nastavení modulu FvwmPager

O konfiguraci modulů jsem psal něco o už ve třetím díle seriálu, takže nyní se už nebudu příliš rozepisovat a přímo předvedu ukázkovou konfiguraci:

*FvwmPager: Geometry -1+50
*FvwmPager: Rows    4
*FvwmPager: Columns 1
*FvwmPager: Label 0 Kladno
*FvwmPager: Label 1 Rožnov
*FvwmPager: Label 2 Ostrava
*FvwmPager: Label 3 Singapur
*FvwmPager: Balloons All
*FvwmPager: Back    #202050
*FvwmPager: Fore    #ffffff
*FvwmPager: Hilight #404080
*FvwmPager: Font \
"-adobe-helvetica-medium-r-normal-*-12-120-75-75-*-*-iso8859-2"
*FvwmPager: BalloonFont \
"-adobe-helvetica-medium-r-normal-*-12-120-75-75-*-*-iso8859-2"

Parametrem Geometry umístíme okno modulu FvwmPager na levý okraj obrazovky, mírně pod horní okraj. Parametry Rows a Columns modulu FvwmPager říkáme, jak má zobrazit své virtuální pracovní plochy. Parametry Label můžeme každou pracovní plochu pojmenovat, pokud se nám nelíbí FvwmPagerovo označení "Desk 0", "Desk 1" a tak dál. Já jsem zvolil pojmenování po významných světových metropolích. Parametr Balloons All způsobí, že při najetí kurzoru myši na miniaturu okna v modulu FvwmPager se zobrazí rámeček-bublinka s názvem okna. No a nakonec jsou definované barvy a použité písmo. Aby se mi vešel text s názvem fontů na stránku abclinuxu, napsal jsem název fontu na pokračovací řádek. Při té příležitosti jsem zjistil, že text s názvem fontu musí začínat hned v prvním sloupci - nelze jej odsadit.

Možnosti nastavení modulu jsou široké. Nastavovat lze barvy, obrázek na pozadí, chování nápisů, chování modulu FvwmPager v ikoně a podobně. Více podrobností lze objevit v manuálové stránce FvwmPager.

FvwmBacker

Užitečným pomocníkem modulu FvwmPager je modul FvwmBacker, který umožňuje měnit pozadí aktuální stránky. Protože je ale FvwmBacker napsaný dosti obecně, umožňuje spustit ve skutečnosti jakýkoliv příkaz. Velmi dobrý se mi jeví nápad, který se objevil v diskusi pod jedním z dřívějších článků seriálu.

*FvwmBacker: Command (Desk 1, Page 0 0) \
 Exec echo "Rožnov 2" | \
  osd_cat -c gold -o 10 -p top -A right -s 2 -d 2 \
  -f "-adobe-helvetica-medium-r-normal-*-34-*-*-*-*-*-*-2" 
*FvwmBacker: Command (Desk 1, Page 0 1) \
 Exec echo "Rožnov 2" | \
  osd_cat -c gold -o 10 -p top -A right -s 2 -d 2 \
  -f "-adobe-helvetica-medium-r-normal-*-34-*-*-*-*-*-*-2" 
*FvwmBacker: Command (Desk 1, Page 1 0) \
 Exec echo "Rožnov 3" | \
  osd_cat -c gold -o 10 -p top -A right -s 2 -d 2 \
  -f "-adobe-helvetica-medium-r-normal-*-34-*-*-*-*-*-*-2" 
....atd.

Při přepnutí obrazovky se vyvolá nějaký obecný příkaz - v tomto případě se příkazem osd_cat na několik vteřin vypíše do pravého horního rohu název pracovní plochy a číslo stránky. Stránka je adresovaná svým číslem pracovní plochy (Desk) a stránky. Nastavení modulu FvwmBacker neuvádím celé, protože rozsah článku by pak byl zbytečně veliký.

Pro vypisování názvu stránky je použitý program osd_cat, který můžete najít na stránce http://www.ignavus.net/.

Tvorba klávesových zkratek

Jednotlivé stránky virtuální pracovní plochy lze přepínat například pomocí klávesnice. Ve své konfiguraci používám kombinace CTRL+šipka:

Key Left   ARI  C  Scroll -100 0
Key Right  ARI  C  Scroll +100 +0
Key Up     ARI  C  Scroll +0 -100
Key Down   ARI  C  Scroll +0 +100

Při stištění kláves CTRL+šipka se vyvolá příkaz Scroll. Jeho parametry udávají, o kolik procent se má posunout fyzický průhled v horizontálním a vertikálním směru. Hodnotou 100 se přepne vždy celá stránka. Podobně lze pro přepínání pracovních ploch použít příkaz GotoDesk nebo GotoDeskAndPage.

Na závěr

Původně jsem předpokládal, že v dnešním díle se pouze letmo zmíním o virtuálních pracovních plochách a zbytek prostoru budu věnovat spíše modulu FvwmButtons. Povídání o modulu FvwmPager se ale rozrozstlo do netušených rozměrů - modul FvwmButtons jsem si proto ponechal jako téma na některé z dalších pokračování seriálu.