Guida alla configurazione di Xorg: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (link esterni)
 
(25 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
 
 
{{Versioni compatibili|Tutte le versioni di Debian}}
==Che cos'è==
==Che cos'è==
Xorg è il server dell'X Window System, il gestore grafico dei sistemi Unix, sviluppato da [http://www.x.org/wiki/ X.Org Foundation], rilasciato sotto [http://opensource.org/licenses/mit-license.php licenza MIT] (software libero).
Xorg è il server dell'X Window System, il gestore grafico dei sistemi Unix, sviluppato da X.Org Foundation<sup>[[#Collegamenti esterni | [1]]]</sup>, rilasciato sotto licenza MIT<sup>[[#Collegamenti esterni | [5]]]</sup> (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 proprietari (come Windows e Mac OS X).
Grazie al diffondersi di applicazioni open source di un certo livello, come OpenOffice e TheGimp, X viene supportato, in modo secondario, anche da sistemi operativi proprietari (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 utilizziamo normalmente, i quali fungono da client: le richieste dell'utente (come ad esempio, lo spostamento della finestra, l'ingrandimento, il click del mouse su un certo pulsante, l'inserimento di testo in una textbox...) vengono recuperate dal server, il quale a sua volta le invia al client che risponde al particolare evento. Inoltre può succedere anche che il client si rivolga al server affinchè questo svolga certe operazioni (ad esempio: un qualsiasi programma giornaliero come xterm (client) richiede al server che venga disegnata una finestra in una certa posizione sullo schermo, oppure un'applicazione OpenGL può richiedere ad X servizi per il rendering 3D...).
Si basa su un'intelligente architettura client/server, in cui il server X in esecuzione su un computer comunica con gli altri programmi che utilizziamo normalmente, i quali fungono da client. Il server si colloca tra l'utente e il programma client: accetta, quindi, richieste di output grafico dai client (disegnare finestre in una certa posizione) mostrandole all'utente, e riceve input dall'utente (inserimento di testo in una textbox, click del mouse su un certo pulsante ecc.) trasmettendoli ai programmi client.


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.
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.
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 risiedesse sulla stessa macchina del server.


Ciò che andremo ad analizzare nella guida sarà il file xorg.conf (di solito è: <code>/etc/X11/xorg.conf</code>, digita <code>man xorg.conf</code> per una lista delle possibili directory del file, oppure <code>sudo find / -iname xorg.conf</code> per vedere la locazione nel tuo computer, Ctrl+C per fermare la ricerca), che permette una configurazione precisa e profonda dell'X Server.
Ciò che andremo ad analizzare nella guida sarà il file <code>xorg.conf</code> (di solito è: <code>/etc/X11/xorg.conf</code>, digita <code>man xorg.conf</code> per una lista delle possibili directory del file, oppure <code>sudo find / -iname xorg.conf</code> per verificarne la posizione sul tuo computer, Ctrl+C per fermare la ricerca), che permette una configurazione precisa e accurata 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, risoluzione, ecc.) 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.
Una caratteristica fondamentale di <code>xorg.conf</code> è che permette di associare ad ogni device, non solo determinate proprietà (come ad esempio, frequenza orizzontale dello schermo, risoluzione, ecc.) ma anche il driver specifico da utilizzare. Dunque, 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 (dalla 7.3) Xorg si autoconfigura rendendo 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 , ma anche perchè avremo un ambiente completamente personalizzato e messo a punto in ogni particolare.
Nelle nuove versioni (dalla 7.3) Xorg si autoconfigura rendendo, 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 , ma anche perché potremo avere così un ambiente completamente personalizzato e messo a punto in ogni particolare.


==Avvisi e precauzioni==
==Avvisi e precauzioni==
Alcuni avvisi e qualche precauzione prima d'iniziare.
Alcuni avvisi e qualche precauzione prima d'iniziare.


<b>Avviso 1</b>: Questa guida non ha l'obiettivo di spiegare ogni dettaglio del file xorg.conf, anche se è abbastanza particolareggiata. Per questa ragione è ovvio che possiate trovare in alcuni file di configurazione delle voci che non abbiamo descritto. Leggete <code>man xorg.conf</code> e <code>man xorg</code> se ne avete la necessità.
<b>Avviso 1</b>: Questa guida non ha l'obiettivo di spiegare ogni dettaglio del file <code>xorg.conf</code>, anche se è abbastanza particolareggiata. Per questa ragione è ovvio che possiate trovare in alcuni file di configurazione delle voci che non abbiamo descritto. Leggete <code>man xorg.conf</code> e <code>man xorg</code> se ne avete la necessità.


<b>Avviso 2</b>: E' possibile che non abbiate il file xorg.conf (come già spiegato). Basta crearne uno (semmai in <code>/ect/X11/xorg.conf</code>), per utilizzare la configurazione descritta in questo al posto di quella automatica.
<b>Avviso 2</b>: È possibile che non abbiate il file <code>xorg.conf</code> (come già spiegato). Basta crearne uno (semmai in <code>/etc/X11/xorg.conf</code>), per utilizzare la configurazione descritta in questo al posto di quella automatica.


<b>Precauzione 1</b>: prima di modificare il file xorg.conf è bene farne un backup. Cerchiamo prima il percorso completo del file (come spiegato sopra) poi digitiamo (supponendo che quella indicata sia la directory giusta):
<b>Precauzione 1</b>: prima di modificare il file <code>xorg.conf</code> è bene farne un backup. Cerchiamo prima il percorso completo del file (come spiegato sopra) poi digitiamo (supponendo che quella indicata sia la directory giusta):
<pre>$ cp /etc/X11/xorg.conf ~/xorg_backup.conf</pre>
<pre>$ cp /etc/X11/xorg.conf ~/xorg_backup.conf</pre>


