Archive for julio 2012

A vueltas con el brillo de la pantalla del mac book pro

julio 8, 2012

Yo ya conseguí poder modular el brillo de la pantalla del mac book pro usando las teclas tal y como expliqué en: Modular brillo pantalla en Mac Book Pro. Pero si recordáis bien esto es cuando se está usando la tarjeta nvidia. Y conseguí, por defecto, usar la tarjeta intel como expliqué en: Usar tarjeta intel integrada en Debian Unstable para MacBook Pro 6,2 .

Con esta última configuración el slider del monitor de batería ya me dejaba cambiar el brillo. Pero la modulación via teclas no me funcionaba. ¿Por qué? Pues porque yo ya la había programado manualmente para usar el script de nvidia.

Hasta ahora no había tocado este tema porque no me había hecho falta. El otro día me dí cuenta de que la opción de bloquear la pantalla no me funcionaba. Simplemente le das a bloquear pantalla y la pantalla sigue bloqueada. No podía ser esto.

 

Así es que para solventar este problema he instaldo el paquete xlock. Me he hecho un lanzador que lo ejecute y voila ya tienes la pantalla protegida cuando quieras.

 

No obstante esto tiene un inconveniente, al cabo de, digamos unos 20 minutos, el brillo de la pantalla baja a mínimos. Tan a mínimos que parece que está apagada. Y entonces es cuándo no me van las teclas por lo que he comentado más arriba. Si estoy conectado a otro monitor puedo desbloquear con la contraseña y ver el escritorio arriba dónde en un mi kde añado un widget de batería y ahí puedo modular el brillo.

 

Pero no quiero ir andando haciendo esto. Así que quiero hacerlo con las teclas, pero, claro, que me pueda servir también arranque en el modo nvidia, o consiga poder hacer switch en el momento.

Para ello por un lado el script para nvidia que ya tenía se renombra a:

custom-backlight-macbookpro_nvidia

. Y por otro lado creo un script muy parecido pero para Intel que copio y pego a continuación:

#!/bin/bash

# Adapted from http://www.linuxquestions.org/questions/linux-laptop-and-netbook-25/script-to-set-up-brightness-of-backlight-in-xfce-903704/
# Script for changing backlight brightness in /sys/class/backlight/acpi_video0/brightness
# can take values 0-15, in real (my notebook) works only values 2-15

#IMPORTANT: you must have writing rights to /sys/.../brightness (I must solute it with visudo or something like that...)
#IMPORTANT: for proper work after reboot must exist directory .bright in your home directory and file last_bright in .bright directory 

#reads content of brightness and save it into variable

BRIGHTNESS_FILE="/sys/devices/virtual/backlight/acpi_video0/brightness"
BRIGHT_CONF_DIR="$HOME/.brightintel"
LAST_BRIGHT_FILE="${BRIGHT_CONF_DIR}/last_bright"
BRIGHT=$(cat ${BRIGHTNESS_FILE})

while getopts "pmlhc" optname
 do
  case "$optname" in
   "p")
    #Add more brightness
    #BRIGHT++
    BRIGHT=$(($BRIGHT+8800))
    #protect mechanism (BRIGHT must be lower or equal to 15)
     if (($BRIGHT>132000))
     then
        BRIGHT=$((132000))
     fi
    ;;
   "m")
    #decrease brightness
    #BRIGHT--
    BRIGHT=$(($BRIGHT-8800))
    #protect mechanism (BRIGHT must be bigger or equal to 2)
     if (($BRIGHT<17600))
     then
        BRIGHT=$((17600))
     fi    
    ;;
   "l")
    echo "Loading last value of brightness."
    #Load last value, saved in file last_bright
    BRIGHT=$(cat ${LAST_BRIGHT_FILE})
    echo "Last value of brightness was: $BRIGHT"
    ;;
   "h")
     echo "Help: "
     echo "-p    Increase brightness"
     echo "-m    Decrease brightness"
     echo "-l    Load last brightness value"
     echo "-c N Set to custom value"
     echo "-h    This help"
     echo "Programmed by: ElectricZero"
     echo "Improved by: adrian15"
     exit 0;
     ;;
    "c")
     BRIGHT=$2
     if (($BRIGHT>132000))
     then
        BRIGHT=$((132000))
     fi

     if (($BRIGHT<17600))
     then
        BRIGHT=$((17600))
     fi
     ;;
    "?")
     echo "Unknown argument, try bright -h for help"
     exit 1;
     ;;
    *)
    # Should not occur
    echo "Unknown error while processing options"
    exit 2;
    ;;
  esac
done
echo "Brightness set on $BRIGHT"
#Save variable BRIGHT into file brightness
echo $BRIGHT > ${BRIGHTNESS_FILE}
#Save variable BRIGHT into file last_bright
if [ ! -d ${BRIGHT_CONF_DIR} ] ; then mkdir ${BRIGHT_CONF_DIR} ; fi
echo $BRIGHT > ${LAST_BRIGHT_FILE}

Y he hecho un wrapper que me llama a los dos scripts para sólo tener que interactuar con uno. No comprueba qué script ha de ejecutar pero me da igual. A este script lo he llamado:

custom-backlight-macbookpro_both

y aquí os pongo el código:

#!/bin/bash


NVIDIA_BL_BINARY="/usr/local/bin/custom-backlight-macbookpro_nvidia"
INTEL_BL_BINARY="/usr/local/bin/custom-backlight-macbookpro_intel"

while getopts "pmlhc" optname
 do
  case "$optname" in
   "p")
    #Add more brightness
    ${NVIDIA_BL_BINARY} -p
    ${INTEL_BL_BINARY} -p
    ;;
   "m")
    #decrease brightness
    ${NVIDIA_BL_BINARY} -m
    ${INTEL_BL_BINARY} -m
    ;;
   "l")
    echo "Loading last value of brightness."
    ${NVIDIA_BL_BINARY} -l
    ${INTEL_BL_BINARY} -l
    ;;
   "h")
     echo "Help: "
     echo "-p    Increase brightness"
     echo "-m    Decrease brightness"
     echo "-l    Load last brightness value"
     echo "-c N Set to custom value"
     echo "-h    This help"
     echo "Programmed by: ElectricZero"
     echo "Improved by: adrian15"
     exit 0;
     ;;
    "c")
     BRIGHT=$2
     if (($BRIGHT>15))
     then
        BRIGHT=$((15))
     fi

     if (($BRIGHT<2))
     then
        BRIGHT=$((2))
     fi
    let INTELBRIGHT=${BRIGHT}*8800
    ${NVIDIA_BL_BINARY} -c ${BRIGHT} 
    ${INTEL_BL_BINARY} -c ${INTELBRIGHT}
     ;;
    "?")
     echo "Unknown argument, try bright -h for help"
     exit 1;
     ;;
    *)
    # Should not occur
    echo "Unknown error while processing options"
    exit 2;
    ;;
  esac
done

 

Pues básicamente es eso. Sólo falta editar el archivo /etc/sudoers para habilitar el script que termina en both en lugar del antiguo (miraros el artículo del brillo de la nvidia) y ya lo tenemos.

Y ahora voy a ver si me funciona o no el suspender en modo tarjeta intel que igual en todo este tiempo lo que ha pasado es que volvía a la vida pero con el brillo mínimo y aparentaba no funcionar.