Wie Du die Funktionstasten Deines Laptops auf Fedora aktivierst - Seite 2


# Start Evolution (email button)
00000050)
checkuser
su - $user -c "evolution --component=mail &> /dev/null &"
;;

Die Konfiguration für den Web Browser ist fast die gleiche wie die obere.

# Start Firefox (browser button)
00000051)
checkuser
su - $user -c "firefox &> /dev/null &"
;;

Nun haben wir die Touchpad Konfiguration erreicht. Viele Laptops haben eine besondere Funktionstaste für das Touchpad - wir werden den synclient verwenden um unser Touchpad an und aus zu schalten wenn diese Funktionstaste gedrückt wird (wir haben den Synclient in Schritt 1.2 aktiviert). Dies ist Benutzer-unabhängig, wir müssen die "checkuser"-Funktion also nicht aufrufen.

# Toggle touchpad on|off (touchpad button)
0000006b)
tp_status=(`synclient -l | grep TouchpadOff`)

if [ ${tp_status[2]} = "1" ]
then synclient TouchpadOff=0
else synclient TouchpadOff=1
fi
;;

Als Nächstes müssen wir die Funktionstasten konfigurieren, um die Lautstärke zu verringern und zu erhöhen. Auch das ist Benutzer-unabhängig, denn es gibt nur eine Soundkarte (auf den meisten Systemen).

# Lower volume (Fn + F11)
00000031)
amixer sset Master Playback Volume 5%- &> /dev/null
;;

# Raise volume (Fn + F12)
00000030)
amixer sset Master Playback Volume 5%+ &> /dev/null
;;

Wir benutzen einen kleinen Trick um den Ton auszustellen, da die Real Mute Funktion von amixer ein großes Problem verursacht - die meisten Player brechen zusammen, wenn Du sie verwendest. Wenn die Mute-Funktionstaste gedrückt wird, überprüft das Skript, ob der Sound momentan aktiviert. Wenn ja, schreibt es den derzeitigen Status in eine Datei bevor es die Lautstärke auf 0% stellt. Wenn Du diese Funktionstaste erneut drückst (und die Lautstärke immer noch 0% ist), bezieht das Skript den letzten Lautstärken-Status aus der Datei und stellt ihn wieder her.

# Toggle mute (0% - last state) (Fn + F10)
00000032)
snd_status=(`amixer sget Master Playback Volume | egrep "[on|off]$"`)
cur_vol=$(echo ${snd_status[4]} | tr '[|]|%' ' ')

if [ $cur_vol != "0" ]
then
cat /dev/null > /opt/.volume
echo $cur_vol > /opt/.volume
amixer sset Master Playback Volume 0% &> /dev/null
else
sav_vol=$(cat /opt/.volume)
if [ $sav_vol = "" ]
then amixer sset Master Playback Volume 50% &> /dev/null
else amixer sset Master Playback Volume $sav_vol% &> /dev/null
fi
fi
;;

Zuguterletzt schließen wir die Case Abfrage und beenden das Skript.

esac

exit 0

Speichere die Datei und mach sie ausführbar.

chmod +x /etc/acpi/events/hotkeys.sh

Als Beispiel hier einam das komplette Script.
#!/bin/sh
PATH=/sbin:/bin:/usr/bin
# Possible values:
# "0" = multi user system # "your_username" = single user system user="olli"
# 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 }
# Assign actions to the hotkeys
case $3 in # Start Evolution (email button) 00000050) checkuser su - $user -c "evolution --component=mail &> /dev/null &" ;; # Start Firefox (browser button) 00000051) checkuser su - $user -c "firefox &> /dev/null &" ;; # Toggle touchpad on|off (touchpad button) 0000006b) tp_status=(`synclient -l | grep TouchpadOff`) if [ ${tp_status[2]} = "1" ] then synclient TouchpadOff=0 echo 1 > /sys/class/leds/asus:touchpad/brightness else synclient TouchpadOff=1 echo 0 > /sys/class/leds/asus:touchpad/brightness fi ;; # Lower volume (Fn + F11) 00000031) amixer sset Master Playback Volume 5%- &> /dev/null ;; # Raise volume (Fn + F12) 00000030) amixer sset Master Playback Volume 5%+ &> /dev/null ;; # Toggle mute (0% - last state) (Fn + F10) 00000032) snd_status=(`amixer sget Master Playback Volume | egrep "[on|off]$"`) cur_vol=$(echo ${snd_status[4]} | tr '[|]|%' ' ') if [ $cur_vol != "0" ] then cat /dev/null > /opt/.volume echo $cur_vol > /opt/.volume amixer sset Master Playback Volume 0% &> /dev/null else sav_vol=$(cat /opt/.volume) if [ $sav_vol = "" ] then amixer sset Master Playback Volume 50% &> /dev/null else amixer sset Master Playback Volume $sav_vol% &> /dev/null fi fi ;;
esac
exit 0
Aber Eines müssen wir immer noch tun. Es gibt einen Fehler, der den ACPI Daemon davon abhalten wird, die Befehle in unserem Skript auszuführen, nachdem Du Dein System gestartet/neu gestartet hast. Du musst den ACPI Daemon jedes Mal neu starten, nachdem Du Dich in ein GNOME Session eingeloggt hast. Ich nehme mal an, dass Du das nicht manuell machen möchtest :) Also habe ich einen kleinen Trick für Dich (Root Privilegien werden benötigt).

vi /etc/gdm/Init/Default

Füge folgende Zeilen am Ende der Datei vor "Exit" ein.

# acpid workaround
/etc/init.d/acpid restart

Der entsprechende Teil der Datei sollte wie folgt aussehen:

[...]
# acpid workaround
/etc/init.d/acpid restart
exit 0
Nun wird der ACPI Daemon nach jedem Login automatisch gestartet.

3 Die Xev Events handhaben

Vielleicht hast Du einige Funktionstasten entdeckt, die keinen ACPI Event in Schritt 1.3.1 aber einen Keycode Event in Schritt 1.3.2 erzeugt haben. Wir müssen diese nun konfigurieren - zuerst müssen wir die notwendige Konfigurationsdatei erstellen (ohne Root Privilegien!).

xbindkeys --defaults > $HOME/.xbindkeysrc

Lass sie uns nun bearbeiten.

vi ~/.xbindkeysrc

In der Datei siehst Du eine Beispiel-Konfiguration und einige Notizen. Die Konfiguration ist sehr einfach - füge einfach eine Zeile mit dem Befehl ein, der ausgeführt werden soll und unter dem Keycode (c:%keycode%), der zu dieser Aktion gehört. Hier ist ein Beispiel der Konfiguration auf meinem Laptop (einige Multimedia Funktionstasten wie Start/Pause, Stop etc...).
# MM button actions
# MM play/pause
"/usr/bin/audacious -p" c:162
# MM stop
"/usr/bin/audacious -s" c:164
# MM rewind
"/usr/bin/audacious -r" c:144
# MM forward
"/usr/bin/audacious -f" c:153
Speichere nun die Änderungen und füge xbindkeys (/usr/bin/xbindkeys) den Autostart Programmen (System - Preferences - Personal - Sessions) hinzu. Bitte beachte, dass Du Dich abmelden und wieder anmelden musst damit die Änderungen übernommen werden können.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte