[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 97.   X: gestori di finestre

Il gestore di finestre, o window manager (WM), è quel programma cliente, che si occupa di incorniciare le superfici degli altri programmi clienti, di gestire la messa a fuoco, il passaggio da un programma all'altro e di altre funzioni di contorno. Anche se apparentemente non sembra molto, il gestore di finestre è in grado di cambiare la faccia e il funzionamento operativo del sistema X.

Alcuni gestori di finestre consentono di utilizzare una superficie maggiore di quella che si vede sullo schermo. Si parla in questi casi di gestori di finestre con superficie grafica virtuale, ovvero di virtual window manager (VWM). Di solito, per passare da una zona all'altra della superficie grafica virtuale si utilizza la combinazione [Ctrl+freccia...] nella direzione in cui ci si vuole spostare, oppure si utilizza il mouse all'interno di una tabellina riassuntiva di tutta la superficie grafica virtuale.

Volendo, a puro titolo didattico, si può utilizzare X senza un gestore di finestre:

xinit /usr/X11R6/bin/xterm -geometry =50x10+10+10

oppure:

startx /usr/X11R6/bin/xterm -geometry =50x10+10+10

La figura 97.1 mostra il risultato del comando appena mostrato. Quando termina l'esecuzione del programma xterm, xinit fa terminare il funzionamento del servente.

Figura 97.1. Il servente X avviato senza un gestore di finestre.

figure/a2-x-server

97.1   Twm

Il gestore di finestre tradizionale e più semplice è Twm. (1) È l'unico che venga fornito assieme a X. Non è particolarmente amichevole, ma utilizza poche risorse e così è adatto agli elaboratori più lenti; inoltre è facile da configurare. Vale sempre la pena di configurare in modo essenziale questo gestore di finestre per avere un riferimento sicuro, anche quando se ne intende utilizzare principalmente un altro più sofisticato.

Figura 97.2. twm, il gestore di finestre tradizionale.

figure/a2-twm-xterm

L'eseguibile che svolge il lavoro, corrisponde a twm.

Per fare in modo che, attraverso lo script startx, si avvii automaticamente il gestore di finestre twm, occorre ricordare di modificare il proprio script ~/.xinitrc.

Nel caso particolare di Twm che è un gestore di finestre piuttosto povero, può essere conveniente l'avvio di altri programmi prima dell'eseguibile twm. Ecco come potrebbe terminare il file ~/.xinitrc.


# TWM
xsetroot -solid gray
xclock -digital -geometry +0-0 &
xbiff -geometry -0-0 &
exec twm

In questo esempio si può osservare che viene avviato prima il programma xsetroot per definire un colore uniforme del fondale (la finestra principale), quindi vengono avviati xclock e xbiff sullo sfondo (background). Infine viene avviato il gestore di finestre attraverso l'eseguibile twm.(2)

97.1.1   Configurazione di Twm

La configurazione generale di Twm risiede normalmente nel file /usr/X11R6/lib/X11/twm/system.twmrc, oppure /etc/X11/twm/system.twmrc, a seconda dell'impostazione della propria distribuzione GNU. Eventualmente, ogni utente può definire la propria configurazione personale, nel file ~/.twmrc, che in tal caso si sostituisce a quella generale.

Segue un esempio della configurazione di Twm, ridotto all'essenziale. Come appare anche dal commento introduttivo, si osservi il fatto che la configurazione di Twm non ammette la presenza di caratteri speciali, comprese le lettere accentate.


# .twmrc
# ATTENZIONE: twm non vuole lettere accentate nemmeno nei commenti!
#

NoGrabServer
RestartPreviousState
DecorateTransients
TitleFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
ResizeFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
MenuFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
IconFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*"
IconManagerFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*"
#ClientBorderWidth

Color
{
    BorderColor "slategrey"
    DefaultBackground "maroon"
    DefaultForeground "gray85"
    TitleBackground "maroon"
    TitleForeground "gray85"
    MenuBackground "maroon"
    MenuForeground "gray85"
    MenuTitleBackground "gray70"
    MenuTitleForeground "maroon"
    IconBackground "maroon"
    IconForeground "gray85"
    IconBorderColor "gray85"
    IconManagerBackground "maroon"
    IconManagerForeground "gray85"
}


# Definizione di alcune funzioni utili per azioni basate sul movimento.

MoveDelta 3
Function "sposta-sotto" { f.move f.deltastop f.lower }
Function "sposta-sopra" { f.move f.deltastop f.raise }
Function "sposta-icona" { f.move f.deltastop f.iconify }


# Definisce alcuni abbinamenti con i tasti del mouse.

Button1 = : root : f.menu "opzioni-generali"
Button3 = : root : f.menu "programmi"

Button1 = : title : f.function "sposta-sopra"
Button2 = : title : f.iconify
Button3 = : title : f.function "sposta-sotto"

Button1 = : icon : f.function "sposta-icona"
Button2 = : icon : f.iconify
Button3 = : icon : f.iconify

Button1 = : iconmgr : f.function "sposta-sopra"
Button2 = : iconmgr : f.iconify
Button3 = : iconmgr : f.function "sposta-sotto"


# Inizia la definizione dei menu`

menu "opzioni-generali"
{
"Twm"                   f.title
"Riduzione a icona"     f.iconify
"Ridimensionamento"     f.resize
"Spostamento"           f.move
"Sopra"                 f.raise
"Sotto"                 f.lower
""                      f.nop
"Messa a fuoco"         f.focus
"Fuori fuoco"           f.unfocus
"Mostra Iconmanager"    f.showiconmgr
"Nasconde Iconmanager"  f.hideiconmgr
""                      f.nop
"Eliminazione"          f.destroy
"Cancellazione"         f.delete
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}

menu "programmi"
{
"Menu` dei programmi"   f.title
"Terminale"             f.exec       "xterm -font 6x13 -ls -geometry 80x25+0+0 &"
"File manager"          f.exec       "xfm &"
""                      f.nop
"Applicazioni varie"    f.menu       "applicazioni"
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}

menu "applicazioni"
{
"Applicazioni varie"    f.title
"medit"                 f.exec          "medit &"
""                      f.nop
"ghostview"             f.exec          "ghostview -geometry =630x420+0+0 &"
"gv"                    f.exec          "gv -geometry =630x420+0+0 &"
""                      f.nop
"xpaint"                f.exec          "xpaint &"
}

Nella prima parte vengono definite le caratteristiche generali dell'ambiente. Successivamente si definisce il funzionamento del mouse e in particolare si abbinano delle funzioni alla pressione dei tasti di questo. La cosa più importante è predisporre dei menù in modo da poter avviare i programmi utilizzati più di frequente. L'esempio visto sopra viene ripreso in parte nella descrizione seguente:


Function "sposta-sotto" { f.move f.deltastop f.lower }
Function "sposta-sopra" { f.move f.deltastop f.raise }
Function "sposta-icona" { f.move f.deltastop f.iconify }

In questa parte vengono definite alcune funzioni composte a cui si farà riferimento più giù in corrispondenza di azioni con il mouse o eventualmente anche di selezioni all'interno di menù.


Button1 = : root : f.menu "opzioni-generali"
Button3 = : root : f.menu "programmi"

Button1 = : title : f.function "sposta-sopra"
Button2 = : title : f.iconify
Button3 = : title : f.function "sposta-sotto"

Button1 = : icon : f.function "sposta-icona"
Button2 = : icon : f.iconify
Button3 = : icon : f.iconify

Button1 = : iconmgr : f.function "sposta-sopra"
Button2 = : iconmgr : f.iconify
Button3 = : iconmgr : f.function "sposta-sotto"

Questa parte definisce le azioni abbinate alla pressione di uno dei tasti del mouse, in corrispondenza di determinati oggetti:

In particolare, se si preme il primo tasto del mouse quando il puntatore si trova su una parte di superficie libera del fondale, ovvero sulla finestra principale, si apre il menù delle opzioni generali. Premendo invece il terzo tasto si apre un altro menù: quello dei programmi.


menu "opzioni-generali"
{
"Twm"                   f.title
"Riduzione a icona"     f.iconify
"Ridimensionamento"     f.resize
"Spostamento"           f.move
"Sopra"                 f.raise
"Sotto"                 f.lower
""                      f.nop
"Messa a fuoco"         f.focus
"Fuori fuoco"           f.unfocus
"Mostra Iconmanager"    f.showiconmgr
"Nasconde Iconmanager"  f.hideiconmgr
""                      f.nop
"Eliminazione"          f.destroy
"Cancellazione"         f.delete
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}

Il menù delle opzioni generali, permette di attivare una serie di funzioni di twm. In particolare, vale la pena di notare la funzione f.destroy con cui si può eliminare una finestra assieme al programma in esecuzione al suo interno. Inoltre, si può osservare la funzione f.nop che non fa alcunché e viene usata in abbinamento a delle separazioni tra le voci del menù, quindi la funzione f.title che serve solo a definire un titolo per il menù.(3)


menu "programmi"
{
"Menu` dei programmi"   f.title
"Terminale"             f.exec      "xterm -font 6x13 -ls -geometry 80x25+0+0 &"
"File manager"          f.exec      "xfm &"
""                      f.nop
"Applicazioni varie"    f.menu      "applicazioni"
""                      f.nop
"Riavvio"               f.restart
"Fine lavoro"           f.quit
}

Il menù del programmi è solo una raccolta di richieste di avvio di programmi di uso comune, oltre alla chiamata di funzioni importanti come il riavvio del gestore di finestre e la conclusione della sua attività. I menù possono essere annidati, come in questo esempio, dove la voce Applicazioni varie apre un altro menù di applicazioni.

97.2   Fvwm

Il gestore di finestre Fvwm (4) tradizionale, è una derivazione di twm con superficie grafica virtuale e cornici tridimensionali.

Figura 97.3. Fvwm: sull'angolo superiore sinistro si vede la tabellina riepilogativa della superficie grafica virtuale.

figure/a2-fvwm-xterm

Per fare in modo che, attraverso lo script startx, si avvii automaticamente il gestore di finestre Fvwm, occorre ricordare di modificare il proprio script ~/.xinitrc, inserendovi la chiamata all'eseguibile fvwm (o fvwm1, a seconda di come viene denominato l'eseguibile dalla propria distribuzione). Generalmente è sufficiente avviare il gestore di finestre, senza altri programmi accessori:


# start some nice programs

exec fvwm

97.2.1   Configurazione di Fvwm

La configurazione generale di Fvwm risiede normalmente nel file /usr/X11R6/lib/X11/fvwm/system.fvwmrc, oppure /etc/X11/fvwm/system.fvwmrc, a seconda dell'impostazione della propria distribuzione GNU. Eventualmente, ogni utente può definire la propria configurazione personale, nel file ~/.fvwmrc, che in tal caso si sostituisce a quella generale.

Il file di configurazione predefinito potrebbe essere molto complesso, ma adeguatamente commentato in modo da guidare chi desidera modificarlo. In generale, non è conveniente personalizzare tutto. Di sicuro è necessario sistemare i menù, mentre il resto può rimanere come si trova.

Di seguito vengono mostrati alcuni pezzi del file, in cui appare in che modo si compone un menù (in questo ambiente si parla di menù a scomparsa: popup) e come questo si può collegare a un'azione del mouse.


# This menu will fire up some very common utilities
Popup "Utilities"
        Title   "Programmi"
        Exec    "Terminale"     exec xterm -e bash &
        Nop     ""
        Popup   "Applicazioni"  Apps
        Nop     ""
        Popup   "Fine lavoro"   Quit-Verify
EndPopup

In questo esempio si vede la dichiarazione di un menù a scomparsa denominato Utilities. Al suo interno vengono definiti diversi elementi (funzioni). In particolare:

Un menù deve poter essere aperto in qualche modo, per esempio attraverso la selezione di una voce in un altro menù. Ma il menù principale deve essere accessibile in modo indipendente da altri menù: di solito si abbina a un clic sulla finestra principale (il desktop).


#     Button    Context Modifi  Function
Mouse 1         R       A       PopUp "Utilities"
Mouse 2         R       A       PopUp "Window Ops"

L'estratto sopra riportato, mostra l'abbinamento tra un clic del primo tasto del mouse, quando il puntatore si trova sulla finestra principale, e l'azione PopUp "Utilities", cosa che fa apparire il menù visto in precedenza.

Per concludere, vale la pena di osservare che i sottomenù sono identici a un menù normale. Quello che segue è il menù Apps che si ottiene selezionando la voce Applicazioni del menù visto sopra.


Popup "Apps"
        Exec    "Netscape"      exec netscape &
        Exec    "Pine"          exec xterm -e pine &
        Nop     ""
        Exec    "Emacs"         exec emacs &
EndPopup

97.2.2   Fvwm 2

Il gestore di finestre Fvwm (5) nelle sue versioni 2.*, emula il comportamento di MS-Windows 95, pur mantenendo il sistema della superficie grafica virtuale.

Figura 97.4. xfontsel eseguito all'interno di Fvwm 2.*.

figure/a2-fvwm2-xfontsel

Il programma eseguibile di Fvwm 2.* dovrebbe essere sempre fvwm, ma dal momento che la vecchia versione di Fvwm continua a essere usata, potrebbe trattarsi di fvwm2.

Anche il file di configurazione può avere lo stesso nome oppure può contenere una piccola variante. Tuttavia, è bene sottolineare che la sintassi delle sue direttive sono abbastanza differenti, tenendo in considerazione anche il fatto che si gestisce una barra di applicazioni nella parte inferiore della superficie grafica.

Quello che segue è un esempio di configurazione completa di Fvwm 2.*, ridotta all'essenziale, con la presenza di una barra di avvio simile a quella di MS-Windows 95/98. Di proposito, si fa riferimento a una sola superficie grafica virtuale:


# Solo una superficie virtuale.
DeskTopSize 1x1

# Init: la funzione che controlla tutto
DestroyFunc InitFunction
AddToFunc InitFunction
+ "I" Module FvwmTaskBar

# Menù principale
DestroyMenu Avvio
AddToMenu Avvio
+       "Xterm"           exec          xterm -ls -geometry 80x25+0+0
+       "Gnome-terminal"  exec          gnome-terminal --login --geometry 80x25+0+0
+       ""                nop
+       "Ghostview"       exec          ghostview -geometry 630x420+0+0
+       "GV"              exec          gv -geometry 630x420+0+0
+       "GGV"             exec          ggv --geometry=630x420+0+0
+       "Xpdf"            exec          xpdf -geometry 630x420+0+0
+       ""                nop
+       "Xfig"            exec          xfig -geometry 630x420+0+0
+       "Gimp"            exec          gimp
+       "Gnumeric"        exec          gnumeric -geometry 630x420+0+0
+       "Abiword"         exec          abiword -geometry 630x420+0+0
+       ""                nop
+       "Galeon"          exec          galeon
+       "Mozilla"         exec          mozilla
+       "Balsa"           exec          balsa -geometry 630x420+0+0
+       ""                nop
+       "Fine lavoro"     quit  

# Menù abbinato all'angolo sinistro della finestra
DestroyMenu Finestra
AddToMenu Finestra
+                       "Sposta"          Move
+                       "Ridimensiona"    Resize
+                       "Riduci a icona"  Iconify
+                       "Ingrandisci"     Maximize 100 95
+                       ""                Nop
+                       "Elimina"         Destroy
+                       "Chiudi"          Close

