Rozwiązanie za pomocą udev
Ponieważ HAL jest przestarzałe i udev
jest teraz używane, takie podejście jest lepsze niż moja inna odpowiedź (chociaż myślę, że rozwiązanie wykorzystujące HAL jest prostsze).
Jednak w przypadku wielu klawiszy funkcyjnych możesz po prostu użyć Ustawienia systemowe> Klawiatura> Skróty, aby powiązać skrypt, wypróbuj to najpierw! Oszczędza ci to wielu kłopotów. Na przykład klawisze jasności to nie działa (nie mam pojęcia, dlaczego nie), więc jeśli chcesz wiedzieć, jak zmienić zachowanie np. Klawiszy jasności, czytaj dalej.
UWAGA : Jeśli korzystasz z notebooka Samsung, możesz naprawić wszystkie (w zależności od modelu) klawisze funkcyjne, instalując samsung-tools
pakiet ze strony http://www.voria.org/forum/
To howto zakłada, że wiesz, jak korzystać z terminala i używa vim
edytora. Jeśli nie wiesz, vim
zastąp go w poleceniach jednym gedit
lub nano
.
Określanie klawiatury
/lib/udev/findkeyboards
powinien wydrukować klawiatury podłączone do komputera, w moim przypadku
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Teraz są dwie opcje:
Klawiatury USB :
jeśli chcesz ponownie przypisać klawiaturę USB, sprawdź je, uruchamiając
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
gdzie musisz zastąpić 9 w instrukcji awk prawidłową liczbą. Dane wyjściowe powinny być podobne do
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
co poprawnie wskazuje, że moja klawiatura jest obsługiwana przez mój odbiornik Logitech USB (wejście / event7 okazało się moją myszką Logitech G9, która ma kilka programowalnych przycisków).
Klawiatura laptopa :
jeśli chcesz ponownie mapować klawiaturę laptopa, powinieneś zapamiętać liczbę, AT keyboard
która w moim przypadku wynosi 4. Uzyskaj także informacje o dmi dla swojego laptopa:
cat /sys/class/dmi/id/sys_vendor
co jest w moim przypadku
SAMSUNG ELECTRONICS CO., LTD.
i
cat /sys/class/dmi/id/product_name
co jest w moim przypadku
305U1A
Określ bieżące mapowanie klawiszy funkcyjnych
Teraz możemy ustalić nasze aktualne mapowanie klawiszy, słuchając klawiatury (wstaw prawidłową liczbę)
sudo /lib/udev/keymap -i input/event4
możesz wyjść z tego polecenia, używając Escna klawiaturze lub Ctrl+ cna innej klawiaturze.
Jeśli ekran zacznie się przesuwać w dół bardzo ciężko, naciśnij Esci Ctrl+ ckilka razy i spróbuj ponownie
sudo /lib/udev/keymap -i input/event4 2> /dev/null
lub jeśli nadal masz problem z przewijaniem
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
W ostatnim przypadku nadal będziesz mieć przewijanie, ale jeśli naciśniesz klawisze funkcyjne, powinny one przejść do ~/keymap.log
miejsca, w którym możesz je później przeczytać.
Teraz możemy sprawdzić bieżące mapowanie klawiszy funkcyjnych, naciskając je, co powinno dać ci listę jak (to jest mój Fn+ F1do Fn+ F12):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
Teraz zapisz kody skanowania, dla których chcesz zmienić zachowanie.
Zmiana kodów kluczowych dla kodów skanowania
Jeśli widzisz, że kod klucza wyraźnie nie obejmuje tego, czego oczekujesz od klucza, możesz zajrzeć /usr/include/linux/input.h
pod Klucze i przyciski, aby sprawdzić, czy istnieje kod klucza, który lepiej pasuje do tego, co naprawdę chcesz się wydarzyć. Kluczowe kody są w formacie KEY_KEYCODE
i musisz zapisać część później KEY_
małymi literami. Czasami zmiana tego wystarczy, aby rozwiązać problem.
Jednak klawisze jasności często są powiązane z odpowiednim kodem klucza, a to nie pozwala na ich ponowne mapowanie. Musimy więc zmienić je na inne kody. Będziemy wykorzystywać prog1
i prog2
na tym przykładzie, ponieważ nie są w użyciu na moim komputerze, jednak można również używać f13
przez f24
lub f20
za pośrednictwem f24
jeśli masz klawiaturę firmy Apple, który ma F1za F19klucze.
Utwórz niestandardową mapę klawiszy :
Utwórz plik mapy klawiszy w katalogu /lib/udev/keymaps
o odpowiedniej nazwie, zajrzyj do wyjścia, ls /lib/udev/keymaps
aby zobaczyć odpowiednie nazwy. Idę z custom-brightness
celem tego pytania.
sudo vim /lib/udev/keymaps/custom-brightness
i wprowadź kody skanowania kluczy, które chcesz zmienić, a następnie skancody, które chcesz mieć. Mój custom-brightness
wygląda tak:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Utwórz niestandardowy plik wydania klucza. Tylko jeśli zmieniasz klawiaturę laptopa :
czasami zdarzenie zwolnienia klawisza nie jest poprawnie wysyłane, co powoduje zawieszenie się komputera. Aby tego uniknąć, napiszemy również niestandardowy plik wydania klucza
sudo vim /lib/udev/keymaps/force-release/custom-brightness
ten plik powinien zawierać te same kody skanowania, mój wygląda
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Upewnij się, że nowe mapowania zostały załadowane w plikach reguł
Teraz musimy upewnić się, że twoje mapowania są załadowane. Możemy to zrobić, edytując /lib/udev/rules.d/95-keymap.rules
, więc mądrze jest wykonać kopię zapasową
Ponownie mamy dwie opcje:
Klawiatury USB :
Ponieważ masz klawiaturę USB, powinieneś dodać swój wpis pod, LABEL="keyboard_usbcheck"
a powinien on znajdować się poza pozostałymi wpisami producenta klawiatury. To dlatego, że moja klawiatura z
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
jest już zgodny z jedną z reguł, w przeciwnym razie zostanie zastąpiony.
Dodaj następującą regułę, w której należy odpowiednio zmienić ID_VENDOR_ID
i ID_MODEL_ID
oraz nazwę mapy klawiszy
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Klawiatura laptopa :
jeśli /lib/udev/findkeyboards
zgłoszono, że klawiatura laptopa jest zgodna AT keyboard
z regułą LABEL="keyboard_vendorcheck"
, w przeciwnym razie połóż ją LABEL="keyboard_modulecheck"
. Ponownie umieść go pod innymi wpisami dotyczącymi producenta laptopa. Dodaj następującą regułę ( SAMSUNG ELECTRONICS CO., LTD.
jest trochę długa, więc użyłem symbolu wieloznacznego)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Teraz dodaj także regułę /lib/udev/rules.d/95-keyboard-force-release.rules
po utworzeniu kopii zapasowej
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
Ponownie pod innymi wpisami twojego producenta dodaj
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Upewnij się, że udev ładuje nowe reguły
Aby załadować nowe reguły, uruchom
sudo adevadm trigger
UWAGA: udevadm control --reload-rules
(nadal w instrukcjach na wielu stronach internetowych) nie działa.
Teraz sprawdź, czy reguły zostały pomyślnie zastosowane przez
sudo /lib/udev/keymap -i input/event4
które powinny teraz zgłaszać klucze jasności
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Ponownie przypisz klucze w Ustawieniach systemu
Jeśli w ostatnim kroku zgłoszono prawidłowe kody kluczy, albo klucze zaczną działać automatycznie (w przypadku, gdy najpierw miały nieprawidłowe kody kluczy).
Aby uzyskać jasność, nadal musisz powiązać klawisze ze skrawkiem, co jest teraz możliwe przy użyciu Ustawienia systemu> Klawiatura> Skróty .
Cieszyć się
Uwagi :
Jeśli twoje klucze miały niewłaściwy kod klucza i zostały naprawione dzięki temu podejściu, postępuj zgodnie z instrukcjami w /usr/share/doc/udev/README.keymap.txt.gz
(możesz to otworzyć bez rozpakowywania za pomocą zless
) i wyślij swoje wyniki podany tam adres e-mail, wówczas zmiany mogą zostać uwzględnione w następnej wersji. Wielu użytkowników skorzysta!
Ogromne podziękowania za ten pomocny post Vaidasa Jablonskisa.