Przesuń suwak powiększenia w klawiaturze Microsoft Natural Ergonomic Keyboard 4000 i 7000, przewijając w górę i w dół, w 14.04 (Trusty)

29

Próbowałem użyć tego samouczka, aby przełącznik przewijania działał na mojej klawiaturze Microsoft Natural Ergonomic Keyboard 4000. Mam jednak następujący błąd:

sudo: /lib/udev/keymap: command not found

Mam wersję udev 204-5ubuntu20.2(wersja znaleziona w Trusty)

Zauważyłem, że ta wersja nie zawiera keymapnarzędzia. Ale zauważam, że większe udevwersje ( dostępne na przykład dla Debiana ) zawierają to narzędzie.

Czy ktoś mógłby mi wyjaśnić tę różnicę? =) A co powinienem zrobić w tym przypadku - zainstalować pakiet z repozytorium Debiana?

Dmitrij Belaventsev
źródło
Czy chcesz rozwiązać ten problem za pomocą udev, czy nie masz nic przeciwko alternatywom? Byłbym trochę niechętny instalowaniu na Ubuntu nieopakowanych pakietów Debiana Udev.
praca w
wszelkie alternatywy są mile widziane =)
Dmitrij Belaventsev
Czy to pomaga?
Jobin
Co właściwie robi już nie wysłane keymapnarzędzie?
mat
Zaktualizowałem mój samouczek (z linkiem), aby uwzględnić poniższą odpowiedź. Dzięki :-)
Terence Eden

Odpowiedzi:

27

Jeśli spojrzysz na /lib/udev/rules.d/60-keyboard.rulesto, zobaczysz, że wszystko zostało pomieszane. To tylko część trwającej fuzji udev w systemd.

Wszystkie reguły sprzętowe są kompilowane w binarnej bazie danych sprzętu. Są to naprawdę dziwne formaty. Istniejące zasady dotyczące klawiatur dostarczanych z udev znajdują się w /lib/udev/hwdb.d/60-keyboard.hwdb. Spójrz na to, ale nie edytuj go (aktualizacje prawdopodobnie go zastąpią).

Aby dodać niestandardowe reguły, utworzymy nowy plik /etc/udev/hwdb.d/, uruchamiając sudoedit /etc/udev/hwdb.d/61-keyboard-local.hwdb. Wszystko, co musisz zrobić, to wkleić następujące elementy -

Jeśli używasz modelu 4000:

keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_0c022d=pageup
 KEYBOARD_KEY_0c022e=pagedown

Jeśli używasz modelu 7000:

keyboard:usb:v045Ep071D*
 KEYBOARD_KEY_0c022d=pageup
 KEYBOARD_KEY_0c022e=pagedown

