Il sistema X Window
Introduzione a XFree86 4.x
Configurazione di XFree86
Il server Xfree86
I client X
Accesso remoto e autenticazione
Introduzione al sistema operativo Linux
Il sistema grafico X
-- Ringraziamenti --
Il materiale che segue è ripreso in larga parte e tradotto dal tutorial
Introduction to XFree86 4.x di Chris Houser
L’originale è consultabile gratuitamente grazie all’autore e ad IBM sul sito
http://www-106.ibm.com/developerworks/linux/
seguendo i link Education -> Tutorials
Introduzione al sistema operativo Linux
Il sistema grafico X
X Window System
The X Window System (X) è un sistema client/server. I client sono applicazioni che, usando
risorse di alto livello (bottoni, scrollbar, aree di testo, bitmaps, menu, …), vogliono ottenere un
certo “aspetto grafico”. Il server è il device driver che gestisce l’hardware grafico e si occupa
quindi di trasformare le richieste del client in immagini vere e proprie.
X è uno standard multipiattaforma (POSIX) Æ esistono server per tutti le varianti di Unix, per
Windows, per OS/2 e per Macintosh. Il server gratuito per Linux è chiamato Xfree86.
Tutte le informazioni relative a X si possono trovare sui siti:
http://www.xfree86.org, http://www.x.org/, http://www.x11.org/
Introduzione al sistema operativo Linux
Il sistema grafico X
Configurazione rapida di X
La configurazione di X viene eseguita attraverso il programma xf86cfg.
Verranno chieste informazioni su:
♦ marca e modello della scheda video (in alternativa: il chipset)
♦ marca e modello del monitor (in alternativa: le frequenze di refresh)
♦ Modi grafici desiderati
Il risultato è la generazione del file
/etc/X11/XF86config
Il file di configurazione può trovarsi comunemente anche in directory come
/etc/, /usr/X11R6/etc/X11/, /usr/X11R6/lib/X11/, o altre sotto /usr/lib/X11/
Per far partire manualmente X si usa il comando startx
startx
X server
window
manager
X clients
È possibile sostituire interamente l’interfaccia testo con xdm, che si occupa anche del login.
Introduzione al sistema operativo Linux
Il sistema grafico X
Generare il file XF86Config
Lanciando XFree86 -configure l’hardware viene automaticamente rilevato. Lo schermo si
oscura e lampeggia, questo è normale e può durare alcuni secondi. Se al contrario appare
imediatamente una linea d’errore come:
XFree86: command not found,
probabilmente il problema è che la directory contenente il comando Xfree86 (solitamente
/usr/X11R6/bin) non è nel PATH
soluzione:
PATH="/usr/X11R6/bin:$PATH"
Nota: ricordare di sistemare il PATH anche nei file di configurazione della shell, in modo che
non sia necessario rifarlo manualmente ad ogni login.
Il risultato dovrebbe essere un nuovo file di nome XF86Config.new nella home directory
Per installarlo:
cd /etc/X11
mv XF86Config XF86Config.orig
cp ~/XF86Config.new XF86Config
Introduzione al sistema operativo Linux
Il sistema grafico X
Testare XFree86
Il file generato contiene quanto di meglio XFree86 sia riuscito a ipotizzare sull’hardware. Per
testare che le scelte fatte siano funzionanti basta lanciarlo senza altri parametri:
XFree86
Lo schermo si oscurerà di nuovo, e dopo pochi istanti dovrebbe riempirsi di una puntinatura
regolare bianca e nera (lo sfondo di default), con una X nel centro (il puntatore di default, che
dovrebbe muoversi seguendo il mouse).
Da ricordare:
Per terminare XFree86 si può usare la combinazione di tasti Ctrl+Alt+Backspace
Se non accade quanto atteso, probabilmente la causa è una situazione hardware o di sistema
troppo specifica per poterla trattare in questa sede. Un buon punto di partenza è certamente
verificare se la propria scheda grafica è supportata dalla versione installata del software, sul
sito http://www.xfree86.org, e in tal caso se ci sono passi particolari per attivarla.
Se tutto funzionasi può procedere ad analizzare nel dettaglio il contenuto del file di
configurazione per conprendere le possibilità di regolazione più sofisticate.
Introduzione al sistema operativo Linux
Il sistema grafico X
Il formato di XF86Config
Si carichi il file in un editor di testo. Si nota immediatamente che il file è composto di varie
sezioni, marcate dai delimitatori Section e EndSection.
Ogni sezione raggruppa direttive di configurazione per un diverso componente hw o sw, il cui
nome appare accanto a Section (ad esempio "ServerLayout", "InputDevice", "Monitor", ecc.)
In generale, la maggior parte di queste sezioni può non essere modificata rispetto a come l’ha
compilata il procedimento di autorilevazione descritto in precedenza.
Introduzione al sistema operativo Linux
Il sistema grafico X
XF86Config: Mouse
Section "InputDevice"
Identifier
"Mouse0"
Driver
"mouse"
Option
"Protocol" "PS/2"
Option
EndSection
"Device"
"/dev/psaux"
Å nome simbolico libero
Å fisso
Å es. Auto, Microsoft, Logitech,
MouseMan, PS/2, USB, Xqueue
Å attenzione ai link
Documentazione:
man XF86Config
man 4 mouse (attenzione, spesso ce ne sono altre con lo stesso nome, usare man –a e
trovare quella che riporta Mouse input driver nel titolo)
Introduzione al sistema operativo Linux
Il sistema grafico X
XF86Config: depth
Esaminiamo la parte di configurazione riguardante le combinazioni ammesse di risoluzione e
profondità di colore.Le informazioni si trovano nella Section “Screen”, solitamente alla fine
del file.
Deve esserci almeno una (ma probabilmente ce ne saranno molte) SubSection "Display"
all’interno della sezione, ognuna riguardante una diversa profondità di colore (Depth),
espressa come numero di bit per memorizzare il colore di ciascun pixel.
Depth
1
4
8
15
16
24
Numero di colori
2
16
256
32,768
65,536
16,777,216
Modalità di scelta
(bianco e nero)
(su tavolozza)
(su tavolozza)
(approssimati)
(approssimati)
(True color)
All’inizio dells sezione normalmente si dichiara quale depth usare di default, in questo modo:
Section "Screen"
DefaultDepth 24
[…]
EndSection
Introduzione al sistema operativo Linux
Il sistema grafico X
XF86Config: modes
Per ogni SubSection "Display" riguardante una certa depth, saranno definiti i modi di default,
cioè le risoluzioni da utilizzare con questa depth. Per evitare confusione sarebbe bene usare la
stessa specifica per tutte le SubSection, ma non è obbligatorio.
Modes "1280x1024" "1024x768" "800x600" "640x480"
Nota: benchè abbiano un significato evidente, i nomi usati non sono scelti a caso ma sono
etichette di modi predefiniti in X. In altre parole, non si può usare una stringa del tipo
“LARGHEZZAxALTEZZA” qualsiasi, ma bisogna averla definita “insegnando” a X come
pilotare i sincronismi della scheda video per ottenere tale risoluzione.
Come si vede si possono indicare diverse risoluzioni. X all’avvio elimina quelle incompatibili
con scheda, monitor e depth, ed usa la prima che rimane
Sarà poi possibile passare alle altre risoluzioni valide “al volo” con i tasti Ctrl+Alt++/-.
Introduzione al sistema operativo Linux
Il sistema grafico X
XF86Config: la Section "Screen" completa
A questo punto, la sezione dovrebbe assomigliare a questa:
Section "Screen"
Identifier "Screen0"
Device
"Card0"
Monitor
"Monitor0"
DefaultDepth 24
SubSection "Display"
Depth
8
Modes
"1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth
16
Modes
"1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth
24
Modes
"1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Introduzione al sistema operativo Linux
Il sistema grafico X
XF86Config: specifiche del monitor
La scelta, accennata prima, che X compie sulle risoluzioni, dipende dalle caratteristiche della
scheda video e del monitor (in particolare le frequenze massime). Se il monitor non viene
riconosciuto correttamente, e si conoscono questi dati, si possono impostare a mano.
Section "Monitor"
Identifier
VendorName
ModelName
HorizSync
VertRefresh
EndSection
"Monitor0"
"Monitor Vendor"
"Monitor Model"
31.5 - 64.3
50 – 100
Åidentificatore libero
Åidentificatore libero
Åidentificatore libero
ÅKHz
ÅHz
Nota: on-line e nei programmi di configurazione di X esistono dei monitor database che
permettono di ricavare le frequenze sapendo marca e modello esatti.
Introduzione al sistema operativo Linux
Il sistema grafico X
Disabilitare l’accesso remoto a X
Il file di avvio del server X, che verrà discusso nel seguito, è /usr/X11R6/bin/startx
La prima modifica che si dovrebbe fare se si intende usare la grafica solo in locale, per non
permettere ad altri sistemi in rete di accedere al proprio display, è questa:
cambiare la riga:
serverargs=""
in:
serverargs="-nolisten tcp"
Questo istruisce il server a non aprire la porta di rete su cui normalmente riceve richieste.
Introduzione al sistema operativo Linux
Il sistema grafico X
Il server
XFree86, come detto, oltre ad essere il device driver per l’hardware video/mouse/tastiera, è un
server che consente l’accesso a tali risorse ai client che ne facciano richiesta.
Poiché senza client il server sarebbe inutile, il comando startx si occupa di avviare il server e
di leggere dal file .xinitrc nella home dell’utente quali client avviare automaticamente (terminal
emulators, orologi, window managers o desktop environments.
.xinitrc è uno shell script, quindi può essere creato con un editor di testo e reso eseguibile
con gli strumenti standard. Nota: mentre l’installazione del server deve essere fatta da root,
generalmente ogni utente può usarlo, e quindi può avere il proprio .xinitrc
cd
vi .xinitrc
chmod +x .xinitrc
Per iniziare si può mettere un unico comando nel file:
exec xterm
Nota: exec fa si che il comando seguente (xterm) rimpiazzi il processo shell, risparmiando
risorse
Introduzione al sistema operativo Linux
Il sistema grafico X
Startx
Lanciando ora startx, apparirà un terminale sullo sfondi di default. Come si potrà notare, è
privo di bordi con cui ridimensionarlo e spostarlo.
XFree86 continua a funzionare finchè non è terminata l’esecuzione di .xinitrc. Uscendo dal
terminale con exit o ctrl-d si termina il processo in cui la shell di .xinitrc si era trasformata, e
quindi anche il server grafico.
Se si desidera comporre manualmente un file .xinitrc bisogna essenzialmente scegliere un
window manager, e tener conto del fatto che se il file .xinitrc giunge al termine l’intero sistema
grafico si disattiva. Allora un file tipico avrà una struttura del tipo:
xterm -geometry +1+1 &
xterm -geometry +100+100 &
exec twm
Alternativamente, si può eseguire un desktop enviroment, cioè un ambiente completo che si
faccia carico della configurazione dell’area di lavoro. Per passare il controllo al desktop
environment basta mettere in .xinitrc l’unica riga
exec gnome-session per Gnome, oppure
exec startkde
per KDE
Introduzione al sistema operativo Linux
Il sistema grafico X
Utilizzo dell’interfaccia grafica
L’interfaccia grafica fornita con Linux non si limita a X, ma comprende due sofisticati ambienti
di gestione del desktop, KDE e Gnome. Questi ambienti mettono a disposizione strumenti
grafici per la gestione dell’intero sistema, e ovviamente permettono di visualizzare in finestre
anche tanti classici terminali testo quanti se ne desiderano.
Introduzione al sistema operativo Linux
Il sistema grafico X
Configurazione degli X client
Le applicazioni X sono centinaia e dei tipi più diversi. Per questo la configurazione risulta
complessa, in quanto manca un vero e proprio standard: alcune applicazioni si configurano
con un proprio file in /etc, altre si affidano ai meccanismi del desktop environment per cui sono
state sviluppate, ecc…
Uno dei meccanismi tradizionali per conservare i settaggi delle applicazioni X prende il nome
di X Resource DataBase (xrdb). Questo database viene mantenuto in memoria da XFree86.
Ogni applicazione, all’avvio, lo consulta per vedere se ci sono record che la riguardano.
Ogni record dell’xrdb è costituito da un ResourceName e un Value orrispondente.
Poiché il db è unico per molteplici applicazioni, il ResourceName deve specificare il nome
caratteristico del settaggio che memorizza, ed anche il nome dell’applicazione a cui si applica.
Per organizzare i dati in modo chiaro, i ResourceName specificano una gerarchia che inizia
con il nome dell’applicazione e divengono sempre più specifici, fino al nome del settaggio.
Introduzione al sistema operativo Linux
Il sistema grafico X
Esempi d’uso di xrdb
Impostare lo sfondo degli xterm al colore rosso:
echo "xterm*background: red" | xrdb
xterm
Interrogare il db per elencarne il contenuto:
xrdb -query
Æxterm*background: red
Normalmente, tutti i settaggi che si vogliono ricaricare ad ogni avvio di X vengono raccolti in un
file chiamato .Xresources o a volte .Xdefaults, e come prima azione di .xinitrc si specifica
xrdb $HOME/.Xresources
Esempio di Xresources (le linee che iniziano con ! sono commenti)
! use a light yellow background for everything except xterms
*background: lightyellow
xterm*background: white
! slim the widget borders on wish (TCL/TK) apps down to one pixel wide
wish*borderWidth: 1
! set the font for xterms to something a bit larger
xterm*font: -misc-fixed-*-*-*-*-20-*-*-*-*-*-*-*
Introduzione al sistema operativo Linux
Il sistema grafico X
Nomi delle risorse
Non ha senso cercare di elencarli, vanno cercati nelle man pages delle applicazioni.
Alcuni casi pratici:
- nomi dei colori: si possono usare nomi simbolici (elencati in /usr/X11R6/lib/X11/rgb.txt
assieme ai valori delle componenti RGB che li definiscono) o direttamente il valore RGB
espresso come 6 cifre esadecimali
! specify a pure blue xterm background (#rrggbb)
xterm*background: #0000ff
- nomi di font: sono nomi molto lunghi composti da molte caratteristiche del font, ma esistono
utility come xfontsel che permettono di navigare graficamente tra i caratteri disponibili
Note finali:
in ogni momento si può testare il contenuto del file Xresources con
xrdb $HOME/.Xresources
ricordando che comunque non verranno applicati i nuovi settaggi alle applicazioni in funzione
Introduzione al sistema operativo Linux
Il sistema grafico X
L’accesso remoto ad X – lato server
L’intero sistema grafico X è stato progettato per essere utilizzato in rete. E’ semplicissimo
lanciare un’applicazione su un sistema e dirigere il suo output ad un server X operante su di
un sistema distinto. Notare che il sistema da cui si lancia il client non deve necessariamente
avere un server X configurato, anche se deve aver installate le librerie dinamiche necessarie.
Naturalmente X prevede un sistema di autenticazione e autorizzazione, per poter discriminare
i client autorizzati ad avvalersi di un server da quelli non autorizzati.
1) Generare un file .Xauthority sul server
$ xauth list
xauth: creating new authority file /home/c/.Xauthority
se il file esiste anziché il messaggio sopra verrà mostrato il contenuto, del tipo:
servermachine/unix:0 MIT-MAGIC-COOKIE-1 39849ced20eb2b62df87c714a251b8fc
2) nel caso sia apparso il messaggio di file creato, si procede alla generazione di una chiave
$ xauth generate .
3) se la home non è condivisa tra client e server, copiare le credenziali sul client:
$ xauth nextract myauth.xa $DISPLAY
$ scp myauth.xa clientmachine:myauth.xa
$ rm myauth.xa
Introduzione al sistema operativo Linux
Il sistema grafico X
L’accesso remoto ad X – lato client
4) installare le credenziali sul client
client$ xauth nmerge myauth.xa
client$ rm myauth.xa
5) Settare la variabile d’ambiente DISPLAY: la macchina client deve poter trovare il server
client$ export DISPLAY=servermachine.foo.bar.net:0
6) lanciare un comando
client$ xeyes
Introduzione al sistema operativo Linux
Il sistema grafico X
Risorse
* The XFree86 home page (http://www.xfree86.org/)
software, note per l’installazione, liste di hw supportato…
* The X Consortium (http://www.x.org/), il sito ufficiale di X, di interesse soprattutto per gli
sviluppatori esperti (protocollo, server design, etc.),
* The Direct Rendering Infrastructure (DRI) (http://dri.sf.net/) è una piattaforma per
implementazioni sicure ed efficienti di OpenGL, per la grafica 3D ad alte prestazioni
* nVidia non supporta DRI ma fornisce i proprio server accelerato
http:://www.nvidia.com/view.asp?PAGE=linux
* GNOME http://gnome.org/.
* K Desktop Environment (KDE) (http://www.kde.org/)