Po zastanowieniu się, jak zmienić mapowanie kodów skanowania za pomocą kodów kluczy udev
, zobacz to pytanie , zastanawiałem się, w jaki sposób te kody kluczy (lub zdarzenia, jeśli chcesz) są mapowane na odpowiednie działania.
Na przykład, jeśli naciśniesz volume upna klawiaturze, zostanie wysłany kod skanowania, który zostanie następnie przekonwertowany na volumeup
kod klucza. Ale w jaki sposób przechwytuje się ten kod klucza, zwiększa głośność i wyświetla odpowiednie powiadomienie?
Domyślam się, że gdzieś trzeba wywołać skrypt, więc chciałbym wiedzieć, gdzie są te skrypty.
EDYCJA: Wspomnianych kodów kluczowych nie należy mylić ze xev
zwrotami kodów kluczowych , ale ja też jestem nimi zainteresowany;)
notify-osd
działa? Myślę, że tam wysyłane są powiadomienia o jasności ...Odpowiedzi:
Ok, znalazłem to na https://help.ubuntu.com/community/MultimediaKeys
Więc kody są mapowane na klucze, więc gdzie są klucze? Znalazłem odpowiedź na to pytanie: Gdzie znajdę teraz listę wszystkich kluczy X? Ponieważ mówimy o klawiszach głośności, można je znaleźć w
XF86keysym.h
kodzie źródłowym wymienionym w odpowiedzi.W tym pliku na moim komputerze znalazłem następujące dane dla woluminu:
Dziwne ... inne wartości niż cokolwiek innego, może istnieje wiele systemów do obsługi kluczy? http://crunchbang.org/forums/viewtopic.php?id=16656
Korzystam z Xubuntu i aby kontrolować klawisze, muszę ręcznie mapować akcje (jak to. Jak zmienić skróty klawiaturowe w Xubuntu? ). Jednak powiadomienia wydają się niezależne, jakby odbierały naciśnięcie klawisza i działały odpowiednio. Może to oznaczać, że inne programy w Ubuntu są skonfigurowane w ten sposób, więc nie ma potrzeby mapowania skryptów na klawisze.
Jestem więc całkiem pewien, że programy odbierają teraz klucz (więc nie można znaleźć skryptu).
W Xubuntu miałem ten problem z Pulse Audio i używając niestandardowych skryptów do zmiany głośności. Wydawało się, że Pulse przechwytuje klawisz Wycisz, klawisz Wycisz wycisza Alsa i PulseAudio, ale wyłącza wyciszenie tylko Alsy stworzonej dla interesujących obejść.
Sprawdź to na temat NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes
Jeśli spojrzysz na te diagramy: https://wiki.ubuntu.com/NotifyOSD#Architecture
Zwłaszcza ten:
Pokazuje, że istnieje „odbiornik kluczy sprzętowych”, który otrzymuje dane z DBus lub HAL? Następnie „pobiera element wizualny z systemu”, który ikony dźwięku i jasności znajdują się w źródle Notify-OSD, a następnie tworzy bańkę stamtąd.
To wszystko jest szalone mylące, ale o ile rozumiem (do tej pory):
raw scancode (np. e016)> kod klucza (np. 160)> keyym (np. XF86AudioMute)> demon ustawień gnome (np. zwiększanie głośności)> sygnał DBus> detektor kluczy sprzętowych dla powiadomień-osd (lub innych słuchanie programu)
źródło
W większości przypadków nie są uruchamiane skrypty. Powodują wysyłanie zdarzeń do menedżera okien lub demona ustawień. Jedyny raz, kiedy jestem świadomy skryptów w tym procesie, to konfigurowanie niestandardowych powiązań klawiszy. W przypadku niestandardowych skrótów klawiszowych możesz dodać wiersze poleceń (pliki wykonywalne lub skrypty) i powiązać je z kluczami.
Proszę zobaczyć odpowiedź, którą napisałem na pytanie dotyczące tworzenia kopii zapasowych skrótów klawiszowych w Ubuntu: Gdzie są przechowywane skróty klawiaturowe GNOME? Mam skrypt, który tworzy kopię zapasową lub przywraca wszystkie skróty klawiszowe, w tym niestandardowe. Po uruchomieniu skryptu można zobaczyć, gdzie w dconf są przechowywane skróty klawiszowe i która aplikacja jest powiadamiana o kluczowym zdarzeniu.
źródło
Odpowiedź dotyczy kierowców .
Każdy sprzęt musi mieć sterownik, aby mógł współpracować z systemem operacyjnym.
Cytując http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :
Urządzenie ma rejestr urządzenia, który przechowuje bity kontroli / stanu i bity danych. Ilekroć niektóre dane muszą zostać przesłane, zwykle są wysyłane przez ustawienie bitów danych.
Za każdym razem, gdy naciśniesz jakiś klawisz na klawiaturze, niektóre dane są zapisywane w rejestrze. Te bity są odczytywane przez sterownik urządzenia i wykonywane jest odpowiednie działanie. To jest krótkie wyjaśnienie.
Spinki do mankietów:
Jeśli jesteś zainteresowany, polecam przeczytanie tej serii na temat sterowników urządzeń, składającej się z 17 dobrze napisanych artykułów linuxforu : http://www.linuxforu.com/tag/linux-device-drivers-series/ .
Możesz przeczytać konkretny dokument zawierający instrukcje, jak napisać sterownik urządzenia dla klawiatury USB: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf
Jeśli jesteś bardzo podekscytowany sterownikami urządzeń z systemem Linux, przeczytaj książkę „Linux Device Drivers”, która jest dostępna w formacie pdf za darmo: http://lwn.net/Kernel/LDD3/
źródło
evdev
sterownika, ale nie widzę w jaki sposób byłoby pomocne tutaj ...