NVidia Optimus es la ultima  tecnología de nvidia para computadores  portátiles, la que por medio de dos tarjetas  gráficas (una integrada y una adicional) permite un mejor rendimiento de los recursos del computador por medio del encendido y apagado de la tarjeta adicional de acuerdo a la necesidad de procesamiento  gráfico. Hasta  ahí, todo suena bonito, el problema es que NVidia Optimus no tiene soporte para Linux, y no está dentro de los planes de la compañía soportarlo dentro del corto plazo, por lo que han aparecido un par de proyectos libres que permiten implementarlo( Bumblebee, Ironhide y se esta pensando en una implementación del driver libre nouveau). En mi caso (un Dell l502x), no tuve mucho  éxito con estos proyectos, por lo que he decidido deshabilitar por completo la tarjeta adicional, esto me ha traído algunos problemas al ver  vídeos en alta  definición o al correr algunos juegos, pero la disminución en la temperatura y la aumentada vida de la batería lo comienzan. Sin más vamos a poner manos a la obra.

Primero que nada actualizamos los drivers de  vídeo, esto es debido a que con los drivers proveídos por el sistema experimentaba constantes congelamientos de la imagen:

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo aptitude update
sudo aptitude safe-upgrade

una vez se hayan instalado la ultima  versión de los controladores de  vídeo, descargamos git:

sudo aptitude install git

por medio de git descargaremos acpi-call y compilamos, la herramienta que nos permite apagar nuestra tarjeta nvidia:

git clone http://github.com/mkottman/acpi_call.git
cd acpi_call
make

Ahora probamos si nuestra tarjeta puede ser apagada, para eso cargamos el modulo que acabamos de compilar y corremos el script de prueba:

sudo insmod acpi_call.ko
sh test_off.sh

Si después de correr este ultimo comando aparece una linea que diga “It Works”, entonces nuestra tarjeta de  vídeo puede ser desactivada usando este método, por lo que pasaremos a hacerlo permanente.

En mi caso el  método que  que funciono fue el:

\_SB.PCI0.PEG0.PEGP._OFF

Por lo que continuare utilizando este método  como ejemplo de  aquí en adelante.

Primero  copiamos el modulo recientemente compilado al directorio de  módulos de nuestra versión del kernel (esto debe hacerse cada vez que se  actualice el kernel)

sudo cp acpi_call.ko /lib/modules/`uname -r`/kernel/drivers/acpi
sudo depmod

y lo agregamos al listado de  módulos que se cargan al inicio de nuestro sistema

sudo nano /etc/modules

y escribimos “acpi_call” (sin las comillas) al final del archivo.

Ahora agregaremos nuestro comando de apagado al archivo rc.local, para que de esta forma se inicie automáticamente cuando iniciemos nuestro pc:

sudo nano /etc/rc.local

y escribimos lo siguiente (recuerda reemplazar por tu método correspondiente):

echo ‘\_SB.PCI0.PEG0.PEGP._OFF’ > /proc/acpi/call

y fijandonos que la ultima linea del archivo diga “exit 0″ guardamos y salimos del archivo.

Ahora enlistaremos los drivers de nvidia para que no se carguen junto al sistema, para esto;

sudo nano /etc/modprobe.d/blacklist-nvidia.conf

y escribimos lo siguiente:

blacklist nouveau
blacklist nvidia

guardamos y salimos

Finalmente, con la tarjeta  gráfica adicional apagada era imposible reiniciar el equipo, por lo que generaremos un script que la encienda antes de que el reinicio se realize, para esto:

sudo nano /etc/init.d/acpi-call

donde escribimos:

#!/bin/sh

echo ‘\_SB.PCI0.PEG0.PEGP._ON’ > /proc/acpi/call
exit 0

Y finalmente le damos permisos de  ejecución y generamos un link  simbólico a /etc/rc6.d, para esto:

sudo chmod +x /etc/init.d/acpi-call
sudo ln -s /etc/init.d/acpi-call /etc/rc6.d/K10acpi-call

Y listo, para información extra pueden visitar:

https://wiki.ubuntu.com/X/Troubleshooting/Freeze