Version 1.0
Author: Oliver Meyer <o [dot] meyer [at] projektfarm [dot] de>
Last edited 05/06/2008
Diese Anleitung veranschaulicht wie Du die Funktionstasten Deines Laptops auf Fedora aktivierst. Ich habe dies mit Fedora 8 getestet, es sollte aber auch auf anderen Fedora Versionen funktionieren - und vielleicht mit geringfügigen Änderungen auch auf anderen Distributionen.
Diese Anleitung ist ein praktischer Leitfaden ohne jegliche Garantie - theoretisches Hintergrundwissen wird nicht abgedeckt. Es gibt viele Möglichkeiten ein solches System einzurichten - dies ist der Weg, den ich gewählt habe.
1 Vorbereitung
1.1 Benötigte Pakete
Wir werden xbindkeys verwenden, um den Funktionstasten Funktionen zuzuweisen, die keinen ACPI Event erzeugen.
- xbindkeys
1.2 Xserver Konfiguration
Um das Touchpad ein und aus schalten zu können, müssen wir die xserver Konfiguration anpassen (Root Privilegien werden benötigt).
vi /etc/X11/xorg.conf
Suche den Bereich “InputDevice”mit dem Identifier “Synaptics” und füge folgende Zeile in diesen Bereich ein.
Option “SHMConfig” “on”
Dieser Bereich sollte nun wie folgt aussehen:
Section "InputDevice"
Identifier "Synaptics"
Driver "synaptics"
Option "Device" "/dev/input/mice"
Option "Protocol" "auto-dev"
Option "Emulate3Buttons" "yes"
Option "SHMConfig" "on"
EndSection
Speichere danach die Änderungen. Melde Dich danach ab und wieder an um die Änderungen zu übernehmen.
1.3 Funktionstasten-Events
Lass uns nun herausfinden, was passiert, wenn wir die Funktionstasten betätigen.
1.3.1 ACPI
Die meisten Funktionstasten wie zum Beispiel die “Fn-Tasten” erzeugen einen ACPI Event - wir sehen uns diese also einmal an. Führe dies aus …
acpi_listen
… und drücke ein paar Mal eine Funktionstaste. Du solltest in etwa folgende Ausgabe sehen:
hotkey ATKD 00000031 0000001a
hotkey ATKD 00000031 0000001b
hotkey ATKD 00000031 0000001c
Wie Du siehst ist die erste Zahle (Position3) statisch und die zweite dynamisch. Wir brauchen nur die statische Nummer. Drücke nun all Deine Funktionstasten eine nach der anderen und notiere die statische Nummer - die brauchst Du später.
1.3.2 Xev
Einige Funktionstasten erzeugen statt eines ACPI Events einen Keycode.
xev
Ein neues Fenster mit einem kleinen Viereck öffnet sich. Bewege den Cursor in das Viereck und drücke alle Funktionstasten, die im vorherigen Schritt keinen ACPI Event erzeugt haben. Bewege Deine Mouse währenddessen nicht - sonst siehst Du eine Menge Events, die nur von Deiner Mouse erzeugt werden und nicht von den Funktionstasten. Im Terminalfenster siehst Du den Keycode für jede Funktionstaste - so könnte es aussehen:
KeyPress event, serial 30, synthetic NO, window 0×3a00001,
root 0×13b, subw 0×3a00002, time 3282991713, (49,43), root:(1105,203),
state 0×0, keycode 162 (keysym 0×0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0×3a00001,
root 0×13b, subw 0×3a00002, time 3282991781, (49,43), root:(1105,203),
state 0×0, keycode 162 (keysym 0×0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Notiere die Keycode Nummern - Du brauchst sie später.
2 Die ACPI Events handhaben
Zunächst müssen wir dem ACPI Event-Handler mitteilen, dass unser besonderes Skript, das wir gleich erstellen werden, ausgeführt werden soll, wenn eine Funktionstaste gedrückt wird (Root Privilegien werden benötigt).
vi /etc/acpi/events/hotkeys.conf
Der Inhalt sollte wie folgt aussehen:
# Hotkey configuration
event=hotkey (ATKD|HOTK)* action=/etc/acpi/actions/hotkeys.sh %e
Als Nächstes erstellen wir ein besonderes Skript, das die Funktionstasten-Events abarbeitet (Root Privilegien werden benötigt).
vi /etc/acpi/events/hotkeys.sh
Im Folgenden werde ich die einzelnen Teile des Skripts beschreiben. Zuerst müssen wir die Shell und die Pfade, in denen das Skript die Anwendungen sucht, die Du ausführen möchtest, definieren.
#!/bin/sh
PATH=/sbin:/bin:/usr/bin
Das Skript kann auf multi-Benutzer Systemen mehr als eine Session handhaben. Wenn Du auf dem System der einzige Benutzer sein solltest, dann gib Deinen Benuzternamen in das entsprechende Feld ein.
# Possible values:
# “0″ = multi user system
# “your_username” = single user system
user=”0″
Dies ist der Teil, der den Benutzer der derzeitigen Session auf multi-Benutzer Systemen erkennt - hier müssen wir nichts einstellen.
# Detect the currently active user on multi user systems
checkuser()
{
if [ $user = "0" ]
then
uid_session=$(
ck-list-sessions |
awk ‘
/^Session[0-9]+:$/ { uid = active = x11 = “” ; next }
{ gsub(/”’/, “”, $3) }
$1 == “uid” { uid = $3 }
$1 == “active” { active = $3 }
$1 == “x11-display” { x11 = $3 }
active == “TRUE” && x11 != “” {
print uid
exit
}’
)
user_data=(`cat /etc/passwd | grep $uid_session | tr ‘:’ ‘ ‘`)
user=${user_data[0]}
fi
}
Nun sind wir beim interessanten Teil angekommen - hier weisen wir den Funktionstasten Aktionen zu. Erinnere Dich an die Funktionstasten-Events von Schritt 1.3.1 - die dritte Stelle der ACPI Events beinhaltet die statische Nummer, die wir benötigen, um die Events unterscheiden zu können. Da wir den ganzen ACPI Event an dieses Skript übergeben haben, müssen wir dem Skript mitteilen, dass es die dritte Stelle des Events verwenden soll - dies ist in $3.
# Assign actions to the hotkeys
case $3 in
Die folgenden Konfigurationen der Funktionstasten sind Beispiele von meinem Laptop (ASUS G1S) - Du musst also die Event-Nummern ersetzen, so dass sie auf Dein System passen. Wir starten den E-Mail Client Evolution. Wenn ich die E-Mail-Funktionstaste auf meinem Laptop drücke, ist die statische Event-Nummer 00000050. Wenn die Taste gedrückt wird, wird die Funktion “checkuser” aufgerufen, um den Bentuzer der derzeitigen Session erkennen zu können. Danach führt das Skript Evolution unter den Rechten des aktuell angemeldeten Bentuzers aus und schickt die Ausgabe ins Nirwana
Das ist sehr wichtig - sonst würde die Anwendung das Skript blocken bis Du die Anwendung schließt. Vergiss also nicht ” &> /dev/null &” an Befehle anzuhängen, die eine Anwendung ausführen, die ausgeführt wird bis Du sie schließt. Hänge ” &> /dev/null” an andere Anwendungen an, die eine Ausgabe erzeugen.
- Wie Du die Funktionstasten Deines Laptops auf Fedora aktivierst - Seite 1
- Wie Du die Funktionstasten Deines Laptops auf Fedora aktivierst - Seite 2

