Los pasos para tener las teclas fn funcionando en un Sony Vaio SZ son:
1. Instalar soporte de teclas especiales sony en el kernel. Antes el módulo se llamaba sony_acpi, pero ahora es sony-laptop. Con esto conseguimos que el kernel genere eventos acpi cada vez que pulsamos la tecla fn + f1-f12
2. Procesar los eventos acpi. Para esto basta una sección adicional en el script /etc/acpi/default.sh. Por supuesto, se puede llamar a un script aparte poniendo el clasificador correspondiente en /etc/acpi/events/ y creando el script en la carpeta anterior, o en una subcarpeta, a gusto del usuario. En mi caso, la seccion relevante del default.sh es:
3. Crear los scripts que den la funcionalidad. En caso del volumen se puede usar el comando amixer. Para el brillo basta leer/escribir en /sys/class/backlight/sony/brightness. Por supuesto se pueden asignar las funciones que se quieran a las teclas, como ejecutar scripts de mantenimiento, arrancar navegadores... Como ejemplo dejo dos scripts de control de brillo y volumen, que es lo mas usado.
#!/bin/sh # /etc/acpi/default.sh [...] case "$group" in button) [...] sony) case "$value" in 0000000d) logger "mute" /usr/local/bin/vol_mute ;; 0000000e) logger "bajando el volumen" /usr/local/bin/vol_down ;; 0000000f) logger "subiendo el volumen" /usr/local/bin/vol_up ;; 00000010) logger "bajando el brillo" /usr/local/bin/bright_down ;; 00000011) logger "subiendo el brillo" /usr/local/bin/bright_up ;; *) logger "acpid: sony action $value is not defined" ;; esac ;; ac_adapter) [...]] *) log_unhandled $* ;; esac
Brillo:
Volumen:
#!/bin/bash BRIGHTNESS="$(cat /sys/class/backlight/sony/brightness)" if (( BRIGHTNESS < 7)) then BRIGHTNESS=$((BRIGHTNESS+1)) echo $BRIGHTNESS > /sys/class/backlight/sony/brightness # DESCOMENTAR PARA OSD # PERC="$(( (BRIGHTNESS*100)/7 ))" # osd_cat --pos=middle --align=center --barmode=percentage --percentage=$PERC --text=BRILLO & fi
Siendo vol_get:
#!/bin/bash VOLUMEN=$(/usr/local/bin/vol_get) (( VOLUMEN = VOLUMEN + 5 )) if [ $VOLUMEN -gt 100 ]; then VOLUMEN=100 fi /usr/local/bin/vol_set $VOLUMEN
Y vol_set:
amixer sget Master | grep Left: | sed -e "s/[^[]*\[\([^%]*\).*/\1/"
Los scripts son de andar por casa y chapuceros, de hecho creo que son los primeros que he escrito, así que no tengo mucha idea de normas de estilo, ni siquiera de normas en general ;) Pero espero que sirvan para ilustrar el proceso a seguir para ajustar el comportamiento al gusto de cada uno. Y por supuesto la regexp de sed ha sido copiada de una web y modificada para que funcione con la salida del amixer (salida filtrada chapuceramente con grep xD).
#!/bin/bash if [ $# -lt 1 ] then echo "Uso: $0 VOLUMEN" exit 1 fi amixer -q sset Master ${1}%
Por supuesto, existen otros métodos como mapear los eventos acpi a pulsaciones de teclas en X, o a través de módulos de KDE, pero esas soluciones o son más complejas y menos potentes o se acercan más al Plug & Pray y si no funcionan a la primera, no hay manera de arreglarlas.
PD: el codigo para la su publicación ha sido porcesado usando esta página. Increíble lo que he tardado en encontrar una página de ese tipo, la relación señal/ruido en Internet cada vez es peor.