X Window System

Il sistema grafico X11 (che d'ora in poi chiameremo semplicemente X) è un insieme di librerie che fornisce un ambiente grafico basato su mouse e finestre, che si è imposto come standard de facto su tutti i sistemi tipo Unix, Linux incluso.

Un concetto fondamentale che deve essere chiaro nella mente è che grafica e console (qui per console si intende il terminale raggiungibile premendo per esempio contemporaneamente i tasti Ctrl-Alt-F1, vedere paragrafo 2.2) sono alquanto indipendenti tra loro; cito a caso il fatto che se la tastiera funziona perfettamente in grafica, non è affatto detto che funzioni altrettanto perfettamente in console, perchè grafica e console gestiscono ognuno per proprio conto la configurazione della tastiera. Questo stato di cose è inefficiente, a dire il meno, ed è senz'altro auspicabile in futuro una maggiore integrazione tra console e grafica.

Detto ciò, per quanto riguarda X, Debian utilizza l'implementazione XFree86 versione 4.3, che in futuro sarà sostituita da X.org, visto che le successive versioni di XFree86 adotteranno una licenza incompatibile con le DFSG. Nella struttura del filesystem tutti i file statici di X (binari, librerie) sono al di sotto di /usr/X11R6, mentre il file di configurazione è /etc/X11/XF86Config-4, che in verità è di piuttosto ostica interpretazione.

Figure 4.1: Relazione tra KDE e GNOME.
Image schema

I componenti di X, nella sua terminologia invertita rispetto al normale significato dei termini client/server, sono:

server X

Programma che gestisce le funzionalità grafiche e le mette a disposizione degli altri programmi (denominati client). Il server X rende disponibile una specie di lavagna, dove poi vengono disegnate le forme geometriche per l'utilizzo delle applicazioni grafiche, che compongono per esempio KDE e GNOME.

client X

Programma che esegue l'elaborazione inviando il risultato al server X per la visualizzazione. In pratica tale programma deve essere su un computer ove girerà il programma da eseguire, ovvero su una macchina server.

protocollo X

Il protocollo attraverso il quale il server X e il client X comunicano tra loro.

Xlib

Librerie di funzioni grafiche specifiche a basso livello.

Come si vede X implementa uno schema client/server: il server fornisce delle risorse (lo spazio sullo schermo) a degli utilizzatori, detti client (le applicazioni che usano lo spazio offerto sullo schermo). Questo schema permette all'utente di lanciare un programma su un computer e di interagire con esso su uno schermo che può essere anche differente da quello del computer originario: lo schermo di un computer di una rete locale (LAN) o addirittura lo schermo di un computer che sta da qualche parte in internet. Questo supporto per la rete è fondamentale nel settore commerciale, sia per le applicazioni che per l'amministrazione remota di sistemi, sebbene sia di scarsa rilevanza per l'utente domestico su un singolo computer. Nella maggior parte dei casi, pertanto, server X e client X si troveranno sulla stessa macchina, ma useranno comunque l'architettura client/server.

Lo strumento di base per creare un'applicazione grafica si chiama, abbiamo accennato, Xlib. Essendo Xlib troppo a basso livello, risulta molto laborioso creare un'applicazione grafica usando interamente Xlib. Per ovviare a questa difficoltà sono stati creati strumenti di programmazione di livello di astrazione più elevato: le moderne librerie grafiche QT e GTK, usate per costruire gli ambienti grafici KDE e GNOME, rispettivamente (Fig.4.1).

Le librerie QT, scritte in linguaggio C++, sono state sviluppate dalla norvegese Trolltech (fondata nel 1994) che le rende disponibili con licenza GPL a partire dalla versione 2.2. L'ambiente di sviluppo integrato di riferimento è KDevelop, che aiuta a conformarsi agli standard di KDE.

Le librerie GTK (Gimp ToolKit), nate in contrasto con la mancanza di una licenza libera per le librerie QT, sono disponibili con licenza LGPL. Scritte in linguaggio C, hanno l'obiettivo di emergere come grande strumento di programmazione a se stante. L'ambiente di sviluppo integrato di riferimento è Anjuta.

Mauro Darida 2006-07-25