2015-06-21 10 views
5

Interesuje mnie napisanie programu dla systemu Linux, który odczyta WSZYSTKIE naciśnięcia klawiszy, przetworzy je, a następnie wyświetli wynik dla pozostałych uruchomionych procesów. Zasadniczo, WSZYSTKIE wejścia z klawiatury muszą przejść do tego programu, a sam ten program ... Wtedy program będzie działał jak klawiatura dla reszty komputera. Zasadniczo chcę zrobić coś na kształt tekstu predykcyjnego na urządzeniach z Androidem, więc mój program będzie działał jak filtr.Jak przechwycić wejście klawiatury na najniższym poziomie w systemie Linux?

To, o co pytam, to w zasadzie to, jak skierować wszystkie wydarzenia z klawiatury do mojego programu. Chociaż nie szukam kodu, chciałbym wiedzieć, jaka część programowania linux/systemu linux muszę nauczyć się, aby móc wykonać to zadanie? to, ponieważ robię to, próbując lepiej poznać Linuksa.

+4

1. Uzyskaj kod źródłowy jądra Linux. 2. Zmodyfikuj sterownik klawiatury, aby zrobić to, co chcesz. – Steve

+0

Oznaczałoby to, że zmodyfikuję jądro Linuxa, a następnie będę musiał je ponownie zainstalować? Ok, nie ma problemu ... ale czy jest jakiś sposób na zrobienie tego w przestrzeni użytkownika, więc program może być udostępniony użytkownikom i zainstalowany z łatwością? – FutureSci

+1

'Najniższy poziom'! =' Userspace'. ... Pakiety jądra nie są trudne do zainstalowania. – deviantfan

Odpowiedz

1

Nie należy zmodyfikować sterowniki klawiatury, ponieważ będzie to wymagać, aby mieć rozwiązanie dla każdego producenta klawiatury. (A jest ich całkiem sporo z nich ..)

Zamiast tego należy zaprogramować funkcję jądra, które jest wywoływane przez wszystkie sterowniki przed przekazaniem danych wejściowych do stosu.

Na początek, można załatać input_event który jest zwykle nazywany przez wszystkich kierowców wejściowych see documentation here (nie tylko klawiszowych ale również mysz i inne urządzenia)

W każdym razie trzeba będzie „dekodowania” kod skanowania sygnału wejściowego gdzie przydatna może być dokumentacja this.

Aby uzyskać więcej informacji na temat łatania jądra przeczytaj here i here.