La compatibilità con le periferiche hardware è sempre stato uno dei problemi più seri contro cui talvolta si scontrano gli utenti Linux. Non sempre le ultime componenti (soprattutto se USB o modem interni) trovano vita facile con il sistema operativo del pinguino. Nonostante questo è da riconoscere come negli ultimi anni la situazione abbia fatto passi da gigante e ormai le marche più diffuse e i dispositivi più "seri" sono supportati anche da Linux. Uno degli esempi migliori sono le schede video di NVIDIA.
Il supporto per X per le schede NVIDIA (mi riferisco in particolare alla famiglia "GeForce", RIVA TNT e TNT2, QUADRO e seguenti) è stato disponibile solo a partire dalla versione 4. Inoltre si trattava di un supporto al solo 2D, e non provvedeva in nessun modo al miglioramento delle prestazioni 3D (OpenGL), appiattendo le prestazioni al pari di una qualsiasi altra scheda video. Per fortuna però NVIDIA ha provveduto a rilasciare dei driver per l'accelerazione 3D anche su Linux. A cosa serve in particolare questo driver? È necessario che sia presente sul PC di ogni utente Linux possessore di una scheda NVIDIA?
Prima di cominciare è bene chiarire che i driver forniti da NVIDIA sono in grado di migliorare sensibilmente le prestazioni solo per le applicazioni 3D che utilizzano OpenGL. Può essere utile quindi installarli soprattutto se si ritiene di dover utilizzare questo genere di programmi. In particolare può essere molto utile (per non dire indispensabile) utilizzare l'accelerazione 3D per alcuni giochi, applicazioni di modellazione, programmi di simulazione che sfruttano OpenGL, la libreria più diffusa e utilizzata per la grafica tridimensionale (tra l'altro può vantare di essere multipiattaforma).
Per i possessori di una scheda video NVIDIA potrebbe essere praticamente impossibile giocare, ad esempio, con TuxRacer, oppure usare un particolare plugin per XMMS che utilizza speciali effetti 3D, senza ricorrere ai driver ufficiali accelerati. Per avere delle prestazioni ottimali però questo driver necessita di funzionare in "zona kernel", cosa che ha creato in passato qualche problema di stabilità. Il driver si compone infatti di due pachetti: NVIDIA_kernel, contenente la parte in kernel space e NVIDIA_GLX che fornisce la versione OpenGL accelerata. L'installazione non è molto complessa. Per maggiore uniformità noi considereremo la versione pacchettizzata sottoforma di .tar.gz in modo da rendere l'installazione più generica possibile. È comunque possibile reperire sul sito NVIDIA i pacchetti .RPM per alcune delle distribuzioni più diffuse.
Prima di continuare assicuriamoci di avere una versione di X pari alla 4.0 o superiori. C'è da dire comunque che la serie 4 è stata adottata da tutte le distribuzioni più recenti da almeno un anno. È possibile scoprire la versione del proprio server X dando il comando:
utente@lnxbox1:~$ X -version
La pagina relativa ai driver Linux è disponibile presso il sito NVIDIA all'indirizzo: http://www.nvidia.com/view.asp?IO=linux_display_archive
Al momento della scrittura di questo articolo l'ultima versione disponibile è la 1.0-3123. Scaricheremo quindi i seguenti file (meglio andare a controllare comunque l'eventuale presenza di file più aggiornati): NVIDIA_kernel-1.0-3123.tar.gz, NVIDIA_GLX-1.0-3123.tar.gz.
Prima di continuare è importante fare attenzione che non sia stato avviato il server X al boot, cosa molto comune nelle distribuzioni recenti. Sarà bene quindi terminare ogni sessione di X e chiudere anche l'eventuale Desktop Manager (come KDM, GDM, XDM) entrando in modalità init 3. Da root eseguiamo quindi:
lnxbox1:~# init 3
A questo punto siamo pronti per lavorare sui pacchetti appena scaricati.
Decomprimiamo il primo pacchetto quello relativo al kernel. Diamo allora il comando:
lnxbox1:~# tar xfvz NVIDIA_kernel-1.0-3123.tar.gz
Accediamo alla directory appena creata con:
lnxbox1:~# cd NVIDIA_kernel-1.0-3123
E lanciamo "make install":
lnxbox1:~/NVIDIA_kernel-1.0-3123# make install
Questo comando provvederà a compilare il modulo da inserire nel kernel (non sarà quindi necessario ricompilare tutto il kernel, ma è importante ripetere questa procedura qualora ne venga installato uno nuovo). Requisito fondamentale è la presenza degli header del kernel o degli interi sorgenti (per questo potete consultare un nostro articolo sulla compilazione del kernel).
Per fare in modo che il modulo, chiamato NVdriver, venga caricato automaticamente quando viene lanciato X, controlliamo che sia presente nel file /etc/modules.conf (in alcune distribuzioni potrebbe chiamarsi /etc/conf.modules) la seguente linea:
alias char-major-195 NVdriver
Passiamo ora all'installazione dei driver accelerati per X. Analogamente a quanto fatto prima, decomprimiamo il pacchetto NVIDIA_GLX-1.0-3123 nella directory corrente con il comando:
lnxbox1:~# tar xfvz NVIDIA_GLX-1.0-3123.tar.gz
Entriamo nella directory appena creata con:
lnxbox1:~# cd NVIDIA_GLX-1.0-3123
E infine lanciamo "make install":
lnxbox1:~/NVIDIA_GLX-1.0-3123# make install
Questo comando provvederà anche a sovrascrivere eventuali versioni precedentemente installate. Oltre a questo cancellerà le librerie e le estensioni generiche per X riguardanti OpenGL. Questo significa che non potrete più fare a meno di utilizzare i driver accelerati per la vostra scheda video NVIDIA, se volete usare OpenGL. Inoltre se decideste di aggiornare X, dovrete anche ricordarvi di reinstallare i driver accelerati.
Fatto questo non vi resterà altro che ritoccare il file di configurazione di XFree86, solitamente /etc/X11/XF86Config-4 o /etc/X11/XF86Config. In particolare dovrete specificare il nuovo driver video (nvidia), e controllare che venga caricato il modulo per X glx all'avvio del server grafico.
Per far questo apriamo con un editor di testo il file /etc/X11/XF86Config-4 (o /etc/X11/XF86Config), che dovrebbe già essere funzionante (come abbiamo già detto questi driver non sono indispensabili e XFree86 supporta già le schede video NVIDIA). Cerchiamo quindi una riga del tipo Driver "nv" e sostituiamola con Driver "nvidia" (talvolta è possibile trovare Driver "vesa" al posto di Driver "nv").
Controlliamo ora la presenza della riga (solitamente a inizio file) Load "glx". Probabilmente già presente che provvederà ad abilitare il supporto a OpenGL. Dovremo cercare ed eventualmente rimuovere (oppure commentare con un #) delle voci riguardanti il caricamento dei moduli "dri" e "GLcore": Load "dri", Load "GLcore"
A questo punto se tutto è andato per il verso giusto dovreste essere in grado di usufruire dei nuovi driver NVIDIA. Potete avviare X usando il comando startx oppure ritornando a init 5 (lanciate da root il comando init 5). Un ultimo consiglio: questi driver hanno già un supporto per AGP. Non è necessario (anzi spesso è sconsigliabile) utilizzare quello ufficiale del kernel. Evitate quindi di caricare il modulo agpgart.o del kernel (in caso sia stato inserito come built-in vi consiglio di ricompilare il kernel disabilitandolo).
Vi ricordo che purtroppo i driver NVIDIA sono per larghissima parte closed source (la licenza ne vieta anche il reverse engineering). Spesso in passato sono stati fonte di instabilità del sistema. Il tutto aggravato dal fatto, tipico del software a sorgente chiuso, che bisognava aspettare una nuova release per vedere corretti i bug. Mi auguro profondamente di poter scaricare un giorno dei driver ufficiale NVIDIA sotto forma di codice sorgente al 100%.
Per finire potete gustarvi ora le differenze con uno dei giochi 3D per Linux. Vi consiglio TuxRacer se siete amanti delle discese libere di sci oppure FlightGear se siete appassionati dai simulatori di volo.