Guida alla configurazione di Xorg
Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.
Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template. |
Versioni Compatibili ERRORE: valore non valido ( Tutte le versioni di Debian )! Vedi qui. |
Che cos'è
Xorg è il server dell'X Window System, il gestore grafico dei sistemi Unix, sviluppato da X.Org Foundation, rilasciato sotto licenza MIT (software libero). Grazie al diffondersi di applicazioni opensource di un certo livello, come OpenOffice e TheGimp, X viene supportato, in modo secondario anche da altri sistemi operativi non-unix (come Windows e Mac OS X).
Si basa su un'intelligente architettura client/server, in cui il server X comunica con gli altri programmi che fungono da client: quindi le richieste dell'utente (come ad esempio, lo spostamento della finestra, l'ingrandimento, il click del mouse su un certo dato pulsante, l'inserimento di testo in una textbox...) vengono recuperate dal server, il quale a sua volta le invia al client che risponde al dato evento. Inoltre può succedere anche che il client si rivolga al server affinchè questo svolga certe operazioni (ad esempio un'applicazione OpenGL può richiedere al server X servizi per il rendering 3D...).
Questa architettura permette un notevole vantaggio rispetto alle interfacce grafiche che non la adottano (ad esempio quella di Windows): infatti, nel momento in cui vengono a presentarsi certi problemi relativi al server grafico, il sistema non è costretto ad andare in crash poichè bastano pochi comandi per farlo partire nuovamente, senza dover riavviare il computer.
Una caratteristica fondamentale (e anti-intuitiva) è che il server grafico risiede sulla macchina dell'utente mentre le varie applicazioni (client) possono essere anche remote: infatti il tutto viene considerato dal punto di vista dell'applicazione che chiede (tramite l'utente) servizi al server. Da notare che, comunque, l'applicazione remota è eseguita come se risiedessa sulla stessa macchina del server.
Ciò che andremo ad analizzare nella guida sarà il file xorg.conf (di solito è: /etc/X11/xorg.conf
, digita man xorg.conf
per una lista delle possibili directory del file, oppure sudo find / -iname xorg.conf
per vedere la locazione nel tuo computer, Ctrl+C per fermare la ricerca), che permette una configurazione precisa e profonda dell'X Server.
Un punto fondamentale di xorg.conf è quello di "linkare" ad ogni device, non solo determinate proprietà (come ad esempio, frequenza orizzontale dello schermo) ma anche il driver specifico di questo device. Quindi notiamo che le sezioni che descrivono un device sono una sorta di interfaccia al driver utilizzato che, a sua volta, è un'interfaccia per il dispositivo vero e proprio.
Nelle nuove versioni Xorg si autoconfigura rendendo quindi, in un certo senso, "inutile" il file di configurazione. Questo è vero da un lato, cioè se vogliamo una macchina pronta subito dopo l'installazione del sistema. Però, d'altro canto, come ogni cosa fatta personalmente, scrivere il proprio file di configurazione è molto più efficiente: non solo perchè possiamo ovviare ad alcuni "errori" che la configurazione automatica può portare con sè, ma anche perchè avremo un ambiente completamente personalizzato e messo a punto in ogni particolare.
Com'è fatto
Inserire un file d'esempio
Struttura generale
Il file xorg.conf è composto da un certo numero di sezioni (=Section) in un ordine qualsiasi. Ogni sezione ha la forma seguente:
Section "SectionName" SectionEntry ... EndSection
Come leggiamo nel man, le sezioni possono avere i seguenti nomi (in grassetto quelli più importanti)
- Files: Percorsi di file particolarmente utili (database RGB, caratteri, moduli da caricare...)
- ServerFlags: Server flags
- Module: Indica al server quali moduli deve caricare (es: estensioni come glx, per la gestione del rendering OpenGL all'interno delle finestre, moduli per il font rasterization...)
- InputDevice: Descrizione dei device di input (mouse, tastiera...)
- Device: Descrizione della scheda grafica
- VideoAdaptor: Xv video adaptor description
- Monitor: Descrizione del monitor
- Modes: Video modes descriptions
- Screen: Associazione dei monitor alla scheda grafica e viceversa
- ServerLayout: Strato principale del file
- Vendor: Vendor-specific configuration
La sezione ServerLayout è il livello più alto, serve a tenere unite i device di input/output utilizzati in una sessione. I device di input sono descritti nella sezione InputDevice. Mentre i device di output (=monitor, scheda grafica) sono descritti all'interno della sezione Screen. Il monitor è descritto nella sezione Monitor e la scheda grafica nella sezione Device.
Una SectionEntry (vedremo dopo quelle particolari di ogni SectionName) è formata da una parola chiave seguita da uno o più argomenti dipendenti da essa. I tipi di questi argomenti sono 3:
- Integer: interi
- Real: virgola mobile
- String: stringa racchiusa tra (")
Una parola chiave importante è Option che viene utilizzata per settare particolari opzioni di un componente del server (tastiera, mouse, monitor, scheda grafica...). Option è formata da una o due stringhe: la prima è il nome dell'opzione, e la seconda, non obbligatoria, è il valore dell'opzione. Che siano interi, real o stringhe i valori delle option devono essere virgolettati. Molto sinteticamente, per comprederne il funzionamento, si legga questo esempio preso dal man:
Example: Le seguenti opzioni sono equivalenti:
Option "Accel" "Off" Option "NoAccel" Option "NoAccel" "On" Option "Accel" "false" Option "Accel" "no"
Files Section
Questa sezione (opzionale) viene utilizzata per specificare alcuni directory richiesta dal server. Alcune delle entry di Files sono:
FontPath "path"
: imposta il percorso (assoluto) per i font utilizzati dal server grafico. Per specificare più cammini è possibile utilizzare una delle seguenti soluzioni:FonthPath "path_1","path_2",...,"path_n"
E' possibile anche specificare FontPath multipli invece della sintassi che utilizza la virgola. Se non viene specificata questa entry allora il server cercherà in percorsi standard (vedi man per i dettagli).
RGBPath "path"
: imposta il percorso (assoluto) del database RGB. Il database RGB non è nient'altro che una tabella che associa un nome simbolico al colore dato dalla (R,G,B): ad esempio(139, 0, 0)
DarkRed . Se non è specificato viene cercato in/usr/share/X11/rgb
(i file puo' essere un .txt se il server è stato compilato per usare un database RGB testuale anzicchè binario, e in questo caso al percorso precedente viene automaticamente inserita l'estensione). La sintassi per le path multiple è identica a quella già discussa
ModulePath "path"
: imposta il percorso (assoluto) per i moduli utilizzati da Xorg. La sintassi per le path multiple è identica a quella già discussa.
Module Section
La sezione Module è utilizzata per specificare quali moduli caricare. Se il server è compilato staticamente (cioè se tutti i moduli (o quelli necessari) vengono compilati nel server) questa sezione viene ignorata. Come abbiamo detto in precedenza in questa sessione possono essere caricate alcune estensioni di Xorg e i moduli per il font rasterization. Per caricare un modulo è sufficiente inserire la parolachiave Load in questo modo:
Load "modulename"
Poichè alcuni moduli sono caricati di default è possibile disabilitarli con
Disable "modulename"
I moduli vengono cercati nei percorsi specificati nel ModulePath della sezione Files, e in alcune sottodirectory specifiche di quei percorsi. Per vedere quali moduli sono presenti (estensioni e font) si vedano queste directory:
/usr/lib/modules/fonts
e /usr/lib/modules/extensions
.
oppure
/usr/lib/xorg/modules/fonts
e /usr/lib/xorg/modules/extensions
Il modulo per i font bitmap è caricato automaticamente. E' importante che venga caricato il modulo "extmod" perchè contiene alcune estensioni molto utili come la Shape Extension oppure la X Video Extension.
I Device: concetti generali
Introduciamo ora alcuni concetti fondamentali riguardanti i Device. Un device è l'astrazione di un dispositivo hardware (tastiera, mouse, schermo...) al quale il sistema operativo fornisce accesso mediante un driver. Ci occuperemo dei seguenti device: tastiera, mouse, schermo e scheda grafica. A differenza degli altri device elecanti, la tastiera e il mouse devono avere una caratteristica in più. Supponiamo che attaccati ad un computer ci siano più tastiere e più mouse: in questo caso possiamo utilizzare solo una coppia alla volta. Quindi c'è bisogno di definire quale di quella tastiera è una CoreKeyboard e quale è un CorePointer. Indicando queste due opzioni (nel modo che vedremo di seguito) non facciamo nient'altro che stabilire quale tastiera e quale mouse utilizzeremo per la nostra sessione. E' possibile cambiare (con alcune opzioni del programma xorg) la corekeyboard (o la corepointer) cambiando quindi di conseguenza la tastiera (o il mouse) utilizzato. Questo discorso è utile quando c'è una sessione multiutente su una stessa macchina: ogni sessione avrà una corekeyboard diversa e quindi ogni utente può utilizzare, indipendentemente dagli altri, la sua tastiera. Il discorso sulla scheda video e il monitor è diverso: infatti non c'è la necessità di utilizzare solo un monitor o solo una scheda video in una certa sessione, poichè uno stesso utente può, naturalmente, utilizzare due schermi contemporaneamente. In questo caso, basta inserire due sezioni Screen. Lo stesso vale per la scheda grafica.
InputDevice Section
Normalmente le sezioni InputDevice sono almeno due: una per la tastiera (primaria) e l'altra per il dispositivo di puntamento primario (di solito mouse). Se viene omessa verrà utilizzata una configurazione di default che non funziona bene su tutte le piattaforme. Quindi è utile seguire i consigli successivi.
La InputDevice Section ha il seguente formato
Section "InputDevice" Identifier "name" Driver "inputdriver" options ... EndSection
Le voci Identifier e Driver sono obbligatorie, mentre tutto il resto è opzionale. La voce Identifier permette di dare al device un nome univoco che è lo stesso utilizzato, ad esempio, nella sezione ServerLayout). Mentre la voce Driver indica il driver utilizzato per il device di Input. Ora attenzione al seguente passaggio. Una InputDevice Section viene considerata "attiva" quando:
- è specificata all'interno della ServerLayout come Core* (* = Keyboard oppure Pointer)
- è specificata grazie ad alcune opzioni da linea di comando del programma xorg (digita
man xorg
) che permette di rendere "core" un device di input. - è specificata come Core* all'interno della sezione InputDevice stessa (Option "CoreKeyboard" oppure Option "CorePointer").
Se nessuna delle tre condizioni è verificata allora viene considerato core (e quindi attiva) la sezione che utilizza come driver "kbd" o "mouse" (vedi man
).
Dopo questa definizione possiamo continuare dicendo che: se viene utilizzato un server dinamico (e quindi non statico) il modulo del driver "inputdriver" viene caricato per ogni sezione attiva (non per tutte ovviamente, dato che -come abbiamo visto nell'introduzione- è possibile, per ogni sessione, utilizzare un unico mouse e un'unica tastiera).
Device Section
xorg.conf può avere più di una sezione Device, però ce ne deve essere, come minimo una che descriva la scheda grafica utilizzata. Il formato è il seguente:
Section "Device" Identifier "name" Driver "driver" entries ... EndSection
Sono obbligatorie solo le voci Identifier e Drivers che funzionano come sopra. Le altre entry sono opzionali e dipendono dalla scheda grafica in questione. E' utile avere a dispozione il manuale della scheda per modificarle. Ne vediamo solo alcune:
BusID "bus-id"
: specifica l'indirizzo (il bus location) della della scheda grafica
Screen number
: indica quale schermo utilizzare. E' utilizzato per quelle schede video che possono gestire più di uno schermo (consiglio questo link per chi avesse questa necessità: Using multiple monitors)
Monitor Section
Ha questo formato:
Section "Monitor" Identifier "name" entries EndSection ...
L'unica voce obbligatoria è Identifier. Vediamo alcune entry interessanti:
VendorName "vendor"
: opzionale, specifica il produttore del monitor
ModelName "model"
: opzionale, indica il modello del monitor
HorizSync horizsync-range
: indica il range della frequenza di aggiornamento orizzontale del monitor. Viene indicato come:freq min - freq max
. Per default l'unità di misura è kHz (manualmente è possibile specificarlo in MHz o in Hz). Consultare il manuale del monitor per avere informazioni specifiche.
VertRefresh vertrefresh-range
: indica il range della frequenza di aggiornamento verticale supportata dello schermo. La sintassi è come sopra.
DisplaySize width height
: opzionale, indica larghezza e altezza, espressa in millimetri, dell'area visibile dello schermo. Se viene specificata è utilizzata per calcolare i DPI dello schermo.