Bindowanie klawiszy nie tylko w Xach

Zapewne większość użytkowników klawiatur multimedialnych (i nie tylko) zna metodę bindowania klawiszy za pomocą programu xbindkeys. Minusem tego programu jest to, że (jak sama nazwa wskazuje) działa on tylko podczas pracy w Xach. I tu z pomocą przychodzi nam actkbd, który pozwala na korzystanie z przybindowanych klawiszy także podczas pracy w konsoli.

actkbd do działania wymaga kernela z serii 2.6 z działającym interfejsem evdev. Obsługa evdev przez nasz kernel będzie się objawiała istnieniem plików /dev/input/event*. Jeśli plików tych tam nie ma możemy jeszcze spróbować załadować moduł evdev, a jeśli to nie pomoże to czeka nas kompilacja kernela.. ;)

Instalacja i rozpoznanie sprzętu

Pierwszym krokiem jest oczywiście instalacja actkbd, której dokonujemy za pomocą naszego ulubionego zarządcy pakietów lub ze źródeł.

Kolejny krok to identyfikacja urządzeń wejściowych jakie mamy podłączone do komputera:

$ cat /proc/bus/input/devices

I: Bus=0003 Vendor=046d Product=c03e Version=0110
N: Name="Logitech USB-PS/2 Optical Mouse"
P: Phys=usb-0000:00:1d.3-1/input0
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=mouse0 event0
B: EV=17
B: KEY=70000 0 0 0 0
B: REL=103
B: MSC=10

I: Bus=0003 Vendor=046d Product=c312 Version=0110
N: Name="BTC USB Multimedia Keyboard"
P: Phys=usb-0000:00:1d.3-2/input0
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=kbd event1
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
Listę urządzeń trochę skróciłem - mogą na niej pojawić się jeszcze rzeczy takie jak:
  • Power Button (FF) - przycisk power,
  • Power Button (CM) - nie mam pojęcia co to ;),
  • PC Speaker - głośniczek systemowy,
  • porty podczerwieni - nazwy różne w zależności od modelu,
  • dodatkowe przyciski z laptopa,
  • pewnie jeszcze wiele innych dziwnych rzeczy.
Dla nas istotne są dwie rzeczy: nazwa urządzenia w polu "Name" oraz pole "Handlers", a konkretnie numer pliku event, który odpowiada danemu urządzeniu.

Jeśli odnaleźliśmy plik odpowiadający naszemu urządzeniu możemy sprawdzić jakie zdarzenia i kody klawiszy z niego otrzymujemy, ale wcześniej musimy utworzyć pusty pliku konfiguracji dla actkbd:

$ touch /etc/actkbd.conf
Teraz już uruchamiamy actkbd w trybie odczytywania kodów klawiszy:
$ sudo actkbd -s -d /dev/input/odpowiedni_plik_event
Na ekranie powinny nam się wyświetlać kody klawiszy, które wciskamy (nazwy klawiszy dopisałem):
Keys: 56	-- alt
Keys: 15+56	-- alt+tab
Keys: 56	-- alt
Keys: 15+56	-- alt+tab
Keys: 29	-- ctrl
Keys: 29+46	-- ctrl+c

Konfiguracja

Kiedy znamy już kody klawiszy, które chcemy przybindować możemy przejść do pisania pliku konfiguracyjnego. Poszczególne linie piszemy według takiego schematu:

klawisze:typ_zdarzenia:atrybuty:polecenie
Pole "klawisze" zawiera oczywiście kody klawiszy, które odczytaliśmy powyżej.
Pole "typ_zdarzenia" może być jedną z trzech opcji:
  • key - wciśnięcie klawisza,
  • rep - powtarzanie (przytrzymanie) klawisza,
  • rel - puszczenie klawisza.
Jeśli pozostawimy je puste przyjmie domyślną wartość, czyli "key".
Z pole "atrybuty" nie będziemy korzystać, jego szczegółowy opis znajdziemy w pliku README programu.
Pole "command" to oczywiście polecenie jakie ma zostać wykonane po naciśnięciu wybranych klawiszy.

