Klawisze multimedialne

Mój Lenovo posiada klawisze multimedialne. Klawisze mute, ścisz, podgłoś są zarówno jako klawisze osobne, jak i ich funkcje są dostępne poprzez kombinację klawisza Fn i Esc, F1 lub F2. Są także kombinacje, które opisane jako Play/Pause, Prev i Next. Oczywiście piszę tutaj ich reprezentację słowną, w rzeczywistości są to strzałki takie jak na dvd, czy innym urządzeniu multimedialnym.

Klawisze te nie są standardowo aktywne i żeby zadziałały trzeba trochę pogrzebać. Ostanio męczyłem się ze zrobieniem tego zadania tak, aby klawisze były ustawiane podczas startu środowiska graficznego. Do dziś miałem z tym problem i nie mogłem znaleźć odpwiedniego rozwiązania, musiałem ręcznie za każdym razem odpalać skrypt, żeby przyciski kontrolowały to do czego zostały stworzone.

A więc może opiszę jak uczyniłem swoje życie łatwiejszym.

Zacznyjmy od tego, że trzeba zobaczyć jakie kody mają nasze klawisze, tzn. taki jakby id na klawiaturze. Zrobimy to za pomocą narzędzia “xev”. Tutaj pokaże jak ustawić jeden klawisz, resztę robi się analogicznie. Włączmy exv w konsoli. Wyświetla nam takie oto dane dla danego klawisza, wciśnijmy klawisz mute:

KeyPress event, serial 31, synthetic NO, window 0x3400001,
root 0x66, subw 0x0, time 1925304741, (-75,-14), root:(370,472),
state 0x0, keycode 160 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False


KeyRelease event, serial 31, synthetic NO, window 0x3400001,
root 0x66, subw 0x0, time 1925304834, (-75,-14), root:(370,472),
state 0x0, keycode 160 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

Są to dwa bloki informacji dla zdarzenia naciśniecia i zwolnienia klawisza. Nas interesuje ta linijka:

state 0x0, keycode 160 (keysym 0x0, NoSymbol), same_screen YES,

Jest tam napisane, że kodem tego klawisza jest 160 i że nie ma on przypisanego żadnego symbolu. Zakładam, że nie zrobiono żadnych modyfikacji mapy klawiszy i symbole, które ja użyję są wolne. A więc tak, tworzymy sobie plik ~/.Xmodmap i w nim umieszczamy coś takiego:

keycode 160 = XF86AudioMute

Schemat jest taki keycode (kod klawisza) = (symbol). Ja używam KDE i KDM więc zademonstruję mój przypadek. Trzeba w pliku “$KDEDIR/share/config/kdm/Xsession” dopisać na początek, zaraz za #!/bin/bash:

if [ -f $HOME/.Xmodmap ]; then
/usr/bin/xmodmap $HOME/.Xmodmap
fi

Teraz symbole będą przypisywane przyciskom podczas startu. Ale, żeby spełanił swoją funkcję trzeba jeszcze podpisać pod niego jakąś akcję klawiszową, w tym przypadku jest to całkowite wyciszenie dźwięku, czyli funkcja mute. Aby tego dokonać wchodzimy (w przypadku KDE 3.5) “Centrum sterowania->Regionalne i dostępność->Akcje klawiszowe” i tworzymy nowe działanie. Wpisujemy w Nazwę działania Mute (albo cokolwiek tam chcemy) i z listy rozwijalnej wybieramy “Skrót klawiszowy->Funkcja DCOP (proste)”. Przechodzimy na następną zakładkę, Skrót klawiszowy, wciskamy szary prostokąt i wciskamy klawisz Mute, to nam ustawi ten klawisz jako wywołujący funkcję. Teraz na ostatniej zakładce wpisujemy tak:

Zdalny program: kmix
Zdalny obiekt: Mixer0
Wywołana funkcja: toggleMasterMute

Klikamy zastosuj, restart kde i powinno działać ;). Z innymi klawiszami jest podobnie, pierwsza część pozostaje taka sama, czyli jak już zrobiliśmy plik .Xmodmap, to do niego wystarczy dodać kolejne wpisy. Nazwy symboli można znaleźć w pliku “/usr/share/X11/XKeysymDB”. Funkcje i programy, do których możma przypisać klawisze, można znaleźć poprzez KDCOP.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s