Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /www/htdocs/v081610/asus/modules/dokuwiki/inc/html.php on line 154
Hotkeys unter Linux verwenden
Thema: Linux
Serie(n): M6-Serie
Fragestellung: Dieser Artikel soll zeigen, wie man die Hotkeys der M6N-Reihe unter Linux konfigurieren kann. Dieser Beitrag bezieht sich hauptsächlich auf Gentoo-Linux, weshalb die hier stehenden Skripte für andere Distributionen eventuell ein wenig angepasst werden müssen.
veraltet: Dieser Artikel wurde für ältere Kernelversionen geschrieben. Es gibt nun einen neuen Treiber im Kernel für die ASUS-Hotkeys, der viele der hier beschriebenen Schritte überflüssig macht, da der neue Treiber die Hotkeys wie die Zusatztasten einer Multimedia-Tastatur behandelt. neueren Treiber zusätzlich beschreiben
Kernelkonfiguration überprüfen
Damit die Hotkeys unter Linux funktionieren, muss die Unterstützung für sie im Kernel vorhanden sein. Um zu erkennen, ob das der Fall ist, gibt es verschiedene Möglichkeiten:
- Durchsuchen des Kernel-Logs (beispielsweise via dmesg): Finden sich hier zwei Zeilen ähnlich der folgenden, dann ist die Unterstützung bereits im Kernel:
Asus Laptop ACPI Extras version 0.29 M6N model detected, supported
- Wenn es ein Verzeichnis
/proc/acpi/asus
gibt, ist ebenfalls alles in Ordnung.
Ansonsten ist ein wenig Handarbeit angesagt, denn man muss den Kernel neu kompilieren. Unter Gentoo sollte normalerweise in /usr/src ein Unterverzeichnis mit dem Quellcode des aktuellen Kernels herumliegen, bei anderen Distributionen muss der Quellcode unter Umständen extra installiert werden.
Wichtig für das Funktionieren der Hotkeys sind folgende Kerneloptionen unter Power management options (ACPI, APM) –> ACPI (Advanced Configuration and Power Interface) Support
:
[*] ACPI Support <*> Button < > Generic Hotkey (EXPERIMENTAL) <*> ASUS/Medion Laptop Extras < > IBM ThinkPad Laptop Extras < > Toshiba Laptop Extras
Bei Kernelversionen ab 2.6.13-rc1 sollte man noch den Kernelparameter acpi_specific_hotkey
in die Konfiguration des Bootmanagers eintragen. Weitere Informationen zur Kernelkonfiguration speziell für das ASUS M6N findet man im ASUS-M6N-Kompendium oder allgemein in diesem Artikel im Gentoo-Wiki.
acpid installieren
Die Hotkeys des Notebooks lösen ACPI-Ereignisse aus, die dann von einem Daemon namens acpid verarbeitet werden. Unter Gentoo installiert man diesen als root durch ein einfaches emerge -av acpid
. Benutzer anderer Distributionen müssen selbst schauen, wie sie dieses Programm installieren. Falls alle Stricke reißen kann man das Paket auch hier herunterladen und selbst kompilieren.
Damit der Daemon bei jedem Start automatisch geladen wird, muss er in den Standard-Runlevel aufgenommen werden. Unter Gentoo erreicht man das durch diesen Befehl:
# rc-update add acpid default
Hilfsskripte
Diese Skripte führen im Wesentlichen die Aufgaben der Buttons aus und können auch von Hand aufgerufen werden.
cpuspeed-toggle
Dieses Skript wechselt zwischen den verschiedenen Speedstep-Modi hin- und her.
/usr/local/sbin/cpuspeed-toggle
:
#!/bin/sh # the order is: ondemand powersave performance # ondemand -> powersave if cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor | grep -q ondemand; then echo -n powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # powersave -> performance elif cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor | grep -q powersave; then echo -n performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor else echo -n ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor fi # update leds /usr/local/sbin/led-update
led-update
Dieses Skript schaltet die LEDs vorne am Notebook ein und aus, je nach momentanem Zustand des WLAN-Modules. Die Mail-LED wird hier als Indikator für die Modi powersave
und performance
missbraucht. Da diese Funktionalität von mehreren Skripten benötigt wird, wurde sie in ein eigenes Skript ausgelagert. So kann man dieses Skript zum Beispiel auch aufrufen, wenn das System aus dem Suspend-To-Disk aufwacht, denn die LEDs sind sonst nach dem Aufwachen aus.
/usr/local/sbin/led-update
:
#!/bin/sh # Helper script to update the LEDs of an ASUS notebook ###################################################### # update wlan led ################# if [ -e /var/lib/init.d/started/net.eth0 ]; then echo 1 > /proc/acpi/asus/wled else echo 0 > /proc/acpi/asus/wled fi # update e-mail led (which is misused as an indicator for manual speedstepping) ############################################################################### if cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor | grep -q powersave || cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor | grep -q performance || cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor | grep -q userspace; then echo 1 > /proc/acpi/asus/mled else echo 0 > /proc/acpi/asus/mled fi exit 0
wlan-power
Dieses Skript schaltet das WLAN-Modul je nach Übergabewert ein oder aus.
/usr/local/sbin/wlan-power
:
#!/bin/sh case "$1" in on ) echo 0 > '/sys/bus/pci/drivers/ipw2100/0000:02:02.0/rf_kill' ;; off ) echo 1 > '/sys/bus/pci/drivers/ipw2100/0000:02:02.0/rf_kill' ;; * ) echo "$0: syntax: $0 on | off" esac
wlan-toggle
Dieses Stück Code fährt das Netzwerk herunter und schaltet das WLAN-Modul ab, wenn es vorher eingeschaltet war. Ansonsten wird das WLAN-Modul eingeschaltet und das Netzwerk hochgefahren. Das Netzwerkmanagement, also das Hoch- und Runterfahren der Verbindung, das Holen einer Internetadresse via DHCP usw. wird hier von den init-Skripten von Gentoo erledigt. Gentoo-User können hier nachlesen, wie man WLAN unter Gentoo verwendet. Benutzer anderer Distributionen müssen das unten stehende Skript entsprechend den Besonderheiten ihrer Distribution anpassen.
/usr/local/sbin/wlan-toggle
:
#!/bin/sh if [ -e /var/lib/init.d/started/net.eth0 ]; then /etc/init.d/net.eth0 stop && /usr/local/sbin/wlan-power off && /usr/local/sbin/led-update ; else /usr/local/sbin/wlan-power on && /etc/init.d/net.eth0 start && /usr/local/sbin/led-update ; fi
Konfiguration von acpid
Nachdem wir die Skripte angelegt haben, müssen wir dafür sorgen, dass die Skripte ordnungsgemäß aufgerufen werden, wenn einer der Hotkeys gedrückt wird. Hierfür müssen wir den acpid konfigurieren. Unter Gentoo legt man dazu im Verzeichnis /etc/acpi/events
eine Datei an, die dafür sorgt, dass beim Drücken eines Hotkeys das Skript /etc/acpi/hotkey.sh
aufgerufen wird, welches sich um die weitere Verarbeitung des Ereignisses kümmert.
/etc/acpi/events/hotkey
:
event=hotkey ATKD .* action=/etc/acpi/hotkey.sh %e
/etc/acpi/hotkey.sh
:
#!/bin/sh case "$3" in 00000032) /usr/bin/amixer set Master toggle ;; 00000030) /usr/bin/amixer set Master 1+ ;; 00000031) /usr/bin/amixer set Master 1- ;; 0000005d) /usr/local/sbin/wlan-toggle ;; 0000005c) /usr/local/sbin/cpuspeed-toggle ;; esac
Wie man sieht, habe ich nicht alle Tasten konfiguriert.
Man sollte beim Erweitern dieses Skriptes aber vorsichtig sein, denn dieses Skript läuft mit root-Rechten und vererbt diese somit auch an die Programme, die von diesem Skript gestartet werden. Deshalb sollte man für Programme, die in irgendeiner Weise Benutzereingaben erwarten mit
su -c /usr/bin/my_program my_user
den Benutzer wechseln.
Für die Einschalttaste und Fn+F1 (Ruhezustand aktivieren) gibt es spezielle Ereignisse. Die Einschalttaste fährt in der Standardkonfiguration von Gentoo den Rechner herunter:
/etc/acpi/events/default
:
event=.* action=/etc/acpi/default.sh %e
/etc/acpi/default.sh
:
#!/bin/sh # Default acpi script that takes an entry for all actions set $* group=${1/\/*/} action=${1/*\//} case "$group" in button) case "$action" in power) /sbin/init 0 ;; # *) logger "ACPI action $action is not defined" # ;; esac ;; *) # logger "ACPI group $group / action $action is not defined" ;; esac
Ich habe ein paar Zeilen auskommentiert, damit mein Systemlog nicht ständig mit unnötigen ACPI-Meldungen zugemüllt wird.
Nun fehlt noch die Konfiguration von Fn+F1. Hier ist eine Beispielkonfiguration, die den Rechner in den Ruhezustand bringt, wenn man diese Tastenkombination drückt:
/etc/acpi/events/sleepbutton
:
event=button/sleep SLPB .* action=/etc/acpi/sleepbutton.sh %e
/etc/acpi/sleepbutton.sh
#!/bin/sh
/usr/sbin/hibernate
Diese Konfiguration setzt natürlich voraus, dass swsusp oder Suspend 2 auf dem Rechner funktioniert. Außerdem muss das hibernate-script installiert und eingerichtet sein.
Abschluss der Konfiguration
Um nicht das ganze System neu starten zu müssen (wir sind hier nicht bei Windows ), starten wir den acpid, um die Konfiguration zu testen:
# /etc/init.d/acpid start
Anhang: Tastencodes
Die folgenden Tabellen geben einen Überblick über die Tastencodes der Hotkeys, sodass es nicht schwer fallen sollte, das oben stehende Skript nach eigenen Wünschen anzupassen.
Man kann die Tastencodes selbst herausfinden, indem man als normaler User acpi_listen
startet und auf den Tasten herumdrückt:
$ acpi_listen hotkey ATKD 00000050 00000000 hotkey ATKD 00000050 00000001 hotkey ATKD 00000051 00000000
Hier habe ich zwei mal die E-Mail-Taste gedrückt und einmal die Internet-Taste. Die dritte Spalte ist der gesuchte Tastencode. Die vierte Spalte ist ein (hexadezimaler) Zähler, der anzeigt, wie oft die Taste schon gedrückt wurde.
Tasten über der regulären Tastatur
Taste | Code |
---|---|
00000050 | |
Internet | 00000051 |
WLAN | 0000005d |
Touchpad an/aus | 0000006a |
Speedstep | 0000005c |
Tasten an der linken Seite
Taste | Code |
---|---|
CD-Zurück | 00000040 |
CD-Stopp | 00000043 |
CD-Start | 00000045 |
CD-Vorwärts | 00000041 |
CD-Schieber unten | 0000004c |
Tastenkombinationen mit Fn
Taste | Code |
---|---|
Fn+F2 = WLAN | 0000005d |
Fn+F5 = Display dunkler | 00000020-0000002e |
Fn+F6 = Display heller | 00000011-0000001f |
Fn+F7 = Hintergrundbeleuchtung an | 00000033 |
Fn+F7 = Hintergrundbeleuchtung aus | 00000034 |
Fn+F8 = Anzeige umschalten | 00000061 |
Fn+F10 = Ton an/aus | 00000032 |
Fn+F11 = leiser | 00000031 |
Fn+F12 = lauter | 00000030 |
Ein paar Hinweise hierzu:
- Die Tasten Fn+F5 bis Fn+F7 müssen normalerweise nicht extra konfiguriert werden, denn sie funktionieren bereits ohne zusätzliches Eingreifen.
- Die Codes für Fn+F6 und Fn+F7 sind von der gerade eingestellten Helligkeit abhängig. Je heller das Display ist, desto größer ist die letzte Stelle des Codes. So ist der Tastencode für Fn+F6 0000001f, wenn das Display durch den soeben erfolgten Tastendruck auf maximale Helligkeit eingestellt wurde. Wenn das Display von der minimalen Helligkeitseinstellung eine Stufe heller gestellt wurde, ist der Tastencode dagegen 00000011.
Deprecated: Function eregi() is deprecated in /www/htdocs/v081610/asus/footer.php on line 30
Deprecated: Function split() is deprecated in /www/htdocs/v081610/asus/modules/Xanthia/pnuserapi.php on line 500
Deprecated: Function ereg_replace() is deprecated in /www/htdocs/v081610/asus/modules/Xanthia/pnclasses/Xanthia.php on line 562