# Mouse e funzioni abbinate
Mouse 1 R A  Menu Avvio
Mouse 2 R A  Menu Finestra
Mouse 3 R A  WindowList
Mouse 0 T A move-and-raise-or-raiselower
Mouse 0 W M   -
Mouse 0 F A resize-or-raiselower
Mouse 0 S A resize-or-raiselower
Mouse 0 I A move-or-winmenu-or-deiconify
Mouse 0 1 A Popup Finestra
Mouse 0 2 A Close
Mouse 1 4 A Maximize 100 95
Mouse 2 4 A Maximize 100 95
Mouse 3 4 A Maximize 100 95
Mouse 0 6 A Iconify

DestroyFunc move-or-winmenu-or-deiconify
AddToFunc   move-or-winmenu-or-deiconify
+ "M" Move
+ "C" Popup Finestra
+ "D" Iconify

DestroyFunc move-and-raise-or-raiselower
AddToFunc   move-and-raise-or-raiselower
+ "M" Move
+ "M" Raise
+ "C" RaiseLower

DestroyFunc resize-or-raiselower
AddToFunc   resize-or-raiselower
+ "M" Resize
+ "C" RaiseLower

# Barra stile Windows
Style "FvwmTaskBar" NoTitle,BorderWidth 3,HandleWidth 3,Sticky,StaysOnTop,\
    WindowListSkip,CirculateSkip

*FvwmTaskBarGeometry +0-0
*FvwmTaskBarFore Black
*FvwmTaskBarBack #c0c0c0
*FvwmTaskBarTipsFore black
*FvwmTaskBarTipsBack bisque
*FvwmTaskBarFont -adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*
*FvwmTaskBarSelFont -adobe-helvetica-bold-r-*-*-*-120-*-*-*-*-*-*
*FvwmTaskBarAction Click1 Iconify -1,Raise,Focus
*FvwmTaskBarAction Click2 Iconify
*FvwmTaskBarAction Click3 Module "FvwmIdent" FvwmIdent
*FvwmTaskBarUseSkipList
*FvwmTaskBarAutoStick
*FvwmTaskBarStartName Avvio
*FvwmTaskBarStartMenu Avvio
*FvwmTaskBarStartIcon mini-exp.xpm
*FvwmTaskBarShowTips
#*FvwmTaskBarShowTransients
#*FvwmTaskBarClockFormat %I:%M%p
#*FvwmTaskBarHighlightFocus
#*FvwmTaskBarAutoHide

97.2.3   Fvwm95

Il gestore di finestre Fvwm95 (6) è un'altra variante ulteriore di Fvwm che si avvicina ancora di più al comportamento di MS-Windows 95.

Figura 97.5. xcalc eseguito all'interno di Fvwm95.

figure/a2-fvwm95-xcalc

Il file eseguibile potrebbe essere fvwm95 oppure fvwm95-2. Per quanto riguarda la configurazione, anche in questo caso si può fare riferimento allo stesso nome usato per Fvwm tradizionale, oppure una variante contenente il numero 95. Tuttavia, le direttive che si possono utilizzare sono abbastanza simili a quelle di Fvwm 2.

97.3   AfterStep

Il gestore di finestre AfterStep è una derivazione di Fvwm in cui si emula il comportamento dell'interfaccia grafica di NeXT. Dal punto di vista operativo si comporta in maniera molto simile a Fvwm.

Figura 97.6. xcalc eseguito all'interno di AfterStep.

figure/a2-afterstep-xcalc

Il file ~/.steprc contiene la configurazione personalizzata. Se manca viene utilizzata solitamente la configurazione predefinita: /usr/X11R6/lib/X11/afterstep/system.steprc.

97.4   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) XFree86   software libero soggetto a diverse licenze a seconda della porzione di codice coinvolta

2) È bene ricordare che xsetroot non ha bisogno di essere avviato sullo sfondo perché termina subito la sua attività.

3) Nella tradizione informatica, la sigla NOP sta per Not operate e definisce un'azione priva di risultati.

4) Fvwm 1   software libero con licenza speciale

5) Fvwm 2   software libero soggetto a diverse licenze a seconda della porzione di codice coinvolta

6) Fvwm95   software libero soggetto a diverse licenze a seconda della porzione di codice coinvolta


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome x_gestori_di_finestre.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]