<!--
$Id: x11.sgml,v 1.6 2003/08/09 13:11:51 rionda Exp $
-->
<chapter>
  <title>XFree86</title>
  <para>Il server grafico X svolge un ruolo ormai fondamentale:
  fornisce la base per l'interfaccia grafica delle
  applicazioni. Nonostante sia estremamente avanzato e supporti le
  schede video di ultimissima generazione, ha un architettura che
  potrebbe sembrare "antiquata" alla maggior parte di coloro che non
  lo conoscono bene. &Egrave; quasi naturale imbattersi in problemi di
  vario genere durante l'utilizzo di questo sistema a finestre.</para>
  <sect1 id='Xssh'>
     <title>Come posso usare le applicazioni X via SSH?</title>   
     <para>Chiamiamo <hostid>locale</hostid> la macchina su
     cui stiamo lavorando e <hostid>remoto</hostid> la
     macchina a cui ci collegheremo e che sulla quale &egrave;
     installata l'applicazione che vogliamo visualizzare su
     <hostid>locale</hostid>. Per cominciare bisogna dire
     a <hostid>locale</hostid> di accettare le richieste di 
     <hostid>remoto</hostid>:
     <screen>locale:~&prompt.user; <userinput>xhost +remoto</userinput></screen>      
     Ora ci colleghiamo via SSH a <hostid>remoto</hostid> e,
     dopo aver effettuato il login, esportiamo la variabile
     <literal>DISPLAY</literal> in modo che punti al primo
     display di <hostid>locale</hostid>:
     <screen>remoto:~&prompt.user; <userinput>export DISPLAY=locale:0</userinput></screen>
     oppure, se usiamo una shell C:
     <screen>remoto:~&prompt.user; <userinput>setenv DISPLAY locale:0</userinput></screen>
     Ora, dopo aver lanciato X su <hostid>locale</hostid>,
     potremo lanciare l'applicazione da
     <hostid>remoto</hostid> e vederla sullo schermo di 
     <hostid>locale</hostid>.</para>
     <para>Pu&ograve; risultare utile anche un altro metodo
     utilizzato molte volte, specialmente se &egrave; presente un
     firewall che ci consente di utilizzare solo la porta 22, tipica
     di SSH. Su <hostid>remoto</hostid>, apriamo
     <filename>/etc/ssh/sshd_config</filename>, il file di
     configurazione di <application>sshd</application> e inseriamo la
     riga
     <screen>X11Forwarding yes
     </screen>
     Fatto ci&ograve; aggiungiamo la riga 
     <screen>ForwardX11 yes
     </screen>
     al file di configurazione
     <filename>/etc/ssh/ssh_config</filename> di
     <hostid>locale</hostid> se vogliamo valga per tutti gli utenti,
     oppure possiamo usare il file
     <filename>$HOME/.ssh/config</filename> per solo un
     utente. Eseguiamo ora X su <hostid>locale</hostid> e, da
     <hostid>remoto</hostid>, lanciamo l'applicazione che vogliamo far
     apparire sul monitor di <hostid>locale</hostid>.</para>
  </sect1>  
  <sect1 id='nvidia'>
     <title>Come installo i driver proprietari per le schede
     grafiche NVIDIA&reg;?</title>
     <para>A partire dal Novembre 2002, NVIDIA&reg; ha cominciato
     a distribuire i driver per l'accelerazione grafica delle
     sue schede video su FreeBSD. Effettivamente c'era bisogno
     di questi driver, perch&eacute; quelli compresi in XFree86
     non erano soddisfacenti, specialmente per un uso
     multimediale del sistema. Purtroppo questi driver sono
     rilasciati sotto licenza proprietaria e solo in formato
     binario.
     <warning>
       <para>I driver binari NVIDIA&reg; sono disponibili anche nel
       port <filename>x11/nvidia-drivers</filename></para>
     </warning>
     Dopo aver scaricato il pacchetto dal sito della
     <ulink URL='http://www.nvidia.com'>NVIDIA&reg;</ulink>, 
     possiamo procedere con la decompressione e l'installazione:
     <screen>&prompt.root;<userinput>tar zxf NVIDIA_FreeBSD-X.Y-WZKH.tar.gz</userinput>
