Iluminación de pantalla en Asus M50SV

EDITADO 5.01.2010: La ruta de las propiedades del dispositivo ha cambiado a partir de Ubuntu 9.10 (incluído), por lo que he añadido la nueva variación.


Tarde o temprano ocurriría: poner Ubuntu (el nuevo, Hardy) al nuevo portátil de mi padre, un Asus M50SV, y quitar el "sistema inoperativo" de fábrica (a petición suya). Una vez terminado, todo parece funcionar a la perfección (incluso la webcam con cheese), driver privativo Nvidia de por medio.

Hoy, cuando tocaba recibir el visto bueno, el dueño del portátil (mi padre) se dió cuenta de que la pantalla estaba demasiado oscura. Más concretamente el brillo (backlight) del la pantalla era muy débil para su gusto: busqué cómo modificar el brillo (no había forma de hacerlo con interfaz gráfica) y ninguno de los métodos típicos funcionaba; tardé en descubrir el porqué:
El brillo se autoajusta cuando es necesario pero lo estaba haciendo mal (realmente no, pero el cliente siempre tiene la razón).

Una vez sabido el problema, la solución pasa por desactivar el sensor, y ajustar el brillo manualmente, teniéndose que hacer como root (usar sudo parece no funcionar):

Para convertirse en root:
sudo su

Para desactivar el sensor:
(Ubuntu hasta 9.08)
echo 2 > /sys/devices/platform/asus-laptop/ls_switch

(Ubuntu 9.10 en adelante)
echo 2 > /sys/devices/platform/asus_laptop/ls_switch

(0 para desactivar y 1 para activar el sensor lumínico)
Para ajustar manualmente el brillo:
(Ubuntu hasta 9.08)
echo 5 > /sys/devices/platform/asus-laptop/ls_level

(Ubuntu 9.10 en adelante)
echo 5 > /sys/devices/platform/asus_laptop/ls_level

(el 5 es el nivel de intensidad, entre 0 y 15 ambos inclusive)
La siguiente receta evitará tener que ejecutar los comandos de arriba tras cada reinicio (esa configuración no se guarda) o cada vez que queramos cambiar el nivel.

Para tener una forma sencilla de ajustar el brillo de pantalla sin tener que usar comandos, usaremos zenity (que viene instalado por defecto en Ubuntu).
Creamos un archivo de configuración que guarde el brillo:
sudo su
echo 1 > /etc/brillo
exit
Creamos nuestro propio comando en /usr/bin:
sudo gedit /usr/bin/brillo
("brillo" es el nombre del comando de consola, si no te gusta, puedes elegir otro, pero tenlo en cuenta al seguir las instrucciones posteriores)

Que contenga lo siguiente:
(Ubuntu hasta 9.08)
#! /bin/bash
echo 2 > /sys/devices/platform/asus-laptop/ls_switch
export a=$(cat /sys/devices/platform/asus-laptop/ls_level)
export b=$(zenity --scale --text="Ajuste el brillo al nivel que desee" --min-value=0 --max-value=15 --value=$a --step=1 --title="Configuración del brillo")
echo $b > /sys/devices/platform/asus-laptop/ls_level
echo $b > /etc/brillo
echo "Brillo establecido a $b"

(Ubuntu 9.10 en adelante)
#! /bin/bash
echo 2 > /sys/devices/platform/asus_laptop/ls_switch
export a=$(cat /sys/devices/platform/asus_laptop/ls_level)
export b=$(zenity --scale --text="Ajuste el brillo al nivel que desee" --min-value=0 --max-value=15 --value=$a --step=1 --title="Configuración del brillo")
echo $b > /sys/devices/platform/asus_laptop/ls_level
echo $b > /etc/brillo
echo "Brillo establecido a $b"
Y guárdalo. Ese script hará que zenity muestre una barra de desplazamiento para establecer el brillo de la pantalla, y guardará el nivel establecido en /etc/brillo.
Ahora para poder ejecutarlo, debemos darle permisos de ejecución tal que así:
sudo chmod +x /usr/bin/brillo

El script debe ser ejecutado como superusuario (puedes lanzarlo ejecutando sudo brillo en la consola).
Modificar el rc.local para desactivar el sensor y poner el brillo determinado por el usuario (guardado en /etc/brillo) cuando se inicie el sistema.
Editamos el script de inicio local:
sudo gedit /etc/rc.local

Y ahora añadir estas tres líneas (no borres su contenido, simplemente agrégalo en las líneas previas al exit 0, que marca el final):
(Ubuntu hasta 9.08)
export a=$(cat /etc/brillo)
echo 2 > /sys/devices/platform/asus-laptop/ls_switch
echo $a > /sys/devices/platform/asus-laptop/ls_level

(Ubuntu 9.10 en adelante)
export a=$(cat /etc/brillo)
echo 2 > /sys/devices/platform/asus_laptop/ls_switch
echo $a > /sys/devices/platform/asus_laptop/ls_level
Parte opcional:
Crear un acceso directo en el menú (usando el editor de menú alacarte), que es lo que yo he hecho, o un lanzador en el panel, que llame al siguiente comando:
gksudo brillo
Si quieres añadir el enlace al menú sin usar alacarte (útil para los que usan Xfce, por ejemplo) puedes crear un archivo .desktop en ~/.local/share/applications que contenga, por ejemplo:
[Desktop Entry]
Encoding=UTF-8
Exec=gksudo brillo
Hidden=false
Name=Ajuste de brillo
Terminal=false
Type=Application
Aparecerá en la sección Otros, para cambiarlo hay que especificar el parámetro Categories en el .desktop, pero creo que no es imprescindible para el tutorial.

EDIT 14/05/08: He mejorado un poco los scripts, ahora recuerda el nivel de brillo tras los reinicios.

Créditos:

8 comentarios:

  1. Increible!!!!
    Al final lo encontre!!!
    Henorabuena por el tuto

    ResponderEliminar
  2. te felicito... es un tutorial excelente... ya casi me habia rendido y me encuentro esto y.. problema solucionado!
    Pd: yo lo he usado para un asus M51VR

    ResponderEliminar
  3. Muchas gracias ya tenia dolores de cabeza por que con el brillo autoajustable no se veia nada.

    Tnx again me has salvado la vida llevaba buscando esto 2 meses o mas.

    ResponderEliminar
  4. Mil millones de gracias!!! Por fiiiin!!!

    ResponderEliminar
  5. Muy bueno!
    El script funciona de lujo...
    Ya creía que me dejaba los ojos en el intento. Gracias!

    ResponderEliminar
  6. ¡¡Muchas gracias!!
    Una solución realmente buena, funciona perfectamente con el 9.10 y en la serie de portátiles M51V.

    ResponderEliminar
  7. Hola... de todos las soluciones de brillo de monitor veo que esta es la que más me convence... sin embargo yo tengo otro tipo de laptop una Gateway M-6854m y en la carpeta (o ruta) del principio [donde desactivas el sensor (no se que sensor sea)] pues no tengo ese directorio en /sys/devices/platform/ tengo las siguientes carpetas /bluetooth/ ó /i8042/ ó /iTCO_wdt/ ó /pospkr/ ó /power/ ó /serial8250/ y un archivo que dice "uevent" ¿cual directorio escogo?

    1 de mayo de 2010 15:49

    ResponderEliminar
  8. @Carlos Alfonso ni idea, no tengo ese portátil, pero de entrada te puedo decir que el archivo uevent no es.

    ResponderEliminar