11.2.1 X11

Esistono varie implementazioni di server grafici (X Window System) per sistemi Unix-like, tra le quali una versione open source, X11, che al momento attuale è arrivato alla versione X11R6.77 (v. man page X(7x)).

Il server grafico viene lanciato con il comando X (/usr/X11R6/bin/X), che in genere è un symbolic link al comando effettivo XFree86 o Xorg. Di per sé il server grafico non offre nessuna funzionalità applicativa utilizzabile dall’utente, infatti, una volta avviato, esso presenta sullo schermo soltanto un’immagine di sfondo sulla quale è presente una piccola immagine che costituisce il cursore grafico, un puntatore che si sposta secondo gli input ricevuti dal sistema di puntamento (mouse).

Per poter utilizzare l’ambiente grafico è necessario lanciare in esecuzione qualche client grafico, ovvero qualche programma che utilizza il server grafico per visualizzare la propria interfaccia grafica.

Alcune combinazioni di tasti vengono generalmente utilizzate per effettuare specifiche operazioni sull’ambiente grafico. In particolare
11.2.1.1 XFree86

Uno dei server grafici più utilizzati da GNU/Linux è XFree86 (man page XFree86(1)) sviluppato dall’XFree86 Project8. Al momento della stesura di questo testo, la versione più recente di tale server è la 4.4.

____________________________________________________________________

Comando: XFree86
Path: /usr/X11R6/bin/XFree86

SINTASSI  
# XFree86 [:display] [option]  
DESCRIZIONE

____________________________________________________________________

[da completare ...]

Quando XFree86 viene avviato da un utente non superuser, esso ricerca un file di configurazione secondo l’ordine dei percorsi di seguito riportati
 
/etc/X11/cmdline
/usr/X11R6/etc/X11/cmdline
/etc/X11/$XF86CONFIG
/usr/X11R6/etc/X11/$XF86CONFIG
/etc/X11/XF86Config-4
/etc/X11/XF86Config
/etc/XF86Config
/usr/X11R6/etc/X11/XF86Config.hostname
/usr/X11R6/etc/X11/XF86Config-4
/usr/X11R6/etc/X11/XF86Config
/usr/X11R6/lib/X11/XF86Config.hostname
/usr/X11R6/lib/X11/XF86Config-4
/usr/X11R6/lib/X11/XF86Config

dove cmdline è il path relativo (senza ‘..’) specificato con l’opzione -xf86config sulla riga di comando all’avvio del server grafico, $XF86CONFIG è il path relativo (senza ‘..’) indicato dalla variabile d’ambiente XF86CONFIG e hostname è il nome della macchina (v. hostname).

Se XFree86 viene avviato dal superuser, l’ordine dei percorsi di ricerca del file di configurazione è quello seguente
 
cmdline
/etc/X11/cmdline
/usr/X11R6/etc/X11/cmdline
$XF86CONFIG
/etc/X11/$XF86CONFIG
/usr/X11R6/etc/X11/$XF86CONFIG
$HOME/XF86Config
/etc/X11/XF86Config-4
/etc/X11/XF86Config
/etc/XF86Config
/usr/X11R6/etc/X11/XF86Config.hostname
/usr/X11R6/etc/X11/XF86Config-4
/usr/X11R6/etc/X11/XF86Config
/usr/X11R6/lib/X11/XF86Config.hostname

dove cmdline è il path (assoluto o relativo) specificato con l’opzione -xf86config sulla riga di comando all’avvio del server grafico, $XF86CONFIG è il path (assoluto o relativo) indicato dalla variabile d’ambiente XF86CONFIG, $HOME è il path indicato dalla variabile d’ambiente HOME e hostname è il nome della macchina (v. hostname).

In genere, il file di configurazione considerato all’avvio di XFree86 sulla maggior parte dei sistemi GNU/Linux è /etc/X11/XF86Config (v. man page XF86Config(5)).

Il file di configurazione contiene indicazioni sui dispositivi ed è composto da sezioni con la seguente struttura

 
Section "SectionName"
    SectionEntry
    ...
EndSection  
Il contenuto del file è case-insensitive ed il carattere ‘_’ viene ignorato.

I nomi delle possibili sezioni sono elencati nella tab. 11.2.


