Il sistema X Window utilizza un'architettura client-server. Il server X viene eseguito sulla macchina che ha il display (monitor + dispositivi di input), mentre i client X possono essere eseguiti su qualsiasi altra macchina e connettersi al server X utilizzando il protocollo X (non direttamente, ma piuttosto utilizzando una libreria, come Xlib, o il più moderno XCB guidato dagli eventi non bloccante). Il protocollo X è progettato per essere estensibile e ha molte estensioni (vedi xdpyinfo(1)
).
Il server X esegue solo operazioni di basso livello, come la creazione e la distruzione di finestre, l'esecuzione di operazioni di disegno (al giorno d'oggi la maggior parte del disegno viene eseguita sul client e inviata come immagine al server), invio di eventi a Windows, ... Puoi vedere quanto poco esegue un server X eseguendo X :1 &
(utilizzare qualsiasi numero non già utilizzato da un altro server X) o Xephyr :1 &
(Xephyr esegue un server X incorporato sul server X corrente) e quindi eseguendo xterm -display :1 &
e passando al nuovo server X (potrebbe essere necessario impostare l'autorizzazione X utilizzando xauth(1)
).
Come puoi vedere, il server X fa ben poco, non disegna barre del titolo, non minimizza / iconizza le finestre, non gestisce il posizionamento delle finestre ... Naturalmente, puoi controllare il posizionamento delle finestre manualmente eseguendo un comando come xterm -geometry -0-0
, ma di solito avrai un client X speciale che fa le cose sopra. Questo client si chiama window manager . Può esserci un solo gestore finestre attivo alla volta. Se avete ancora aperto il X Server Bare dei comandi precedenti, si può provare a eseguire un gestore di finestre su di esso, come twm
, metacity
, kwin
, compiz
, larswm
, pawm
, ...
Come abbiamo detto, X esegue solo operazioni di basso livello e non fornisce concetti di livello superiore come pulsanti, menu, barre degli strumenti, ... Questi sono forniti da librerie chiamate toolkit , ad esempio: Xaw, GTK, Qt, FLTK, ...
Gli ambienti desktop sono raccolte di programmi progettati per fornire un'esperienza utente unificata. Pertanto, gli ambienti desktop in genere forniscono pannelli, lanciatori di applicazioni, vassoi di sistema, pannelli di controllo, infrastruttura di configurazione (dove salvare le impostazioni). Alcuni ambienti desktop ben noti sono KDE (creato usando il toolkit Qt), Gnome (usando GTK), Enlightenment (usando le sue librerie toolkit), ...
Alcuni effetti desktop moderni sono ottimizzati utilizzando l'hardware 3d. Quindi appare un nuovo componente, il gestore composito . Un'estensione X, l'estensione XComposite, invia i contenuti della finestra al gestore composito. Il gestore composito converte tali contenuti in trame e utilizza l'hardware 3d tramite OpenGL per comporli in molti modi (fusione alfa, proiezioni 3d, ...).
Non molto tempo fa, il server X ha parlato direttamente con i dispositivi hardware. Una parte significativa di questa gestione dei dispositivi si è spostata nel kernel del sistema operativo: DRI (che consente l'accesso all'hardware 3d da parte di X e client di rendering diretto), evdev (interfaccia unificata per la gestione dei dispositivi di input), KMS (impostazione della modalità grafica in movimento nel kernel) , GEM / TTM (gestione della memoria delle trame).
Quindi, con la complessità della gestione dei dispositivi ora per lo più al di fuori di X, è diventato più facile sperimentare sistemi di finestre semplificati. Wayland è un sistema di finestre basato sul concetto di gestore composito, ovvero il sistema di finestre è il gestore composito. Wayland si avvale della gestione del dispositivo che si è spostato da X e esegue il rendering utilizzando OpenGL.
Per quanto riguarda Unity, è un ambiente desktop progettato per avere un'interfaccia utente adatta ai netbook.