mercoledì 11 maggio 2011

nVidia Optimus su Linux

Questo post contiene notizie non aggiornate. Soprattutto per quanto riguarda l'installazione, adesso sono stati creati dei pacchetti deb e rpm che dovrebbero tenere sempre aggiornati.


Si, ci sono riusciti. La notizia è uscita da Phoronix e si è sparsa per buona parte del web. nVidia Optimus funziona sotto linux!
Ok, non si parla di porting ufficiale, ma del lavoro di alcune persone che lo fanno per passione (e per incazzature contro la nVidia e il server grafico X). Sono riusciti ad ottenere il risultato di potere usare entrambe le schede intel e nVidia comtenporaeamente senza riavviare il server grafico. La cosa straoridaria è che questo progetto funziona non solo con i driver nouveau, ma anche con i driver proprietari nVidia. Se non avete voglia di leggere l'articolo di Phoronix, allora vi riassumo velocemente come ci sono riusciti e cosa hanno fatto.



- Parte di Spiegazione - 
Il progetto è nato col nome di prime-ng e poi lo ha subito cambiato in bumblebee (ogni riferimento al mondo di transformer è puramente casuale ^^) ed in realtà viene utilizzato un mero trucco, che nella sua semplicità è geniale: vengono fatti partire due server X, uno per ogni scheda grafica (infatti questa soluzione è sconsigliata a computer con poca memoria RAM). Lo schermo collegato al server X principale, controllato dalla scheda intel.Grazie al comando optirun32 / optirun64 si riesce a fare partire un programma sulla scheda grafica nVidia (la cosiddetta scheda discreta). Quindi viene prelevata l'immagine generata dalla scheda nVidia (che spesso è un rettangolo contenente la finestra) e trasferita sul buffer video della scheda intel. Può sembrare un metodo un po' lento, e forse lo è, ma il trucco funziona e la perdita di performance riesce ad essere veramente minima.



- Parte di Installazione -

  • Aprire un terminale
  • Creare una cartella col nome che volete (es. optimus) nella home così da tenere separate gli script di installazione che stiamo per scaricare dal resto dei vostri dati. Ed entrate nella cartella.
$ mkdir ~/optimus
$ cd ~/optimus
  • A questo punto bisogna scaricare il "programma".

$ git clone git://github.com/MrMEEE/bumblebee.git
naturalmente questo richiede come prerequisito l'installazione di git, e se siete su ubuntu si può installare velocemente col comando " $sudo apt-get install git ". Per le altre distribuzione usate gli strumenti messi a disposizione

  • Adesso entrate nella cartella creata da git (dovrebbe chiamarsi bumblebee) e fate partire lo script di installazione

$ cd bumblebee
$ ./install.sh

  • Lo script di installazione di bumblebee è strutturato bene e passaggio per passaggio vi guida verso la giusta configurazione per il vostro computer. Infine riavviate. Come avrete notato lo script vi ha detto che ha creato degli script di avvio per fare partire gli effetti grafici del vostro Desktop Enviroment (Gnome o KDE) sulla scheda nVidia e (al momento in cui scrivo) la completa configurazione automatica di questi script - posizionarli nella cartella giusta - viene fatto solo per KDE, ma veniva spiegato come farlo per Gnome. Per gli altri Desktop Enviroment dovete avere il tempo di scasinarci un po', guardare gli script di KDE e di Gnome e capire come crearne uno per il vostro Desktop Enviroment.


  • Una volta riavviato e finito tutte le impostazioni, dovrebbero finalmente funzionare gli effetti grafici. Per avviare un qualsiasi programma dovrete aprire un terminale e farlo partire con la seguente sintassi:
          nei sistemi a 64bit:

se il programma è a 32 bit
$ optirun32 programma
se il programma è a 64 bit
$ optirun64 programma


          nei sistemi a 32bit invece il comando è unico:
$ optirun programma


          In effetti funziona in maniera similare al comando sudo



- Problemi noti -

  • Innanzitutto si perde tutto il vantaggio principale dell'avere optimus, cioè il risparmio di corrente. Infatti il progetto è ancora in fase di sviluppo e ancora non riesce a disattivare dinamicamente una delle due schede se non viene utilizzata. Entrambe le schede rimangono accese per tutto il tempo!
  • Per fare partire un qualsiasi programma bisogna aprire un terminale e digitare optirun**  nome_programma. Infatti questa soluzione non è (ancora) in grado di decidere autonomamente e dinamicamente se il programma ha bisogno di girare sulla grafica discreta oppure no.
  • Il comando optirun è difficilmente utilizzabile negli script, perché non esiste veramente ma è definito come alias. Durante l'installazione viene modificato il file /etc/bash.bashrc dove vengono aggiunte due righe finali che definiscono i due comandi:


   alias optirun32='vglrun -ld /usr/lib32/nvidia-current'
   alias optirun64='vglrun -ld /usr/lib64/nvidia-current'
          oppure nei sistemi a 32bit
   alias optirun='vglrun -ld /usr/lib/nvidia-current'

Quindi se avete dei problemi del tipo "comando optirun** non trovato", sostituite optirun con il suo corrispettivo alias: vglrun -ld /usr/lib**/nvidia-current

  • Se usate la macchina virtuale java della sun (e non openJDK) allora avrete dei problemi a fare partire i vostri programmi da terminale. Questo è un problema della sun (della oracle) e avrete lo stesso problema anche se aveste semplicemente il bisogno di farlo partire da terminale col comando $ java -jar programma.jar (HeadlessException). Soluzione: usare openJDK, che tra l'altro in ubuntu è installato di default. (Ogni riferimento a Minecraft è puramente casuale)

Nessun commento:

Posta un commento