11.2 X Window System

La gestione dell’interfaccia grafica di GNU/Linux si basa sul concetto di applicazione client-server (v. cap. 16): esiste cioè un’applicazione detta server grafico che gestisce il dispositivo di visualizzazione e per mezzo di opportune istruzioni impartite da altri programmi, i client, permette alle stesse di effettuare delle operazioni di tipo grafico (visuailzzazione di punti, linee, rettangoli, cerchi, ..., nei vari colori possibili).

La comunicazione tra il server grafico ed i relativi client avviene per mezzo di un opportuno protocollo, l’X Protocol, sviluppato nella metà degli anni ’80. In questo modo non è necessario che il server ed il client che lo utilizza vengano eseguiti sullo stesso sistema, ma possono essere eseguiti anche su sistemi fisicamente diversi.

Dal nome del protocollo di comunicazione, il sistema di gestione dell’interfaccia grafica va sotto il nome di X Window System5, o X Window, o più semplicemente X.


pict
Figura 11.6: Schematizzazione di X Window System.

Il server grafico (detto anche X server) si basa su quello che viene chiamato display, cioè una stazione grafica, costituita da una tastiera, un dispositivo di puntamento (mouse) e da uno o più screen (schermi) (v. fig. 11.7). Ogni schermo (screen) di ogni stazione grafica (display) è contraddistinto da un identificatore univoco che ha la seguente sintassi

 
[hostname]:display[.screen]  
dove


pict
Figura 11.7: Una stazione grafica o display.

Le applicazioni che utilizzano l’interfaccia grafica (i client grafici, o X client) si riferiscono generalmente ad uno schermo (screen) di un server grafico (display), che, se non indicati, vengono considerati quelli relativi all’identificatore :0.0, cioè il primo schermo (.0) relativo al primo server grafico (:0) della macchina locale (quella sulla quale è in esecuzione il client grafico). L’identificatore della stazione grafica di default è contenuto nella variabile di ambiente DISPLAY.

I dispositivi di puntamento sono dotati di un certo numero di tasti (ad esempio i mouse ne hanno due, tre o più). Il server grafico è in grado di gestire fino a 5 tasti che, in particolare, per i mouse corrispondono il primo al tasto sinistro, il secondo al tasto centrale (se esiste) ed il terzo a quello destro.

Poiché la gestione dell’interfaccia grafica si basa sull’utilizzo di sistemi di puntamento con almeno tre tasti, è prevista la possibilità di emulare la funzionalità dei tasti non presenti sul dispositivo di puntamento. Ad esempio, il tasto centrale, assente in un mouse a 2 soli tasti, può essere emulato per mezzo della pressione contemporanea degli altri due.

Anche se generalmente ne viene avviato soltanto uno, in un sistema GNU/Linux possono essere in esecuzione anche più server grafici contemporaneamente, ognuno dei quali gestirà i propri display con i relativi screen (v. fig. 11.8 - sul sistema sono in esecuzione due server grafici e le prime tre appicazioni utilizzano il primo, mentre altre due utilizzano ognuna uno screen del secondo). Il server grafico non interagisce direttamente con l’utente, ma mette a disposizione un servizio che, attraverso le librerie grafiche (Xlib), può essere utilizzato dalle applicazioni (client grafici) per interagire con l’utente attraverso la loro interfaccia grafica.


pict
Figura 11.8: Esempio di sistema con più server grafici.

Ad esempio, il comando gedit visualizza una finestra sullo schermo in cui l’utente può creare, visualizzare e/o modificare file di testo (v. fig. 12.7). L’applicazione lanciata da gedit è un client grafico che colloquiando con il server grafico tramite l’X protocol, fa visualizzare alle routine di disegno grafico la propria interfaccia grafica, cioè una finestra con una toolbar contenente dei pulsanti grafici (button), dei tab folder (v. quello della fig. 12.7 che contiene la scritta “Untitled 1”) ed un’area in cui può essere visualizzato/modificato del testo. Le routine che agevolano il disegno dell’interfaccia grafica dell’applicazione sono messe a disposizione da apposite librerie grafiche, dette Xlib. Il client grafico specifica alle librerie grafiche soltanto quello che vuole che sia disegnato sullo schermo: come farlo è compito del server grafico e delle librerie grafiche stesse.


pict
Figura 11.9: L’interfaccia grafica di gedit.

Quando viene lanciato in esecuzione, il server grafico rimane in ascolto di eventuali comunicazioni sulla porta6 6000 + display. Quindi, i client grafici (le applicazioni che utilizzano l’interfaccia grafica) potranno comunicare con il server grafico 0 attraverso la porta 6000, con il server grafico 1 attraverso la porta 6001, ...


  11.2.1 X11
   11.2.1.1 XFree86
   11.2.1.2 X.Org
   11.2.1.3 xinit e startx