Section Name--Significato--------------------------------------|
Files---------Percorsi relativi ai file.---------------------------|
ServerFlags   Impostazioni di flag del server.                    |
Module        Caricamento dinamico di moduli.                    |
InputDevice   Dispositivi di input (tastiera, mouse, ...).            |
DeVividecoeAdaptor  SAcdhaetdteat gorarifi vcihed.eo.                                 |
Monitor       Monitor.                                        |
Modes         Risoluzioni dello schermo.                           |
ScSererveenrLayout  SLcahyeormuot..                                        |
DRI          DRI.                                           |
Vendor        Vendor.                                         |
Keyboard      Tastiera (obsoleto -utilizzare InputDevice).            |
Pointer-------Dispositivo-di puntamento-(obsoleto--utilizzare InputDevice).-

Tabella 11.2: Nomi delle sezioni ne file di configurazione di XFree86.

Le sezioni a più alto livello sono quelle indicate come ServerLayout. Queste collegano le impostazioni relative ai dispositivi di input (le cui impostazioni sono definite nella sezione InputDevice) e di output (definiti in varie sezione e raccolti nella sezione Screen) che verranno utilizzati. La sezione Screen collega una scheda grafica ad un monitor, mentre le schede grafiche ed i monitor sono definiti rispettivamente nelle sezioni Device e Monitor.

All’nterno di una sezione, ogni riga contiene una parola chiave (keyword) ed eventuali argomenti che specificano l’impostazione.

La sezione Files è utilizzata per specificare i percorsi di ricerca dei file. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione ServerFlags è utilizzata per specificare le opzioni globali del server grafico. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione Module è utilizzata per specificare i moduli che devono essere caricati dinamicamante. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione InputDevice è utilizzata per specificare le impostazioni relative ad ogni dispositivo di input. In genere il file di configurazione del server grafico contiene almeno due sezioni InputDevice: una per la tastiera ed una per il dispositivo di puntamento (mouse). Una sezione InputDevice è considerata attiva se viene fatto riferimento ad essa in una sezione ServerLayout o tramite la riga di comando con le opzioni -keyboard e -pointer. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione Device è utilizzata per specificare le impostazioni relative ad ogni scheda grafica utilizzata. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione Monitor è utilizzata per specificare le impostazioni relative al monitor. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione Modes è utilizzata per specificare le impostazioni relative alle modalità video (risoluzioni) indipendentemente dallo schermo. La sezione Monitor può fare riferimento ad una sezione Modes per mezzo della direttiva UseModes. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione Screen è utilizzata per specificare le impostazioni relative allo schermo, ovvero quello che collega la scheda grafica (sezione Device) al monitor (sezione Monitor). Una sezione Screen è considerata attiva se è fatto riferimento ad essa nella sezione ServerLayout o con l’opzione -screen sulla riga di comando. Se nessuno dei riferimenti è stato indicato, viene considerata attiva la prima sezione Screen presente nel file di configurazione. Le direttive che possono essere contenute in tale sezione sono le seguenti

La sezione Screen può contenere una o più sottosezioni Display con la seguente sintassi

 
    SubSection "Display"
        ...
    EndSubSection  
Le direttive che possono essere contenute in tale sottosezione sono le seguenti

La sezione ServerLayout è utilizzata per collegare le impostazioni relative ai vari dispositivi: essa collega una o più sezioni Screen ed una o più sezioni InputDevice. Le direttive che possono essere contenute in tale sezione sono le seguenti

Di seguito è riportato un esempio di una sezione ServerLayout

Section "ServerLayout"
 Identifier  "Layout 1"
 Screen      "MGA 1"
 Screen      "MGA 2" RightOf "MGA 1"
                                                                        
                                                                        
 InputDevice "Keyboard 1" "CoreKeyboard"
 InputDevice "Mouse 1"    "CorePointer"
 InputDevice "Mouse 2"    "SendCoreEvents"
 Option      "BlankTime"  "5"
