Si habéis adquirido recientemente un portátil con gráfica NVIDIA, es posible que posea la tecnología Optimus, la cual permite el intercambio “al vuelo” de esta gráfica dedicada con otra integrada de Intel. Con esto se consigue ahorrar energía cuando utilizamos aplicaciones poco exigentes, lo cual conlleva un ahorro de batería muy interesante.
NVIDIA Optimus funciona perfectamente en Windows 7 con los drivers respectivos de ambas gráficas pero, para variar, se han “olvidado” de implementarlo en Linux. Voy a indicar cómo conseguí hacerlo funcionar gracias al proyecto Bumblebee, una implementación libre creada por la comunidad. Tras realizar la instalación en mi Asus N43SL, conseguí pasar de unas escasas 2 horas de batería a algo menos de 5 horas aproximadamente.
Los pasos se realizaron con Ubuntu 11.04 (Natty Narwhal), con una gráfica GeForce GT 540M.
Instalación de Bumblebee
Si usáis Ubuntu es muy cómodo: basta con añadir este PPA mantenido por el mismo creador de Bumblebee e instalarlo a partir de ahí. Los pasos a seguir son:
sudo apt-add-repository ppa:mj-casalogic/bumblebee
sudo apt-get update
sudo apt-get install bumblebee
También podéis bajaros las fuentes con git e instalarlo con el script que se proporciona:
git clone http://github.com/MrMEEE/bumblebee.git
cd bumblebee/
sudo ./install.sh
Podéis encontrar soporte para otras distros como openSUSE y Arch Linux en la misma web del proyecto.
Durante la instalación, se nos pedirá que seleccionemos una configuración. Podremos buscar nuestro modelo de portátil entre las opciones que se muestran, o dejarlo por defecto para configurarlo más tarde. En mi caso, aunque mi modelo aparecía, tuve que modificar la configuración. Más adelante se indica cómo.
Comprobando su funcionamiento: elección de la gráfica
Una vez instalado Bumblebee, podemos ejecutar un programa con la gráfica dedicada con el comando
optirun <programa>
Una prueba de que todo va bien es ejecutar glxgears con cada tarjeta por separado y comprobar la diferencia de FPS. Deberíamos tener mayor número de FPS para la gráfica NVIDIA.
Todo esto está muy bien, pero en este momento tenemos un problema: ambas tarjetas están funcionando a la vez, consumiendo energía. Continuamos.
Configurando los scripts para activar/desactivar la gráfica dedicada
Hay que configurar los archivos /usr/local/bin/bumblebee-enablecard y /usr/local/bin/bumblebee-disablecard. Con estos scripts activamos y desactivamos la gráfica dedicada. Si hemos tenido suerte, al elegir nuestro modelo en la instalación de Bumblebee ya los encontraremos rellenos y funcionando. Fijaros en la salida del siguiente
comando:
lspci -vnnn | grep VGA
A continuación, ejecutad con permisos de administrador bumblebee-disablecard, y volved a comprobar la salida del comando anterior. ¿Ha cambiado algo? Específicamente, debería desaparecer [VGA controller] de la línea correspondiente a la gráfica NVIDIA cuando desactivamos ésta.
Si funciona lo anterior habéis acabado, mirad la duración de la batería y comprobad la (en mi caso, enorme) diferencia. Si no es así, el tema es algo más engorroso. Advertencia: a partir de aquí no tengo ni idea del por qué de lo que indico, sólo sé que yo realicé estos pasos y me funcionó todo correctamente.
Siguiendo los pasos de esta web para instalar el módulo acpi_call:
sudo apt-get install git
git clone http://github.com/mkottman/acpi_call.git
cd acpi_call
make
sudo insmod acpi_call.ko
De nuevo, queremos comprobar la diferencia entre la salida del comando
lspci -vnnn | grep VGA
Pero, esta vez, antes y después de ejecutar el script test_off.sh:
sudo sh test_off.sh
Además, queremos ver la salida de este último script, que en mi caso fue:
@juanma-N43SL:~/acpi_call$ sudo sh test_off.sh
Trying _SB.PCI0.P0P1.VGA._OFF: failed
Trying _SB.PCI0.P0P2.VGA._OFF: failed
Trying _SB_.PCI0.OVGA.***: failed
Trying _SB_.PCI0.OVGA.XTPX: failed
Trying _SB.PCI0.P0P3.PEGP._OFF: failed
Trying _SB.PCI0.P0P2.PEGP._OFF: failed
Trying _SB.PCI0.P0P1.PEGP._OFF: failed
Trying _SB.PCI0.MXR0.MXM0._OFF: failed
Trying _SB.PCI0.PEG1.GFX0._OFF: failed
Trying _SB.PCI0.PEG0.GFX0.DOFF: failed
Trying _SB.PCI0.PEG1.GFX0.DOFF: failed
Trying _SB.PCI0.PEG0.PEGP._OFF: failed
Trying _SB.PCI0.XVR0.Z01I.DGOF: failed
Trying _SB.PCI0.PEGR.GFX0._OFF: works!
Atentos a la última línea, hemos encontrado una manera de desactivar nuestra gráfica. Si comprobamos la duración de la batería, vemos que ha incrementado. Tomamos nota del intento exitoso, en este caso nos quedamos con la cadena _SB.PCI0.PEGR.GFX0._. ¡Hay que destacar que nos hemos quedado con todo menos con OFF!
Ahora nos vamos a esta carpeta del GIT de Bumblebee y buscamos un bumblebee-disablecard y un bumblebee-enablecard que correspondan a nuestra distribución de Linux y nuestra tarjeta gráfica. Es probable que no los encontremos para nuestra tarjeta específica, así que tomamos un modelo lo más parecido posible. En mi caso, tomé un script para el Asus N53sv, siendo el mío un N43SL. Copiamos el contenido de estos archivos en /usr/local/bin/bumblebee-enablecard y /usr/local/bin/bumblebee-disablecard, respectivamente, pero modificaremos si es necesario en ambos archivos la línea que haga la llamada al módulo acpi_call, sustituyendo la cadena que
hemos copiado a partir de test_off.sh.
En mi caso, sustituí en en /usr/local/bin/bumblebee-disablecard
echo _OFF $(acpi_call "_SB.PCI0.PEG0.GFX0.DOFF";)
por
echo _OFF $(acpi_call "_SB.PCI0.PEGR.GFX0._OFF";)
Y en en /usr/local/bin/bumblebee-enablecard
echo DON $(acpi_call "_SB.PCI0.PEG0.GFX0.DON";)
por
echo DON $(acpi_call "_SB.PCI0.PEGR.GFX0._ON";)
Una vez hecho esto, ya estaría todo configurado correctamente. Podremos desactivar la gráfica integrada con bumblebee-disablecard y activarla con bumblebee-enablecard. Si la tenemos desactivada, cada vez que ejecutemos optirun para ejecutar un programa con la tarjeta de NVIDIA, se activará automáticamente ésta, y se desactivará cuando cerremos dicho programa (parece que esto último sólo funciona en Ubuntu automáticamente).
Incluyo mis scripts para el Asus N43SL, por si le son de utilidad a alguien:
http://www.codigo12.com/wp-content/uploads/2011/08/bumblebee-enable-disable-n43SL.tar.gz
Habrá que estar atentos a la evolución del proyecto Bumblebee y, quién sabe, a lo mejor NVIDIA decide dar soporte a estas características en sus drivers oficiales algún dia.
Fuentes del artículo:
https://github.com/MrMEEE/bumblebee/
http://linux-hybrid-graphics.blogspot.com/2010/07/using-acpicall-module-to-switch-onoff.html
hazlo simple,hazlo facil,hazlo en linux PD: Algun admin que me pueda reactiva mi antigua cuenta @illuminaty por que me marcaron spam sin justificacion.