Jest to dostosowane z opublikowanego samouczka, więc może być konieczne dostosowanie w zależności od klawiatury. Sprawdź lsusbi upewnij się, że vendor:productpowyższy kod (as v####p####) jest poprawny. To nie zadziała, jeśli się nie zgadzają.

Po zakończeniu edycji ponownie skompiluj to, hwdbczego używa udev:

sudo udevadm hwdb --update

A może być konieczne ponowne podłączenie. Jeśli jest to klawiatura PS / 2, może być konieczne ponowne uruchomienie. W niektórych przypadkach konieczne jest również ponowne uruchomienie.

Oli
źródło
Dziękuję za odpowiedź! hwdb.ddir jest pusty, rules.dzawiera tylko 3 pliki ( 70-persistent-cd.rules, 70-persistent-net.rules, README). Czy miałeś na myśli, że muszę utworzyć nowy plik? Czy muszę mieć coś do edycji?
Dmitry Belaventsev
Tak, powinieneś tworzyć nowy plik. Istniejące reguły klawiatury siedzą, /lib/udev/hwdb.d/60-keyboard.hwdbale zmiany zostaną utracone po aktualizacjach udev.
Oli
2
nie działa niestety przycisk celu
Dmitry Belaventsev
1
@matt, możesz umieścić wiele aliasów jak tutaj
user.dz
1
Zamiast podłączania | odłączania można użyć udevadm trigger /dev/input/by-id/usb-Microsoft-*do uruchomienia aktualizacji
Alexandr Priymak
37

Ubuntu 15.10 : Nie udało mi się z poprzednimi odpowiedziami.

Z powodzeniem zastosowałem podejście podobne do poprzednich - instrukcje zostały wymienione w /lib/udev/hwdb.d/60-keyboard.hwdb.

Utworzyłem nowy plik hwdb, sudo nano /etc/udev/hwdb.d/70-keyboard.hwdb zawierający:

# Microsoft Natural Ergonomic Keyboard 4000 - mapowanie powiększania / pomniejszania, aby przewijać strony w górę / w dół
evdev: input: b0003v045Ep00DB *
 KEYBOARD_KEY_c022d = pageup
 KEYBOARD_KEY_c022e = stronicowany

potem biegnę

sudo udevadm hwdb --update
sudo udevadm control --reload

i ponownie włożyłem klawiaturę i działało.

Do modelu 7000 evdev:input:b003v045Ep071D*

Adam Chýlek
źródło
9
To jest poprawna odpowiedź dla Ubuntu 16.04
Greg Dan
2
Dzięki. Wygląda na to, że keyboard:definicje nie działają już w systemie Ubuntu 1604 i tak musi być evdev:. Istnieje nawet domyślne odwzorowanie /lib/udev/hwdb.d/60-keyboard.hwdbdla modelu 4000, które odwzorowuje je na zoomin/ zoomout- jednak X całkowicie ignoruje zdarzenia (xev nic nie pokazuje), więc nadal potrzebujesz takiej zmiany konfiguracji.
wump
2
Że b0003wygląda jakby bus-specific (tak to może działać tylko w niektórych portach USB). Jeśli coś takiego b*v045Ep071D*działa, może być lepiej.
Oli
3
Dzięki, działa w Ubuntu 16.04 ( evdev:input:XXXzamiast keyboard:usb:YYY). Możesz także użyć innego mapowania zamiast pageup/ pagedown. Na przykład używam scrollupi scrolldowndo prawdziwego przewijania.
Martin Grůber
1
Działa również w Kubuntu 17.10
OOPMan
7

Oryginalny rozwiązanie wysłane przez Oli nie dla mnie, ale to działa po zmianie kluczowych numerów "0c022d"i "0c022e"do "c022d"a "c022e". Używam modelu 4000, więc nie mogę zweryfikować, czy ta sama zmiana jest potrzebna w przypadku modelu 7000.

Aby powtórzyć odpowiedź Oli, oto co zrobiłem: utwórz nowy plik, uruchamiając sudo nano /etc/udev/hwdb.d/61-keyboard-local.hwdb. Wklej następujące linie do pliku (dla modelu 4000):

keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_c022d=pageup
 KEYBOARD_KEY_c022e=pagedown

Po edycji pliku rekompiluj hwdb, którego używa udev:

sudo udevadm hwdb --update

Następnie ponownie podłącz klawiaturę.

użytkownik261903
źródło
Dzięki. Co dziwne, musiałem teraz wykonać tę zmianę, a także zresztą wymagane było zrestartowanie (nie tylko ponowne instalowanie).
mat
pracował dla mnie na Ubuntu 15.04. Dzięki!
Pierre
To działało dla mnie w Debian Jessie 8.5.
Nicolás,
Chcę kupić klawiaturę ekonomiczną i jestem ciekawy, czy działa z 16.04 LTS? Lub nie ma tam takiego problemu.
Arpad Horvath,
4

Dodając do odpowiedzi Oli, jeśli chcesz przewijać wiersze tak jak w myszy, możesz zmodyfikować pageup / pagedown w górę / w dół w swojej niestandardowej regule. Lubić:

keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_c022d=up
 KEYBOARD_KEY_c022e=down
r11
źródło
Nawiasem mówiąc: góra / dół jest domyślnie w 18.04.
LinuxLuigi,
1

Ładne rozwiązanie jest tutaj i mogę jedynie dodać, że możesz mapować klucze na nieużywane klucze X w ten sposób:

$ cat /lib/udev/rules.d/95-keymap.rules
...
ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d katakana 0xc022e katakanahiragana
...

Odpowiednie nazwy do użycia zamiast katakanamożna znaleźć tutaj .

Po ponownym uruchomieniu ;-) możesz przetestować, zoominczy zoomoutklucze są pomyślnie mapowane, a także znaleźć prawidłowe nazwy kluczy (na przykład w rc.xmlOpenBox WM), używając xev:

$ xev
...
KeyRelease event, serial 46, synthetic NO, window 0x3c00001,
    root 0x291, subw 0x0, time 1492891, (-261,-61), root:(573,380),
    state 0x0, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
...

Teraz możesz podłączyć nowe klucze do całkowicie dowolnych działań. W moim przypadku menedżera okien OpenBox użyłem czegoś takiego:

$ cat <whatever>/rc.xml
...
<keybind key="Katakana">
  <action name="Execute">
    <command>volume_up.sh</command>
  </action>
</keybind>
<keybind key="Hiragana_Katakana">
  <action name="Execute">
    <command>volume_down.sh</command>
  </action>
</keybind>
...
dmitry_romanov
źródło