&prompt.root;<userinput>cd NVIDIA_FreeBSD-X.Y-WZKH</userinput>
&prompt.root;<userinput>make setup</userinput>
     </screen>
     L'ultimo comando compila i sorgenti, creando cos&igrave; un 
     modulo per il kernel, installandolo e caricandolo
     subito. Crea inoltre il device
     <filename>/dev/nvidia</filename>, rimuove le librerie OpenGL
     che potrebbero creare conflitto con quelle NVIDIA OpenGL e
     modifica il file <filename>/boot/loader.conf</filename> in
     modo che carichi all'avvio del sistema il modulo dei driver
     e quello per la compatibilit&agrave; dei binari Linux
     qualora non avessimo il supporto integrato nel kernel. Dopo
     l'installazione bisogna sistemare anche la configurazione di
     X tramite il file <filename>/etc/XF86Config</filename> e
     precisamente la sezione <literal>"Modules"</literal> e
     quella <literal>"Device"</literal> corrispondente al device
     NVIDIA. Importante nella sezione <literal>"Modules</literal>
     &egrave; la riga: 
     <screen>Load  "glx"
     </screen>
     mentre nella sezione <literal>"Device"</literal> della
     scheda video bisogna sostuire la riga
     <screen>Driver      "nv"
     </screen>
     con
     <screen>Driver      "nvidia"
     </screen>
     Ora potremo utilizzare tranquillamente i driver NVIDIA&reg;
     ufficiali, per&ograve; occorre fare un discorso a parte
     riguardo al driver per l'AGP, infatti si possono usare si
     quelli forniti da NVIDIA&reg; sia quelli nativi di
     FreeBSD. Per specificare la nostra scelta dobbiamo
     aggiungere una riga nella stessa sezione
     <literal>"Device"</literal> di cui sopra:
     <screen>Option "NvAgp" "0"</screen>
     se non vogliamo usare alcun driver AGP,
     <screen>Option "NvAgp" "1"</screen>
     per usare il driver NVIDIA&reg;,
     <screen>Option "NvAgp" "2"</screen>
     per utilizzare il driver fornito da FreeBSD e infine
      <screen>Option "NvAgp" "3"</screen>
     se vogliamo provare prima a utilizzare il driver di FreeBSD
     e poi, in caso il tentativo fallisca, quello
     ufficiale. Solitamente i driver AGP NVIDIA&reg; vengono preferiti
     a quelli nativi. Qualora per&ograve; si scelga di utilizzare
     quelli nativi occorre ricompilare il modulo con alcune
     opzioni particolari e caricare il modulo
     <filename>agp.ko</filename> all'avvio del sistema. Per
     maggiori informazioni si veda il file
     <filename>README</filename> compreso nella directory
     <filename>NVIDIA_FreeBSD-X.Y-WZKH/doc</filename>.</para>
  </sect1>
  <sect1 id='mousewheel'>
     <title>Come posso usare la rotella del mouse?</title>
     <para>Ormai quasi tutti i mouse in commercio sono dotati della
     rotellina centrale per scorrere verticalmente la schermata,
     inoltre pu&ograve; essere usata anche come pulsante centrale del
     mouse. Per utilizzare questo comodo dispositivo sotto X
     (ricordiamo che per effettuare lo scroll in console &egrave; 
     sufficiente premere <keycap>Scroll Lock</keycap> e utilizzare le
     frecce oppure <keycap>PgUP</keycap> e <keycap>PgDOWN</keycap>)
     bisogna avere la sezione <literal>"Device"</literal> di
     <filename>/etc/XF86Config</filename> simile alla seguente:
     <screen>Section "InputDevice"
       Identifier  "Mouse0"
       Driver      "mouse"
       Option      "Protocol" "auto"
       Option      "Device" "/dev/sysmouse"
       Option      "ZAxisMapping" "4 5"
     </screen>
     La riga fondamentale &egrave;, facile da intuire,
     l'ultima.</para>
  </sect1> 
  <sect1 id='XConf'>
     <title>Come configuro il server grafico X?</title>
     <para>Il server grafico X fornisce il supporto per l'interfaccia
     grafica a FreeBSD (e a tutti gli
     <acronym>UNIX</acronym>&reg;). Quello usato principalmente
     sugli <acronym>UNIX</acronym>&reg; non commerciali &egrave;
     <application>XFree86</application>, discendente libero della
     sezione X386 del progetto X11 (<footnote><para>In inglese, la
     pronuncia di <emphasis>XFree86</emphasis> &egrave; molto simile
     a quella di <emphasis>X386</emphasis>. Effettivamente i
     fondatori del progetto XFree86, lavoravano alla sezione
     X386 di X11.</para></footnote>). Le versioni di FreeBSD successive alla
     4.8-RELEASE contengono XFree86-4.3.0 installabile dai ports e una
     versione precedente può essere installata in fase di
     configurazione del sistema. Il meta-port di XFree86 &egrave;
     <filename>x11/XFree86-4</filename>. Una volta installato il
     pacchetto eseguiamo
     <screen>&prompt.root;<userinput>XFree86 -configure</userinput>
     </screen>
     e troveremo ora un file <filename>XF86Config.new</filename> nella
     home directory dell'utente <username>root</username>; per
     testarlo basta lanciare
     <screen>&prompt.root;<userinput>XFree86 -xf86config /root/XF86Config.new</userinput>
     </screen>
     Se il file di configurazione è corretto dovremmo vedere una
     schermata a sfondo grigio-bianco con il puntatore del mouse a
     forma di X. Per uscire da questa configurazione &egrave;
     necessario premere in combinazione 
     <keycombo action=simul>
       <keycap>Ctrl</keycap>
       <keycap>Alt</keycap>
       <keycap>Backspace</keycap>
     </keycombo>.
     Il file di configurazione, cos&igrave; com'&egrave; ora non
     &egrave; ottimizzato e anzi contiene alcuni piccoli errori a cui
     occorre apportare le necessarie correzioni.
     Prima di tutto aggiungiamo nella sezione
     <literal>Monitor</literal> i valori di frequenza orizzontale e
     refresh verticale del nostro monitor:
     <screen>Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
        Horizsync       <replaceable>37-70</replaceable>
        Vertrefresh     <replaceable>50-120</replaceable>
EndSection
     </screen>
     Ora sistemiamo la profondità di colore e la risoluzine che
     desideriamo utilizzare:
     <screen>Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth <replaceable>24</replaceable>
        SubSection "Display"
                Depth     <replaceable>24</replaceable>
                Modes "<replaceable>1024x768</replaceable>"
        EndSubSection
EndSection
     </screen>
     X non utilizza la mappa caratteri che viene caricata dal sistema
     al boot, quindi &egrave; necessario specificarne una inserendo la
     riga
     <screen>Option  "XkbLayout" "<replaceable>it</replaceable>"
     </screen>
     all'interno della sezione <literal>InputDevice</literal> che
     identifica la tastiera (<literal>Keyboard0</literal>). Ovviamente
     se non abbiamo una tastiera, dovremo specificare il codice
     appropriato.
     Bene, la configurazione di base &egrave; terminata, tuttavia si
     possono effettuare ulteriori "limature" per perfezionare il tutto
     a propria discrezione: installare ulteriori fonts, selezionare
     opzioni particolari per la scheda video e molto altro.</para>
  </sect1>
</chapter>
