4. I Window Manager

Ad ogni modo non abbiamo mai menzionato come faccia il server X a gestire la manipolazione delle aree di visualizzazione dei client su schermo (chiamate anche finestre). È ovvio, a chiunque abbia usato una GUI, che bisogna avere il controllo su delle "finestre client". Tipicamente l'utente può muoverle e ordinarle, cambiarne le dimensioni, minimizzarle o massimizzarle. Come fa a gestire tali compiti il server X? La risposta è: non lo fa.

Uno dei principi fondamentali di X è: "noi forniamo il meccanismo, ma non la politica". E così, benché il server X fornisca un modo (meccanismo) per manipolare le finestre, non dice come si deve comportare effettivamente questa manipolazione (politica).

Tutta questa roba strana riguardo a meccanismi e politiche si riduce ad un solo precetto: è responsabilità di un altro programma gestire lo spazio su schermo. Questo programma decide dove piazzare le finestre, fornisce il meccanismo per far specificare all'utente l'aspetto delle finestre, le posizioni e la loro dimensione; solitamente fornisce "decorazioni" come i titoli delle finestre, cornici e pulsanti che ci danno il controllo della finestra stessa. Questo programma, che gestisce le finestre, è chiamato "window manager".

"Il window manager in X è solo un altro client -- non è parte del sistema X Window, benché goda di privilegi speciali -- qundi non esiste un unico window manager; ce ne sono molti, che supportano diverse modalità di interazione con l'utente e diversi schemi di posizionamento delle finestre, decorazioni, gestione della tastiera, della mappa colori e del focus."

L'architettura X fornisce i mezzi ad un window manager per eseguire tutte queste azioni sulle finestre; ma non fornisce un vero e proprio window manager.

Ci sono, ovviamente, moltissimi di window manager, poiché, dal momento che il window manager è un componente esterno, è (relativamente) facile scriverne uno che si adatti alle proprie esigenze, ovvero le proprie preferenze sul look delle finestre, il loro comportamento, la posizione in cui si vuole che si trovino, etc. Alcuni window manager sono semplicistici e bruttini (twn); alcuni hanno un aspetto vivace e includono praticamente tutto a parte un lavandino (enlightenment); poi ci sono tutte le vie di mezzo: fvwm, amiwm, icewm, windowmaker, afterstep, sawfish, kwm e tantissimi altri. Ci sono window manager per tutti i gusti.

Un window manager è un "meta-client", il cui obbiettivo di base è quello di gestire altri client. La maggior parte dei window manager fornisce qualche strumento aggiuntivo (e alcuni ne forniscono tantissimi). Comunque una funzionalità che sembra presente nella maggior parte dei window manager è un sistema per lanciare le applicazioni. Alcuni forniscono un box dove si possono scrivere comandi standard (che possono essere usati per lanciare applicazioni client). Altri hanno dei rifiniti menu appositi di qualche tipo. Non ci sono standard in proposito comunque; di nuovo, poiché X non detta alcuna politica su come una applicazione client dovrebbe essere lanciata, questa funzionalità va implementata nei programmi client. Mentre tipicamente di ciò si occupa il window manager (e ciascuno l fa in modo diverso), è concepibile avere applicazioni client il cui solo scopo è lanciare altre applicazioni client, si pensi ad un pannello di lancio dei programmi. E di certo sono state scritte molte applicazioni per lanciare programmi.