<b>Precauzione 2</b>: possiamo generare un file xorg.conf basato sull'autodetect della nostra configurazione. Riavviamo il sistema in single-mode user, logghiamoci come root e diamo:
<b>Precauzione 2</b>: possiamo generare un file <code>xorg.conf</code> basato sull'autodetect della nostra configurazione. Riavviamo il sistema in single-mode user, eseguiamo l'accesso come root e diamo:
<pre>
<pre>
# xorg -configure
# Xorg -configure
</pre>
</pre>
verrà creato nella directory corrente un file (di solito <code>xorg.conf.new</code>) che possiamo utilizzare non solo per ripristinare alcuni errori dovuti a modifiche accidentali, ma può essere utilizzato anche per iniziare a far pratica sui concetti che esporremo.
verrà creato nella directory corrente un file (di solito <code>xorg.conf.new</code>) che possiamo utilizzare non solo per ripristinare alcuni errori dovuti a modifiche accidentali, ma anche per iniziare a far pratica sui concetti che esporremo.
Ricordiamo però che l'autodetect e la conseguente creazione del file xorg.conf in automatico può portare a dei problemi causati da un rilevamento erroneo delle componenti.
Ricordiamo però che l'autodetect e la conseguente creazione del file <code>xorg.conf</code> in automatico può portare a dei problemi causati da un rilevamento erroneo delle componenti.


==Com'è fatto==
==Com'è fatto==
A titolo d'esempio vediamo come si presenta un file xorg.conf:
A titolo d'esempio vediamo come si presenta un file <code>xorg.conf</code>:
<pre>
<pre>
Section "ServerLayout"
Section "ServerLayout"
Riga 101: Riga 98:


===Struttura generale===
===Struttura generale===
Il file xorg.conf è composto da un certo numero di sezioni (=<b>Section</b>) in un ordine qualsiasi. Ogni sezione ha la forma seguente:
Il file <code>xorg.conf</code> è composto da un certo numero di sezioni (=<b>Section</b>) in un ordine qualsiasi. Ogni sezione ha la forma seguente:
<pre>
<pre>
  Section "SectionName"
  Section "SectionName"
Riga 111: Riga 108:
Come leggiamo nel man, le sezioni possono avere i seguenti nomi (in grassetto quelli più importanti)
Come leggiamo nel man, le sezioni possono avere i seguenti nomi (in grassetto quelli più importanti)


* <b>ServerLayout: </b>Strato principale del file
* <b>ServerLayout: </b> Livello principale del file


* <b>InputDevice:</b> Descrizione dei device di input (mouse, tastiera...)
* <b>InputDevice:</b> Descrizione dei device di input (mouse, tastiera, ecc.)


* <b>Device:</b> Descrizione della scheda grafica
* <b>Device:</b> Descrizione della scheda grafica
Riga 125: Riga 122:
* <b>Screen:</b> Associazione dei monitor alla scheda grafica e viceversa
* <b>Screen:</b> Associazione dei monitor alla scheda grafica e viceversa


* <b>Files:</b> Percorsi di file particolarmente utili (database RGB, caratteri, moduli da caricare...)
* <b>Files:</b> Percorsi di file particolarmente utili (database RGB, caratteri, moduli da caricare, ecc.)


* ServerFlags: Server flags
* ServerFlags: Server flags


* <b>Module:</b> Indica al server quali moduli deve caricare (es: estensioni come glx, per la gestione del rendering OpenGL all'interno delle finestre, moduli per il [http://en.wikipedia.org/wiki/Font_rasterization font rasterization]...)
* <b>Module:</b> 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<sup>[[#Collegamenti esterni | [6]]]</sup>, ecc.)


* DRI: [http://www.x.org/wiki/DRI2 DRI-specific configuration]
* DRI: DRI-specific configuration


* Vendor: Vendor-specific configuration
* 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'''.
La sezione '''ServerLayout''' è il livello più alto, serve a tenere uniti i device di input/output utilizzati in una sessione. I device di input sono descritti nella sezione '''InputDevice'''. Mentre i device di output (quali monitor e 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:
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:
Riga 142: Riga 139:
* String: stringa racchiusa tra (")
* String: stringa racchiusa tra (")


Una parola chiave importante è <b>Option</b> che viene utilizzata per settare particolari opzioni di un componente del server (tastiera, mouse, monitor, scheda grafica...).  
Una parola-chiave importante è <b>Option</b> che viene utilizzata per settare particolari opzioni di un componente del server (tastiera, mouse, monitor, scheda grafica, ecc.).  
<b>Option</b> è 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.
<b>Option</b> è 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:
Molto sinteticamente, per comprenderne il funzionamento, si legga questo esempio preso dal man:


Example: Le seguenti opzioni sono equivalenti:
Esempio: Le seguenti opzioni sono equivalenti:
<pre>
<pre>
Option "Accel"  "Off"
Option "Accel"  "Off"
Riga 160: Riga 157:


===ServerLayout Section===
===ServerLayout Section===
La sezione ServerLayout è lo strato principale di tutto il file xorg.conf. Essa serve a raggruppare i dispositivi di input/output (e alcune delle loro caratteristiche fondamentali) che verranno utilizzate all'interno della sessione corrente.
La sezione ServerLayout è il livello principale di tutto il file <code>xorg.conf</code>. Essa serve a raggruppare i dispositivi di input/output (e alcune delle loro caratteristiche fondamentali) che verranno utilizzati all'interno della sessione corrente.
E' possibile avere più sezioni ServerLayout. Il motivo fondamentale è semplice: pensiamo ad una sessione multiutente su di uno stesso computer. Ogni utente ha sicuramente mouse e tastiera "personali" nonchè uno schermo "personale", e quindi è necessario avviare diverse sessioni che utilizzano un ServerLayout (e cioè una configurazione di Xorg) diverso per ogni utente.
È possibile avere più sezioni ServerLayout. Il motivo fondamentale è semplice: pensiamo ad una sessione di tre utenti su di uno stesso computer. A parte certi dispositivi che possono essere condivisi (come ad esempio la scheda grafica) sicuramente ogni utente ha una tastiera, un mouse e uno schermo "personali". Quindi questi dispositivi personali, in generale, avranno caratteristiche differenti e allora è necessario definire nel file di configurazione 3 diverse sezioni per ogni dispositivo (3 per la tastiera, 3 per il mouse, 3 per lo schermo). A questo punto è necessario definire 3 sezioni ServerLayout in modo tale che si raggruppino, per ogni utente, il proprio mouse, la propria tastiera e il proprio schermo. Facendo così, si permette ad ogni utente di avere una sessione personale e funzionante con i propri dispositivi. Infine, come spiegato altrove, se un utente vuol partire con una propria sezione ServerLayout basta che utilizza il comando: <pre>Xorg -layout nome_server_layout</pre>


Quindi principalmente in ServerLayout andiamo a dire al server X che l'utente U utilizzi la tastiera A, il mouse B, lo schermo C e la scheda video D per la sua sessione e successivamente, nelle altre sezioni, specifichiamo in modo dettagliato cosa si intende per tastiera A, mouse B, ecc.
(Nota: ovviamente se, per esempio, due utenti hanno tastiere diverse ma con identiche caratteristiche, allora non è necessario definire due sezioni per ogni tastiera, in quanto basta definirne una "condivisa". Lo stesso vale per le ServerLayout: se due utenti hanno tutti dispositivi diversi ma con identiche caratteristiche è sempre necessario definire solamente una sezione ServerLayout).


Introduciamo ora alcuni concetti fondamentali riguardanti i Device che saranno utili anche in seguito. Un device è l'astrazione di un dispositivo hardware (tastiera, mouse, schermo...) al quale il sistema operativo fornisce accesso mediante un driver.
Quindi principalmente in ServerLayout andiamo a dire al server X che l'utente U utilizza la tastiera A, il mouse B, lo schermo C e la scheda video D per la sua sessione e successivamente, nelle altre sezioni, specifichiamo in modo dettagliato cosa si intende per tastiera A, mouse B, ecc.
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 quelle tastiere è una CoreKeyboard e quale mouse è un CorePointer. Indicando queste due opzioni (nei modi che vedremo di seguito) non facciamo nient'altro che stabilire quale tastiera e quale mouse utilizzeremo per la nostra sessione. E' possibile cambiare "dinamicamente" (con alcune opzioni del programma xorg) la corekeyboard (o la corepointer) cambiando quindi di conseguenza la tastiera (o il mouse) utilizzato nella sessione corrente. 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. Tornando all'esempio di prima, la tastiera A e il mouse B per un certo utente sono dei dispositivi di input "core".
 
Introduciamo ora alcuni concetti fondamentali riguardanti i Device che saranno utili anche in seguito. Un device è l'astrazione di un dispositivo hardware (tastiera, mouse, schermo, ecc.) 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 elencati, 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 utilizzarne solo una coppia alla volta. Quindi c'è bisogno di definire quale di quelle tastiere è una <b>CoreKeyboard</b> e quale mouse è un <b>CorePointer</b>. Indicando queste due opzioni (nei modi che vedremo di seguito) non facciamo altro che stabilire quale tastiera e quale mouse utilizzeremo per la nostra sessione. È possibile cambiare "dinamicamente" (con alcune opzioni del programma xorg) la corekeyboard (o la corepointer) cambiando quindi di conseguenza la tastiera (o il mouse) utilizzato nella sessione corrente. Questo discorso è utile soprattutto in presenza di una sessione multiutente su di una stessa macchina: ogni sessione avrà una corekeyboard diversa e quindi ogni utente potrà utilizzare, indipendentemente dagli altri, la sua tastiera. Tornando all'esempio di prima, la tastiera A e il mouse B per un certo utente sono dei dispositivi di input "core".
(Vedremo successivamente come specificare che un dispositivo di input è "core" o "primary").
(Vedremo successivamente come specificare che un dispositivo di input è "core" o "primary").


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.
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.
(Una nota fondamentale: ogni dispositivo (tastiera, mouse, schermo, scheda grafica) deve avere una relativa sezione ben definita).


E' importante sapere che è possibile anche non avere una sezione ServerLayout: in questo caso verranno scelti un singolo schermo "attivo" e la coppia di core input device.
Una nota fondamentale: '''ogni dispositivo (tastiera, mouse, schermo, scheda grafica) deve avere una relativa sezione ben definita'''; questo significa, per esempio, che se abbiamo un computer con due tastiere c'è bisogno della presenza di due sezioni che le descrivano.
 
È importante sapere che è possibile non avere una sezione ServerLayout: in questo caso verranno scelti il primo schermo "attivo" e la coppia di core input device.
(Se non è chiaro questo passaggio basta avere pazienza e leggere di sotto, dove verrà spiegato il concetto di "attivo")
(Se non è chiaro questo passaggio basta avere pazienza e leggere di sotto, dove verrà spiegato il concetto di "attivo")


Riga 186: Riga 186:
</pre>
</pre>


Ogni sezione ServerLayout deve avere un Identifier e almeno uno Screen. Lo <code>screen-num</code> (opzionale) è utilizzato nel caso abbiate bisogno di schermi multipli (più in fondo ho segnalato un link che approfondisce questo aspetto).
Ogni sezione ServerLayout deve avere un Identifier e almeno uno Screen. Lo <code>screen-num</code> (opzionale) è utilizzato nel caso abbiate bisogno di schermi multipli (in fondo ho segnalato un link che approfondisce questo aspetto).
Ovviamente bisogna mantenere una certa coerenza con le sezioni successive (ad esempio: lo <code>screen-id</code> deve essere l'Identifier di una sezione Screen, così come l'<code>idev-id</code> deve essere un identifier di un certa sezione InputDevice).
Ovviamente bisogna mantenere una certa coerenza con le sezioni successive (ad esempio: lo <code>screen-id</code> deve essere l'Identifier di una sezione Screen, così come l'<code>idev-id</code> deve essere un identifier di un certa sezione InputDevice).


L'Identifier della sezione ServerLayout è un nome che la identifica univocamente, inoltre è proprio questo nome che viene utilizzato dal programma xorg (con l'opzione <code>-layout</code>) per avviare X con una particolare configurazione.
L'Identifier della sezione ServerLayout è un nome che la identifica univocamente, inoltre è proprio questo nome che viene utilizzato dal programma Xorg (con l'opzione <code>-layout</code>) per avviare X con una particolare configurazione.


All'interno della ServerLayout è possibile indicare quali InputDevice sono primari, in questo modo:
All'interno della ServerLayout è possibile indicare quali InputDevice sono primari, in questo modo:
Riga 222: Riga 222:


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).
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).
Una nota interessante: per qualche ragione (vedi ***) potreste avere il bisogno di settare esplicitamente il layout della tastiera. Per farlo basta aggiungere, nella sezione InputDevice dedicata alla tastiera, la seguente opzione:
<pre>Option "XkbLayout" "it"</pre>
dove <code>it</code> indica il layout italiano.
(***) E' capitato, dopo l'installazione dei driver proprietari nvidia, che il layout della tastiera fosse impostato -in modo silente- a quello statunitense, rendendo quindi scorretta l'associazione tra tasti e caratteri.


===Device Section===
===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:
<code>xorg.conf</code> 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:
<pre>
<pre>
Section "Device"
Section "Device"
Riga 233: Riga 239:
EndSection
EndSection
</pre>
</pre>
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:
Sono obbligatorie solo le voci Identifier e Driver che funzionano come sopra. Le altre entry sono opzionali e dipendono dalla scheda grafica in questione. È utile avere a disposizione il manuale della scheda per modificarle. Ne vediamo solo alcune:


* <code>BusID "bus-id"</code>: specifica l'indirizzo (il bus location) della della scheda grafica
* <code>BusID "bus-id"</code>: specifica l'indirizzo (il bus location) della della scheda grafica;


* <code> Screen number </code>: indica quale schermo utilizzare. E' utilizzato per quelle schede video che possono gestire più di uno schermo (consiglio il link seguente per chi avesse questa necessità: [http://wiki.linuxquestions.org/wiki/Using_multiple_monitors_with_XFree86 Using multiple monitors])
* <code> Screen number </code>: indica quale schermo utilizzare. È utilizzato per quelle schede video che possono gestire più di uno schermo (consiglio i link seguenti per chi avesse questa necessità: Multiple Monitors with XFree86<sup>[[#Collegamenti esterni | [7]]]</sup> o Multiple Monitors with Nvidia<sup>[[#Collegamenti esterni | [8]]]</sup>).


===Monitor Section===
===Monitor Section===
Riga 249: Riga 255:
EndSection
EndSection
</pre>
</pre>
Può avere istanza multiple.
L'unica voce obbligatoria è Identifier. Vediamo alcune entry interessanti:
L'unica voce obbligatoria è Identifier. Vediamo alcune entry interessanti:


* <code>VendorName "vendor"</code>: opzionale, specifica il produttore del monitor
* <code>VendorName "vendor"</code>: opzionale, specifica il produttore del monitor;


* <code>ModelName "model"</code>: opzionale, indica il modello del monitor
* <code>ModelName "model"</code>: opzionale, indica il modello del monitor;


* <code>HorizSync horizsync-range</code>: indica il range della frequenza di aggiornamento orizzontale del monitor. Viene indicato come: <code>freq min - freq max</code>. Per default l'unità di misura è kHz (è possibile specificarlo in MHz o in Hz, pero' bisogna aggiungere queste unità di misura esplicitamente). Consultare il manuale del monitor per avere informazioni specifiche.
* <code>HorizSync horizsync-range</code>: indica il range della frequenza di aggiornamento orizzontale del monitor. Viene indicato come: <code>freq min - freq max</code>. Di default l'unità di misura è kHz (è possibile specificarlo in MHz o in Hz, però bisogna aggiungere queste unità di misura esplicitamente). Consultare il manuale del monitor per avere informazioni specifiche;


* <code>VertRefresh vertrefresh-range </code>: indica il range della frequenza di aggiornamento verticale supportata dello schermo. La sintassi è come sopra.
* <code>VertRefresh vertrefresh-range </code>: indica il range della frequenza di aggiornamento verticale supportata dello schermo. La sintassi è come sopra;


* <code>DisplaySize  width height</code>: opzionale, indica larghezza e altezza, espressa in millimetri, dell'area visibile dello schermo. Se viene specificata è utilizzata per calcolare i DPI dello schermo.
* <code>DisplaySize  width height</code>: opzionale, indica larghezza e altezza, espressa in millimetri, dell'area visibile dello schermo. Se viene specificata è utilizzata per calcolare i DPI dello schermo.


===Screen Section===
===Screen Section===
La Screen Section può avere istanza multiple. Ovviamente ne deve essere presente almeno una. Infatti questa sezione lega il device grafico con il monitor e quindi la sezione Device con la sezione Monitor: ciò significa che associa una certa scheda video ad un dato monitor.
La Screen Section può avere istanze multiple. Ovviamente ne deve essere presente almeno una. Infatti questa sezione lega il device grafico con il monitor e quindi la sezione Device con la sezione Monitor: ciò significa che associa una certa scheda video ad un dato monitor.
Perchè è possibile avere istanze multiple di Screen? Poichè ad esempio avendo a disposizione due schede video e due monitor possiamo scegliere, in una particolare sezione, quale combinazione usare (è la stessa ragione, quindi, per cui possono esistere più sezioni ServerLayout).
Perchè è possibile avere istanze multiple di Screen? Poichè ad esempio avendo a disposizione due schede video e due monitor possiamo scegliere, in una particolare sezione, quale combinazione usare (è la stessa ragione, quindi, per cui possono esistere più sezioni ServerLayout).
Una sezione Screen è considerata attiva se è specificata all'interno della sezione ServerLayout, oppure se viene "attivata" dal opzione <code>-screen</code> del programma xorg. Se nessuna di queste due condizioni è presente allora viene considerata "attiva" la prima sezione Screen trovata nel file xorg.conf.
Una sezione Screen è considerata attiva se è specificata all'interno della sezione ServerLayout, oppure se viene "attivata" dal opzione <code>-screen</code> del programma xorg. Se nessuna di queste due condizioni è presente allora viene considerata "attiva" la prima sezione Screen trovata nel file <code>xorg.conf</code>.
La sezione ha questo formato:
La sezione ha questo formato:
<pre>
<pre>
Riga 282: Riga 291:


I campi obbligatori sono Identifier e Device. Il valore del campo device deve essere un identifier specificato della sezione Device. Anche se non obbligatorio, è bene inserire il "monid" (ovviamente uguale a uno di quelli specificati nella sezione Monitor).
I campi obbligatori sono Identifier e Device. Il valore del campo device deve essere un identifier specificato della sezione Device. Anche se non obbligatorio, è bene inserire il "monid" (ovviamente uguale a uno di quelli specificati nella sezione Monitor).
Interessante è anche specificare la [http://en.wikipedia.org/wiki/Color_depth profondità di colore] che deve essere usata dal server per default: <code>DefaultDepth depth</code>.
Interessante è anche specificare la profondità di colore<sup>[[#Collegamenti esterni | [9]]]</sup> che deve essere usata dal server per default: <code>DefaultDepth depth</code>.
Importante è anche l'opzione seguente:
Importante è anche l'opzione seguente:
<pre>
<pre>
Option "Accel"
Option "Accel"
</pre>
</pre>
che abilità l'accelerazione hardware 2d tramite l'architettura [http://en.wikipedia.org/wiki/XFree86_Acceleration_Architecture XAA]. E' abilitata per default, ma se sono presenti dei bug nel driver XAA è necessario disabilitarla per avere un server X funzionante.
che abilita l'accelerazione hardware 2d tramite l'architettura XAA<sup>[[#Collegamenti esterni | [10]]]</sup>. È abilitata per default, ma se sono presenti dei bug nel driver XAA è necessario disabilitarla per avere un server X funzionante.


===Display Subsection===
===Display Subsection===
Abbiamo visto nel formato dello schermo che è presente la sotto-sezione Display. E' un concetto molto importante che ci permette di modificare alcune caratteristiche fondamentali.
Abbiamo visto nel formato dello schermo che è presente la sotto-sezione Display. È un concetto molto importante che ci permette di modificare alcune caratteristiche fondamentali.
Ogni Screen Section può avere diverse sotto-sezioni Display. Noi ci occuperemo del caso in cui ce ne fosse solo una (vedere man per il caso generale).
Ogni Screen Section può avere diverse sotto-sezioni Display. Noi ci occuperemo del caso in cui ce ne fosse solo una (vedere man per il caso generale).
Questa sottosezione è opzionale e quando non viene specificata si utilizzeranno dei valori rilevati automaticamente.
Questa sottosezione è opzionale e quando non viene specificata si utilizzeranno dei valori rilevati automaticamente.
Riga 303: Riga 312:
Vediamo nei dettagli:
Vediamo nei dettagli:


* <code>Depth  depth</code>: il valore di <code>Depth</code> deve essere uguale a quello specificato nella sezione Display (di solito è 24).
* <code>Depth  depth</code>: il valore di <code>Depth</code> deve essere uguale a quello specificato nella sezione Display (di solito è 24);
* <code>Modes "mode-name"</code>: è una voce opzionale, ma molto importante. Infatti in questo modo possiamo indicare le risoluzione dello schermo: <code>Modes "1024x768"</code>. Inoltre è lecito scrivere: <code>Modes "1024x768" "800x600" "640x480"</code>, cioè abbiamo indicato varie risoluzioni. Quella di default è la prima. E' possibile passare alle successive con <code>Ctrl+Alt+Keypad_Plus</code> e tornare indietro con <code>Ctrl+Alt+Keypad_Minus</code>.
* <code>Modes "mode-name"</code>: è una voce opzionale, ma molto importante. Infatti in questo modo possiamo indicare le risoluzione dello schermo: <code>Modes "1024x768"</code>. Inoltre è lecito scrivere: <code>Modes "1024x768" "800x600" "640x480"</code>, cioè abbiamo indicato varie risoluzioni. Quella di default è la prima. È possibile passare alle successive con <code>Ctrl+Alt+Keypad_Plus</code> e tornare indietro con <code>Ctrl+Alt+Keypad_Minus</code>.


===Files Section===
===Files Section===
Questa sezione (opzionale) viene utilizzata per specificare delle directory richieste dal server. Alcune delle entry di Files sono:
Questa sezione (opzionale) viene utilizzata per specificare delle directory richieste dal server. Alcune delle entry di Files sono:


* <code>FontPath "path"</code>: imposta il percorso (assoluto) per i font utilizzati dal server grafico. Per specificare più cammini è possibile utilizzare una delle seguenti soluzioni: <pre>FonthPath "path_1","path_2",...,"path_n"</pre> 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).
* <code>FontPath "path"</code>: imposta il percorso (assoluto) per i font utilizzati dal server grafico. Per specificare più percorsi è possibile utilizzare una delle seguenti soluzioni: <pre>FonthPath "path_1","path_2",...,"path_n"</pre> È 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);


* <code>RGBPath "path"</code>: 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 <code>(139, 0, 0)</code> DarkRed . Se non è specificato viene cercato in <code>/usr/share/X11/rgb</code>  (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
* <code>RGBPath "path"</code>: 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 <code>(139, 0, 0)</code> DarkRed . Se non è specificato viene cercato in <code>/usr/share/X11/rgb</code>  (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;


* <code>ModulePath "path"</code>: imposta il percorso (assoluto) per i moduli utilizzati da Xorg. La sintassi per le path multiple è identica a quella già discussa.
* <code>ModulePath "path"</code>: imposta il percorso (assoluto) per i moduli utilizzati da Xorg. La sintassi per le path multiple è identica a quella già discussa.


===Module Section===
===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 <b>Load</b> in questo modo:
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 <b>Load</b> in questo modo:
<pre>
<pre>
Load "modulename"
Load "modulename"
Riga 326: Riga 335:
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:
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:


<code>/usr/lib/modules/fonts</code> e <code>/usr/lib/modules/extensions</code>.
<code>/usr/lib/modules/fonts</code> e <code>/usr/lib/modules/extensions</code>


oppure
oppure
Riga 332: Riga 341:
<code>/usr/lib/xorg/modules/fonts</code> e <code>/usr/lib/xorg/modules/extensions</code>
<code>/usr/lib/xorg/modules/fonts</code> e <code>/usr/lib/xorg/modules/extensions</code>


Il modulo per i [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts font bitmap] è caricato automaticamente.
Il modulo per i font bitmap<sup>[[#Collegamenti esterni | [11]]]</sup> è caricato automaticamente.
E' importante che venga caricato il modulo "extmod" perchè contiene alcune estensioni molto utili come la [http://en.wikipedia.org/wiki/Shape_extension Shape Extension] oppure la [http://en.wikipedia.org/wiki/X_video_extension X Video Extension].
È importante che venga caricato il modulo "extmod" perchè contiene alcune estensioni molto utili come la Shape Extension<sup>[[#Collegamenti esterni | [12]]]</sup> oppure la X Video Extension<sup>[[#Collegamenti esterni | [13]]]</sup>.
 
==Collegamenti esterni==
[1] [http://www.x.org/wiki/ Sito ufficiale di Xorg]<br/>
 
[2] [http://it.wikipedia.org/wiki/X.Org Cenni su Xorg]<br/>


==Link Utili==
[3] [http://it.wikipedia.org/wiki/X_Window_System X Window System]<br/>
* [http://www.x.org/wiki/ Sito ufficiale di Xorg]


* [http://it.wikipedia.org/wiki/X.Org Cenni su Xorg]
[4] [https://it.wikipedia.org/wiki/Protocolli_e_architettura_di_X_Window_System Protocolli e Architettura dell'X Window System]<br/>


* [http://it.wikipedia.org/wiki/X_Window_System X Window System]
[5] [http://opensource.org/licenses/mit-license.php licenza MIT]<br/>


* [http://it.wikipedia.org/wiki/X_Window_System_protocolli_e_architettura Protocolli e Architettura dell'X Window System]
[6] [http://en.wikipedia.org/wiki/Font_rasterization font rasterization]<br/>
 
[7] [http://wiki.linuxquestions.org/wiki/Using_multiple_monitors_with_XFree86 Multiple Monitors with XFree86]<br/>
 
[8] [http://wiki.linuxquestions.org/wiki/Multiple_Monitors_with_Nvidia Multiple Monitors with Nvidia]<br/>
 
[9] [http://en.wikipedia.org/wiki/Color_depth profondità di colore]<br/>
 
[10] [http://en.wikipedia.org/wiki/XFree86_Acceleration_Architecture XAA]<br/>
 
[11] [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts font bitmap]<br/>
 
[12] [http://en.wikipedia.org/wiki/Shape_extension Shape Extension]<br/>
 
[13] [http://en.wikipedia.org/wiki/X_video_extension X Video Extension]<br/>


==Dedica==
==Dedica==
Riga 348: Riga 375:
questo è per te cuore mio, perché, a differenza tua, io non sono capace d'altro.
questo è per te cuore mio, perché, a differenza tua, io non sono capace d'altro.


{{Autori
|Autore=[[Utente:Np2k|np2k]] 22/03/2010
}}


Autore: [[Utente:Np2k|np2k]], 22/03/2010
[[Category: Xorg]]
 
[[Category: Sistema]]

Versione attuale delle 00:25, 19 dic 2015

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"

Che cos'è

Xorg è il server dell'X Window System, il gestore grafico dei sistemi Unix, sviluppato da X.Org Foundation [1], rilasciato sotto licenza MIT [5] (software libero). Grazie al diffondersi di applicazioni open source di un certo livello, come OpenOffice e TheGimp, X viene supportato, in modo secondario, anche da sistemi operativi proprietari (come Windows e Mac OS X).

Si basa su un'intelligente architettura client/server, in cui il server X in esecuzione su un computer comunica con gli altri programmi che utilizziamo normalmente, i quali fungono da client. Il server si colloca tra l'utente e il programma client: accetta, quindi, richieste di output grafico dai client (disegnare finestre in una certa posizione) mostrandole all'utente, e riceve input dall'utente (inserimento di testo in una textbox, click del mouse su un certo pulsante ecc.) trasmettendoli ai programmi client.

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 risiedesse 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 verificarne la posizione sul tuo computer, Ctrl+C per fermare la ricerca), che permette una configurazione precisa e accurata dell'X Server. Una caratteristica fondamentale di xorg.conf è che permette di associare ad ogni device, non solo determinate proprietà (come ad esempio, frequenza orizzontale dello schermo, risoluzione, ecc.) ma anche il driver specifico da utilizzare. Dunque, 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 (dalla 7.3) Xorg si autoconfigura rendendo, 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é potremo avere così un ambiente completamente personalizzato e messo a punto in ogni particolare.

Avvisi e precauzioni

Alcuni avvisi e qualche precauzione prima d'iniziare.

Avviso 1: Questa guida non ha l'obiettivo di spiegare ogni dettaglio del file xorg.conf, anche se è abbastanza particolareggiata. Per questa ragione è ovvio che possiate trovare in alcuni file di configurazione delle voci che non abbiamo descritto. Leggete man xorg.conf e man xorg se ne avete la necessità.

Avviso 2: È possibile che non abbiate il file xorg.conf (come già spiegato). Basta crearne uno (semmai in /etc/X11/xorg.conf), per utilizzare la configurazione descritta in questo al posto di quella automatica.

Precauzione 1: prima di modificare il file xorg.conf è bene farne un backup. Cerchiamo prima il percorso completo del file (come spiegato sopra) poi digitiamo (supponendo che quella indicata sia la directory giusta):

$ cp /etc/X11/xorg.conf ~/xorg_backup.conf

Precauzione 2: possiamo generare un file xorg.conf basato sull'autodetect della nostra configurazione. Riavviamo il sistema in single-mode user, eseguiamo l'accesso come root e diamo:

# Xorg -configure

verrà creato nella directory corrente un file (di solito xorg.conf.new) che possiamo utilizzare non solo per ripristinare alcuni errori dovuti a modifiche accidentali, ma anche per iniziare a far pratica sui concetti che esporremo. Ricordiamo però che l'autodetect e la conseguente creazione del file xorg.conf in automatico può portare a dei problemi causati da un rilevamento erroneo delle componenti.

Com'è fatto

A titolo d'esempio vediamo come si presenta un file xorg.conf:

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
    RgbPath      "/etc/X11/rgb"
    ModulePath   "/usr/lib/xorg/modules"
    FontPath     "/usr/share/fonts/X11/misc"
    FontPath     "/usr/share/fonts/X11/cyrillic"
EndSection

Section "Module"
    Load           "dbe"
    Load           "extmod"
    Load           "type1"
    Load           "freetype"
    Load           "glx"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Si cerchi di leggerlo con attenzione: ovviamente sarà tutto molto complicato, ma è bene prendere confidenza con quella struttura. Alla fine di questa guida spero che le cose siano più chiare.

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)

  • ServerLayout: Livello principale del file
  • InputDevice: Descrizione dei device di input (mouse, tastiera, ecc.)
  • 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
  • Files: Percorsi di file particolarmente utili (database RGB, caratteri, moduli da caricare, ecc.)
  • 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 [6], ecc.)
  • DRI: DRI-specific configuration
  • Vendor: Vendor-specific configuration

La sezione ServerLayout è il livello più alto, serve a tenere uniti i device di input/output utilizzati in una sessione. I device di input sono descritti nella sezione InputDevice. Mentre i device di output (quali monitor e 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, ecc.). 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 comprenderne il funzionamento, si legga questo esempio preso dal man:

Esempio: Le seguenti opzioni sono equivalenti:

Option "Accel"   "Off"

Option "NoAccel"

Option "NoAccel" "On"

Option "Accel"   "false"

Option "Accel"   "no"

ServerLayout Section

La sezione ServerLayout è il livello principale di tutto il file xorg.conf. Essa serve a raggruppare i dispositivi di input/output (e alcune delle loro caratteristiche fondamentali) che verranno utilizzati all'interno della sessione corrente.

È possibile avere più sezioni ServerLayout. Il motivo fondamentale è semplice: pensiamo ad una sessione di tre utenti su di uno stesso computer. A parte certi dispositivi che possono essere condivisi (come ad esempio la scheda grafica) sicuramente ogni utente ha una tastiera, un mouse e uno schermo "personali". Quindi questi dispositivi personali, in generale, avranno caratteristiche differenti e allora è necessario definire nel file di configurazione 3 diverse sezioni per ogni dispositivo (3 per la tastiera, 3 per il mouse, 3 per lo schermo). A questo punto è necessario definire 3 sezioni ServerLayout in modo tale che si raggruppino, per ogni utente, il proprio mouse, la propria tastiera e il proprio schermo. Facendo così, si permette ad ogni utente di avere una sessione personale e funzionante con i propri dispositivi. Infine, come spiegato altrove, se un utente vuol partire con una propria sezione ServerLayout basta che utilizza il comando:

Xorg -layout nome_server_layout

(Nota: ovviamente se, per esempio, due utenti hanno tastiere diverse ma con identiche caratteristiche, allora non è necessario definire due sezioni per ogni tastiera, in quanto basta definirne una "condivisa". Lo stesso vale per le ServerLayout: se due utenti hanno tutti dispositivi diversi ma con identiche caratteristiche è sempre necessario definire solamente una sezione ServerLayout).

Quindi principalmente in ServerLayout andiamo a dire al server X che l'utente U utilizza la tastiera A, il mouse B, lo schermo C e la scheda video D per la sua sessione e successivamente, nelle altre sezioni, specifichiamo in modo dettagliato cosa si intende per tastiera A, mouse B, ecc.

Introduciamo ora alcuni concetti fondamentali riguardanti i Device che saranno utili anche in seguito. Un device è l'astrazione di un dispositivo hardware (tastiera, mouse, schermo, ecc.) 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 elencati, 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 utilizzarne solo una coppia alla volta. Quindi c'è bisogno di definire quale di quelle tastiere è una CoreKeyboard e quale mouse è un CorePointer. Indicando queste due opzioni (nei modi che vedremo di seguito) non facciamo altro che stabilire quale tastiera e quale mouse utilizzeremo per la nostra sessione. È possibile cambiare "dinamicamente" (con alcune opzioni del programma xorg) la corekeyboard (o la corepointer) cambiando quindi di conseguenza la tastiera (o il mouse) utilizzato nella sessione corrente. Questo discorso è utile soprattutto in presenza di una sessione multiutente su di una stessa macchina: ogni sessione avrà una corekeyboard diversa e quindi ogni utente potrà utilizzare, indipendentemente dagli altri, la sua tastiera. Tornando all'esempio di prima, la tastiera A e il mouse B per un certo utente sono dei dispositivi di input "core". (Vedremo successivamente come specificare che un dispositivo di input è "core" o "primary").

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.

Una nota fondamentale: ogni dispositivo (tastiera, mouse, schermo, scheda grafica) deve avere una relativa sezione ben definita; questo significa, per esempio, che se abbiamo un computer con due tastiere c'è bisogno della presenza di due sezioni che le descrivano.

È importante sapere che è possibile non avere una sezione ServerLayout: in questo caso verranno scelti il primo schermo "attivo" e la coppia di core input device. (Se non è chiaro questo passaggio basta avere pazienza e leggere di sotto, dove verrà spiegato il concetto di "attivo")

Il formato della sezione ServerLayout è:

Section "ServerLayout"
   Identifier "name"
   Screen screen-num "screen-id"
   ...
   InputDevice "idev-id"
   ...
   options

Ogni sezione ServerLayout deve avere un Identifier e almeno uno Screen. Lo screen-num (opzionale) è utilizzato nel caso abbiate bisogno di schermi multipli (in fondo ho segnalato un link che approfondisce questo aspetto). Ovviamente bisogna mantenere una certa coerenza con le sezioni successive (ad esempio: lo screen-id deve essere l'Identifier di una sezione Screen, così come l'idev-id deve essere un identifier di un certa sezione InputDevice).

L'Identifier della sezione ServerLayout è un nome che la identifica univocamente, inoltre è proprio questo nome che viene utilizzato dal programma Xorg (con l'opzione -layout) per avviare X con una particolare configurazione.

All'interno della ServerLayout è possibile indicare quali InputDevice sono primari, in questo modo:

Section "ServerLayout"
   Identifier "name"
   ...
   ...
   InputDevice "keyboard0" "CoreKeyboard"

dove keyboard0 è l'Identifier di una InputDevice Section dedicata alla tastiera che vogliamo utilizzare per la sessione corrente. Lo stesso vale per i pointer. Vedremo in seguito altri modi per dire al server X che un certo dispositivo deve essere considerato primario.

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).

Una nota interessante: per qualche ragione (vedi ***) potreste avere il bisogno di settare esplicitamente il layout della tastiera. Per farlo basta aggiungere, nella sezione InputDevice dedicata alla tastiera, la seguente opzione:

Option "XkbLayout" "it"

dove it indica il layout italiano.

(***) E' capitato, dopo l'installazione dei driver proprietari nvidia, che il layout della tastiera fosse impostato -in modo silente- a quello statunitense, rendendo quindi scorretta l'associazione tra tasti e caratteri.

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 Driver che funzionano come sopra. Le altre entry sono opzionali e dipendono dalla scheda grafica in questione. È utile avere a disposizione 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. È utilizzato per quelle schede video che possono gestire più di uno schermo (consiglio i link seguenti per chi avesse questa necessità: Multiple Monitors with XFree86 [7] o Multiple Monitors with Nvidia [8]).

Monitor Section

Warning.png ATTENZIONE
Parametri sbagliati potrebbero danneggiare irreversibilmente il vostro monitor: leggete la documentazione dello schermo per essere sicuri di inserire valori compatibili.


La sezione Monitor, che descrive le particolarità dello schermo, ha questo formato:

Section "Monitor"
   Identifier "name"
   entries
   ...
EndSection

Può avere istanza multiple.

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. Di default l'unità di misura è kHz (è possibile specificarlo in MHz o in Hz, però bisogna aggiungere queste unità di misura esplicitamente). 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.

Screen Section

La Screen Section può avere istanze multiple. Ovviamente ne deve essere presente almeno una. Infatti questa sezione lega il device grafico con il monitor e quindi la sezione Device con la sezione Monitor: ciò significa che associa una certa scheda video ad un dato monitor. Perchè è possibile avere istanze multiple di Screen? Poichè ad esempio avendo a disposizione due schede video e due monitor possiamo scegliere, in una particolare sezione, quale combinazione usare (è la stessa ragione, quindi, per cui possono esistere più sezioni ServerLayout). Una sezione Screen è considerata attiva se è specificata all'interno della sezione ServerLayout, oppure se viene "attivata" dal opzione -screen del programma xorg. Se nessuna di queste due condizioni è presente allora viene considerata "attiva" la prima sezione Screen trovata nel file xorg.conf. La sezione ha questo formato:

Section "Screen"
   Identifier "name"
   Device     "devid"
   Monitor    "monid"
   entries
   ...
   SubSection "Display"
      entries
      ...
   EndSubSection
   ...
EndSection

I campi obbligatori sono Identifier e Device. Il valore del campo device deve essere un identifier specificato della sezione Device. Anche se non obbligatorio, è bene inserire il "monid" (ovviamente uguale a uno di quelli specificati nella sezione Monitor). Interessante è anche specificare la profondità di colore [9] che deve essere usata dal server per default: DefaultDepth depth. Importante è anche l'opzione seguente:

Option "Accel"

che abilita l'accelerazione hardware 2d tramite l'architettura XAA [10]. È abilitata per default, ma se sono presenti dei bug nel driver XAA è necessario disabilitarla per avere un server X funzionante.

Display Subsection

Abbiamo visto nel formato dello schermo che è presente la sotto-sezione Display. È un concetto molto importante che ci permette di modificare alcune caratteristiche fondamentali. Ogni Screen Section può avere diverse sotto-sezioni Display. Noi ci occuperemo del caso in cui ce ne fosse solo una (vedere man per il caso generale). Questa sottosezione è opzionale e quando non viene specificata si utilizzeranno dei valori rilevati automaticamente. Il formato è:

SubSection "Display"
   Depth  depth
   entries
   ...
EndSubSection

Vediamo nei dettagli:

  • Depth depth: il valore di Depth deve essere uguale a quello specificato nella sezione Display (di solito è 24);
  • Modes "mode-name": è una voce opzionale, ma molto importante. Infatti in questo modo possiamo indicare le risoluzione dello schermo: Modes "1024x768". Inoltre è lecito scrivere: Modes "1024x768" "800x600" "640x480", cioè abbiamo indicato varie risoluzioni. Quella di default è la prima. È possibile passare alle successive con Ctrl+Alt+Keypad_Plus e tornare indietro con Ctrl+Alt+Keypad_Minus.

Files Section

Questa sezione (opzionale) viene utilizzata per specificare delle directory richieste dal server. Alcune delle entry di Files sono:

  • FontPath "path": imposta il percorso (assoluto) per i font utilizzati dal server grafico. Per specificare più percorsi è possibile utilizzare una delle seguenti soluzioni:
    FonthPath "path_1","path_2",...,"path_n"
    È 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 [11] è caricato automaticamente. È importante che venga caricato il modulo "extmod" perchè contiene alcune estensioni molto utili come la Shape Extension [12] oppure la X Video Extension [13].

Collegamenti esterni

[1] Sito ufficiale di Xorg

[2] Cenni su Xorg

[3] X Window System

[4] Protocolli e Architettura dell'X Window System

[5] licenza MIT

[6] font rasterization

[7] Multiple Monitors with XFree86

[8] Multiple Monitors with Nvidia

[9] profondità di colore

[10] XAA

[11] font bitmap

[12] Shape Extension

[13] X Video Extension

Dedica

A Serena: questo è per te cuore mio, perché, a differenza tua, io non sono capace d'altro.




Guida scritta da: np2k 22/03/2010 Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized