ACPI Events - Funktionstasten an Notebooks
Hier soll es darum gehen, wie man nicht funktionierende Funktionstasten (ACPI-Events) unter Linux zur Mitarbeit überreden kann. Als Beispiel beschreibe ich das Ein- und Ausschalten des Lichtsensors eines ASUS X57VN (M50VN Mainboard) Laptops. Die Funktionstasten für das Ein- und Ausschalten des Lightsensor sind Fn+A
Zunächst sollte man sich klar darüber sein, wie man etwas ein- oder auschalten kann.
Im Falle des Lichtsenors des ASUS Laptop ist unter /sys/devices/platform/asus-laptop/ls_switch der Status änderbar hinterlegt. (Wenn man statt des Kernelmodules asus-acpi das Modul asus-laptop verwendet)Ein
echo 1 > /sys/devices/platform/asus-laptop/ls_switch
schaltet den Sensor ein, ein
echo 0 > /sys/devices/platform/asus-laptop/ls_switch
Schaltet den Sensor aus.
Um diese Funktionalität nun auf die vorgesehene Funktionstaste Fn+A zu legen, müssen wir herausfinden, welchen ACPI-Event das drücken dieser Tastenkombination auslöst. Dazu verwendet man
acpi_listen
Der Output für die Funktionstasten Fn+A sollte in etwa so aussehen
hotkey ATKD 0000007a 0000001a
hotkey ATKD 0000007a 0000001b
Es kann aber auch so aussehen:
hotkey ATK0100:00 0000007a 0000001a
Die erste Zahl ist für uns interressant, die zweite ist nur ein Zähler.
Einige Funktionstasten erzeugen kein ACPI Event sondern einen normalen Keycode, anzusehen mit dem Programm xev welche mit xbindkeys belegt werden können, hier gehts aber um die ACPI-Events.
Wir erstellen die Datei
/etc/acpi/events/hotkeys
mit folgendem Inhalt:
event=hotkey (ATKD|HOTK) 0000007a
#(oder event=hotkey ATK0100:00 0000007a)
action=/etc/acpi/asus-lightsensor.sh
Als nächstes erstellen wir die Datei
/etc/acpi/asus-lightsensor.sh
mit folgendem Inhalt:
#!/bin/sh
LSSTATUS=`cat /sys/devices/platform/asus-laptop/ls_switch`
test -z $LSSTATUS && exit 1
if [ $LSSTATUS = 0 ]; then
echo 1 > /sys/devices/platform/asus-laptop/ls_switch
else
echo 0 > /sys/devices/platform/asus-laptop/ls_switch
fi
Dies ist ein Shellscript und muß ausführbar sein.
Zuletzt muß noch der acpid mittels /etc/init.d/acpid restart neu gestartet werden und der Lichtsensor lässt sich ab sofort über die Funktionstaste Fn+A ein- und ausschalten.