EndSection
La sezione DRI è utilizzata per specificare le impostazioni relative alla DRI (Direct Rendering Infrastructure) (v. http://www.xfree86.org/current/DRI.html).

La sezione Vendor è utilizzata per specificare le impostazioni relative al fornitore.

[da completare ...]

11.2.1.2 X.Org

Un’altra implementazione di server grafico è Xorg (man page Xorg(1)), sviluppato dalla X.Org Foundation9, il cui codice deriva da quello sviluppato in precedenza dall’X Consortium, da The Open Group10 e dall’XFree86 Project (XFree86 vers. 4.4rc2).

Per problemi di licenza, alcune delle recenti distribuzioni includono la versione X11R6.7 della X.Org Foundation, al posto dell’analoga versione sviluppata dall’XFree86 project.

____________________________________________________________________

Comando: Xorg
Path: /usr/X11R6/bin/Xorg

SINTASSI  
# Xorg [:display] [option]  
DESCRIZIONE

________________________________________________________________________

[da completare ...]

Esso utilizza il file di configurazione xorg.conf (man page xorg.conf(5)).

[da completare ...]

11.2.1.3 xinit e startx

Vista la complessità di XFree86 o xorg, sono stati introdotti altri comandi che ne facilitano l’utilizzo, come xinit (X Window Initializer - man page xinit(1)) e startx (man page startx(1)).

xinit viene generalmente utilizzato per lanciare in esecuzione il server grafico ed un client grafico che lo utilizza. Quando il client grafico termina la sua esecuzione, xinit invia un segnale di interruzione al server grafico, che a sua volta termina la propria esecuzione.

__________________________________________________________________________________________________________

Comando: xinit
Path: /usr/bin/X11/xinit

SINTASSI  
# xinit [[client] client_option] [-- [server] [display] server_option]  
DESCRIZIONE

________________________________________________________________________

Quando l’ultimo dei client grafici lanciati in esecuzione da xinit termina (o termina il file ~/.xinitc), xinit termina il server grafico.

Ad esempio, il comando

xinit
avvia il server grafico ~/.xserverrc (o X) ed il file ~/.xinitrc o xterm, come precedentemente spiegato. Il comando

xinit -- /usr/X11R6/bin/Xqdss :1
avvia il server grafico /usr/X11R6/bin/Xqdss associandolo al display :1. Viene anche lanciato il file ~/.xinitrc o xterm, come precedentemente spiegato. Il comando

xinit -e widgets -- ./Xsun -l -c
avvia il server grafico ./Xsun con le opzioni -l e -c. Viene anche lanciato il file ~/.xinitrc o xterm, come precedentemente spiegato, al quale viene passata l’opzione -e widgets.

startx non è altro che un front-end del comando xinit, quindi anch’esso lancia un server X e un client X ad esso associato.

____________________________________________________________________

Comando: startx
Path: ???/startx

SINTASSI  
# startx [[Xclient] [client_option]] [-- [display] [server_option]]  
DESCRIZIONE

___________________________________

Al suo avvio, startx lancia in esecuzione il client grafico specificato da Xclient. Se non viene specificato nessun client grafico, startx lancia in esecuzione il file ~/.xinitrc, o nel caso in cui esso non esista, il file /etc/X11/xinit/xinitrc. Il server grafico da lanciare viene determinato in base al contenuto del file ~/.xserverrc, o nel caso in cui esso non esista, nel file /etc/X11/xinit/xserverrc.

Generalmente ~/.xinitrc è uno script Bash che avvia i client grafici predefiniti dall’utente. Quando tale script termina la sua esecuzione, startx termina il server X, chiudendo la sessione grafica.

Le varie distribuzioni possono personalizzare in maniera piuttosto pesante il file /etc/X11/xinit/xinitrc, per cui si rimanda alla specifica documentazione relativa alla distribuzione considerata.

Generalmente, su un sistema viene lanciato un solo server X, ovvero una sola interfaccia grafica, ma la struttura di X Window permette di lanciare più interfacce grafiche, cioè più di un server grafico, sullo stesso sistema. Ad esempio, il comando

 
$ startx  
avvia il server X come display :0, che è accessibile attraverso il primo terminale virtuale disponibile (generalmente il terminale virtuale che permette l’accesso all’interfaccia grafica è il settimo, poiché i primi 6 sono utilizzati per l’accesso al sistema in modalità testo), mentre il comando

 
$ startx -- :1  
avvia il server X come display :1, accessibile dal primo terminale virtuale disponibile (se è già in esecuzione il server grafico :0 accessibile, ad esempio, per mezzo del settimo terminale virtuale, il server grafico :1 sarà accessibile dall’ottavo terminale virtuale).12

Il comando

 
$ startx -- -depth 16  
avvia il server X (come display :0), con profondità di colore a 16 bit.