Kiedy odpowiednio skonfigurowaliśmy nasze skróty możemy przejść do testowania. Zanim jednak zaczniemy testy, które mogą nam skutecznie zablokować dostęp do klawiatury odpalmy na jakimś wolnym terminalu polecenie:

sleep 30; sudo killall actkbd
które po 30 sekundach zabije demona.. :P
Testy możemy rozpocząć po uruchomieniu actkbd z opcją -D:
sudo actkbd -d /dev/input/odpowiedni_plik_event -D

Przykłady wykorzystania

Globalne skróty Amaroka w całym systemie

Przy częstej pracy w konsoli denerwujące jest to, że aby zmienić piosenkę w Amaroku trzeba przełączyć się do Xów. Aby to zmienić wystarczy stworzyć takie bindowania:

44+125:::dcop amarok player prev
45+125:::dcop amarok player play
46+125:::dcop amarok player playPause
47+125:::dcop amarok player stop
48+125:::dcop amarok player next
Należy jeszcze wyłączyć oryginalne skróty Amaroka, aby akcja nie była wywoływana dwa razy.

Wykorzystanie przycisku "Power" na obudowie komputera

Jeśli po wyświetleniu dostępnych urządzeń na liście odnaleźliśmy "Power button (FF)" także możemy go wykorzystać. Sprawdzamy kod przycisku:

sudo actkbd -s -d /dev/input/event_przycisku_power
Wpisujemy go do pliku konfiguracyjnego i uruchamiamy kolejną instancję demona:
sudo actkbd -D -d /dev/input/event_przycisku_power

Automatyczne uruchamianie

Mamy wiele możliwości, jednak chyba każda z nich ma swoje wady i zalety. Pierwszym sposobem są skrypty startowe:
Wersja dla Gentoo (wrzucamy do pliku /etc/init.d/actkbd, a potem wydajemy polecenie rc-update add sctkbd default):

#!/sbin/runscript

start() {
        ebegin "Starting actkbd daemon"
        start-stop-daemon --start --exec /usr/bin/actkbd -- -D
        eend $?
}

stop() {
        ebegin "Stopping actkbd daemon"
        start-stop-daemon --stop --exec /usr/bin/actkbd
        eend $?
Wersja dla Debiana (i innych korzystających z System V). Oczywiście, skryptów tych można dorzucić wiele bajerów, to jest jedynie podstawowa wersja.

Zalety tego rozwiązania to dostępność skrótów jeszcze przed zalogowaniem się użytkownika. Do wad możemy zaliczyć niemożliwość uzyskania dostępu do serwera dcop oraz... dostępność skrótów jeszcze przed zalogowaniem się użytkownika, co może być poważną luką w bezpieczeństwie systemu.

Kolejny sposób to po prostu dodanie wywołania demona actkbd do pliku .bashrc:

if [[ `ps -C actkbd | grep actkbd` = "" ]] ; then
	sudo /usr/bin/actkbd -D;
fi

I to w sumie na tyle. Możliwości actkbd są o wiele większe niż proste bindowanie klawiszy, po więcej info odsyłam do źródeł (linki poniżej). Dla moich zastosowań (o których jeszcze kiedyś napiszę) program ten wydaje się być idealny.

Zobacz też

Komentarze do wpisu "Bindowanie klawiszy nie tylko w Xach":

1.

Scytale napisał(a):
30 września 2008, 14:01:08

Dzięki wielkie :)
Porzebowałem czegoś takiego jak actkbd.

PS.
Popraw linki do homepage actkbd i xbindkeys

2.

pbm napisał(a):
30 września 2008, 14:02:57

@Scytale: thx, poprawione...

3.

fooshmer napisał(a):
30 września 2008, 16:16:52

Napisałem kiedyś coś podobnego dla HP Jornada 720, ale jest przenośne. Źródła tutaj:
http://filip.eu.org/jornada/jinputd-0.1.3.tar.bz2

Dodaj komentarz: