Sterowanie gestami myszy Bluetooth, które rejestrują zdarzenia na klawiaturze

9

tl; dr

Właśnie kupiłem Logitech T630 . Jest to mysz Bluetooth, która obsługuje kilka zdarzeń klawiatury za pomocą gestów (PDF). Te gesty są w porządku i eleganckie, ale nie mam dla nich pożytku. Mam okropny czas, żeby się ich pozbyć.

Chcę wykonać następujące czynności, w kolejności malejącego priorytetu:

  1. wyłącz te gesty
  2. odwzoruj gesty (myślę, że bez włamania się do oprogramowania układowego lub inżynierii wstecznej sterowników urządzeń Windows / OS X nie jest to możliwe)

Nie chcę:

  • użyj systemu Windows
  • wyłącz wszystkie gesty

Aby uzyskać więcej informacji, przeczytaj…

przyciski i gesty

Trzynaście możliwych zdarzeń myszy:

  1. lewy przycisk myszy
  2. środkowe kliknięcie
  3. kliknij prawym przyciskiem myszy
  4. przewiń do góry
  5. przewiń w dół
  6. przewiń w lewo
  7. przewiń w prawo
  8. przeciągnij krawędź w lewo
  9. przeciągnij krawędź w prawo
  10. przeciągnij dwoma palcami w lewo
  11. przeciągnij dwoma palcami w prawo
  12. podwójne wciśnięcie
  13. stuknięcie dwoma palcami

Pierwsze siedem jest uporządkowane według sposobu mapowania ich przez system operacyjny.

Tylko pierwsze trzy są mechaniczne - wszystkie pozostałe wykorzystują powierzchnię dotykową:

gesty dotykowe

Opcje GUI

Konfiguracja w Kubuntu Trusty była bardzo prosta, ale oferuje niewiele wsparcia w konfigurowaniu tych innych gestów.

Gesty te nie są związane z:

  • touchpad ( synapticsnie działa)
  • dostępność
  • gorące rogi
  • standardowe gesty myszy

Wszystkie ustawienia związane z tymi zostały sprawdzone i wszystkie są wyłączone.

ustawienia wiersza poleceń

lomoco

lomocoNarzędzie, aby pomóc configure specjalnych funkcji myszy USB Logitech nie ma zastosowania.

xinput

Pomyślałem, że xinputmoże zaoferować pomoc:

$ xinput --list | grep pointer
 Virtual core pointer                          id=2    [master pointer  (3)]
    Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    Ultrathin Touch Mouse                     id=13   [slave  pointer  (2)]
$ xinput --list-props 13
Device 'Ultrathin Touch Mouse':
    Device Enabled (144):   1
    Coordinate Transformation Matrix (146): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (266): 0
    Device Accel Constant Deceleration (267):   1.000000
    Device Accel Adaptive Deceleration (268):   1.000000
    Device Accel Velocity Scaling (269):    10.000000
    Device Product ID (261):    1133, 45069
    Device Node (262):  "/dev/input/event11"
    Evdev Axis Inversion (270): 0, 0
    Evdev Axes Swap (272):  0
    Axis Labels (273):  "Rel X" (154), "Rel Y" (155), "Rel Horiz Wheel" (746), "Rel Vert Wheel" (265)
    Button Labels (274):    "Button Left" (147), "Button Middle" (148), "Button Right" (149), "Button Wheel Up" (150), "Button Wheel Down" (151), "Button Horiz Wheel Left" (152), "Button Horiz Wheel Right" (153), "Button Side" (1032), "Button Extra" (1033), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264)
    Evdev Middle Button Emulation (275):    0
    Evdev Middle Button Timeout (276):  50
    Evdev Third Button Emulation (277): 0
    Evdev Third Button Emulation Timeout (278): 1000
    Evdev Third Button Emulation Button (279):  3
    Evdev Third Button Emulation Threshold (280):   20
    Evdev Wheel Emulation (281):    0
    Evdev Wheel Emulation Axes (282):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (283):    10
    Evdev Wheel Emulation Timeout (284):    200
    Evdev Wheel Emulation Button (285): 4
    Evdev Drag Lock Buttons (286):  0

Zwróć uwagę na 13 etykiet przycisków:

$ xinput --get-button-map "Ultrathin Touch Mouse"
1 2 3 4 5 6 7 8 9 10 11 12 13

Wyłączenie ich nie pomogło:

$ xinput --set-button-map "Ultrathin Touch Mouse" 1 2 3 4 5 6 7 0 0 0 0 0 0

Nawet jeśli np. Może zmienić środkowy przycisk myszy w lewy przycisk myszy:

$ xinput --set-button-map "Ultrathin Touch Mouse" 1 1 3 4 5 6 7 0 0 0 0 0 0

xmodmap

Podobne do tych xinputsamych wyników:

$ xmodmap -e "pointer = 1 2 3 4 5 6 7 0 0 0 0 0 0"

inputkbd

Sugerowany przez elmicha poniżej , działa on na poziomie jądra, próbując sprawić, by gesty powodowały zdarzenia pustej klawiatury. Powinien działać, ale tutaj też nie powodzenia, z następującym procesem:

$ sudo input-kbd 4 > keymap # note the 4 is from /dev/input/event4
# edit the keymap to map any combination of keys to either 0 or 240 (KEY_UNKNOWN)
# e.g. change this:
# 0x700e0 =  29 # KEY_LEFTCTRL
# to this:
# 0x700e0 =   0 # KEY_LEFTCTRL
# or this:
# 0x700e0 = 240 # KEY_LEFTCTRL
$ sudo input-kbd -f keymap 4
$ sudo input-kbd 4 # should return the updated keymap

Po wykonaniu tego mapa klawiszy nie pokazuje żadnych zmian.

xkbcomp

Zasugerował to Xhaker wejściowy Peter Hutterer , z pewnością człowiek, który powinien wiedzieć, co robi. Nadal nie ma szczęścia:

$ xkbcomp -xkb $DISPLAY t630.xkb
# edit the keyboard description and replace the definition of any key to NoSymbol or VoidSymbol
# e.g. change this:
#     key <LCTL> {         [       Control_L  ] };
# to this:
#     key <LCTL> {         [       NoSymbol   ] };
# or this:
#     key <LCTL> {         [       VoidSymbol ] };
$ sudo xkbcomp -i 8 t630.xkb $DISPLAY # here the 8 is the id in xinput, names don't work
$ xkbcomp -xkb -i 8 $DISPLAY - # should return the updated keyboard description

Po wykonaniu tej czynności opis klawiatury nie pokazuje żadnych zmian.

Peter uznał, że było to prawdopodobnie spowodowane tym, że Xjest mylony co do natury urządzenia jako klawiatury lub myszy, podobnie jak ten błąd, który ma odwrotny problem. To może wyjaśniać, dlaczego wszystkie inne oczekiwane elementy nie działają. Powiedział jednak również, że używanie evdevnie powinno działać z tego samego powodu.

evdev

Początkowo wydawało się, że działa, ale też nie. Próbuje to wykorzystać ogólny sterownik wejściowy Xdo ustawienia mapowania przycisków poprzez dołączenie następujących elementów do /usr/share/X11/xorg.conf.d/10-evdev.conflub /etc/X11/xorg.conf.d/10-evdev.conf:

# custom for Logitech Ultrathin Touch mouse

Section "InputDevice"
    Identifier "Logitech bluetooth Touch Mouse"
    Driver "evdev"
    Option "Name"   "Ultrathin Touch Mouse"
    Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection

Section "InputClass"
    Identifier  "Ultrathin Touch Mouse"
    Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection

Wydaje się, że działa bezbłędnie w /var/log/Xorg.0.log(użyciu grep EE) i xinputpotwierdza mapowanie przycisków, ale nie powoduje efektu pożądania.

To jest znany do pracy dla T631, jednak.

zdarzenia na klawiaturze

Problem polega na tym, że te gesty generują zdarzenia klawiatury:

$ sudo evemu-record /dev/input/event4 | grep "E: "
# swipe edge right
E: 0.000000 0004 0004 458976    # EV_MSC / MSC_SCAN             458976
E: 0.000000 0001 001d 0001      # EV_KEY / KEY_LEFTCTRL         1
E: 0.000000 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 0.000000 0001 007d 0001      # EV_KEY / KEY_LEFTMETA         1
E: 0.000000 0004 0004 458795    # EV_MSC / MSC_SCAN             458795
E: 0.000000 0001 000f 0001      # EV_KEY / KEY_TAB              1
E: 0.000000 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
E: 0.002980 0004 0004 458976    # EV_MSC / MSC_SCAN             458976
E: 0.002980 0001 001d 0000      # EV_KEY / KEY_LEFTCTRL         0
E: 0.002980 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 0.002980 0001 007d 0000      # EV_KEY / KEY_LEFTMETA         0
E: 0.002980 0004 0004 458795    # EV_MSC / MSC_SCAN             458795
E: 0.002980 0001 000f 0000      # EV_KEY / KEY_TAB              0
E: 0.002980 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
# swipe edge left
E: 3.306977 0004 0004 458978    # EV_MSC / MSC_SCAN             458978
E: 3.306977 0001 0038 0001      # EV_KEY / KEY_LEFTALT          1
E: 3.306977 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 3.306977 0001 007d 0001      # EV_KEY / KEY_LEFTMETA         1
E: 3.306977 0004 0004 458866    # EV_MSC / MSC_SCAN             458866
E: 3.306977 0001 00c1 0001      # EV_KEY / KEY_F23              1
E: 3.306977 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
E: 3.310979 0004 0004 458978    # EV_MSC / MSC_SCAN             458978
E: 3.310979 0001 0038 0000      # EV_KEY / KEY_LEFTALT          0
E: 3.310979 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 3.310979 0001 007d 0000      # EV_KEY / KEY_LEFTMETA         0
E: 3.310979 0004 0004 458866    # EV_MSC / MSC_SCAN             458866
E: 3.310979 0001 00c1 0000      # EV_KEY / KEY_F23              0
E: 3.310979 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
# two finger double tap
E: 10.225976 0004 0004 458983   # EV_MSC / MSC_SCAN             458983
E: 10.225976 0001 007e 0001     # EV_KEY / KEY_RIGHTMETA        1
E: 10.225976 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
E: 10.229986 0004 0004 458983   # EV_MSC / MSC_SCAN             458983
E: 10.229986 0001 007e 0000     # EV_KEY / KEY_RIGHTMETA        0
E: 10.229986 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
# two finger swipe left
E: 27.934977 0004 0004 589828   # EV_MSC / MSC_SCAN             589828
E: 27.934977 0001 0113 0001     # EV_KEY / BTN_SIDE             1
E: 27.934977 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
E: 27.937983 0004 0004 589828   # EV_MSC / MSC_SCAN             589828
E: 27.937983 0001 0113 0000     # EV_KEY / BTN_SIDE             0
E: 27.937983 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
# two finger swipe right
E: 32.513990 0004 0004 589829   # EV_MSC / MSC_SCAN             589829
E: 32.513990 0001 0114 0001     # EV_KEY / BTN_EXTRA            1
E: 32.513990 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
E: 32.516994 0004 0004 589829   # EV_MSC / MSC_SCAN             589829
E: 32.516994 0001 0114 0000     # EV_KEY / BTN_EXTRA            0
E: 32.516994 0000 0000 0000     # ------------ SYN_REPORT (0) ----------

Jeśli chodzi o mapę klawiszy , odnoszą się one do:

$ sudo input-kbd 4 | grep -e KEY_LEFTCTL -e KEY_LEFTMETA -e KEY_TAB -e KEY_LEFTALT -e KEY_F23 -e KEY_RIGHTMETA -e BTN_SIDE -e BTN_EXTRA
0x700e2 =  56  # KEY_LEFTALT
0x700e3 = 125  # KEY_LEFTMETA
0x700e7 = 126  # KEY_RIGHTMETA
0x7002b =  15  # KEY_TAB
0x70072 = 193  # KEY_F23
0x700e2 =  56  # KEY_LEFTALT
0x700e3 = 125  # KEY_LEFTMETA
0x700e7 = 126  # KEY_RIGHTMETA
0x90004 = 275  # BTN_SIDE
0x90005 = 276  # BTN_EXTRA

Wydaje się, że podwójne dotknięcie nic nie robi.

Inne referencje

Może również pomóc wskazać odniesienie do podobnych problemów w błędzie, gdy wspomniana mysz nie znajduje się w gnome-bluetoothbazie danych kodów PIN. Nie trzeba dodawać, że dalsze komentarze na ten temat są oficjalnie nie na temat tego raportu o błędach, ale odniesienia mogą pomóc w dodaniu pewnej perspektywy na temat natury tego problemu.

Oto dane wyjściowe evemu-describe /dev/input/event4FWIW.

Adaptery Bluetooth

FWIW Użyłem dwóch różnych adapterów USB Bluetooth:

$ lsusb | grep Bluetooth
Bus 007 Device 010: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ lsusb | grep Bluetooth
Bus 007 Device 011: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0
wxl
źródło
2
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Mitch
więc wymyśliłem problem: myślę, że musisz zainstalować na maszynie wirtualnej Windows - standardowy sterownik Windows Logitech i odwołać się do vmmouse_detectnarzędzia. xmodmapi xinputnawet xorg.confbędą użyteczne pod Kubuntu, ale nie pod Windows VM. Tak więc w WinVM powinieneś być w stanie skonfigurować mysz za pomocą standardowych narzędzi Logitech dla systemu Windows.
szybki
Czy kiedykolwiek to rozwiązałeś?
Seth
nie, nie zostało to naprawione. masz pomysły?
wxl

Odpowiedzi:

3

Po dużym bólu udało mi się stworzyć mapę kluczową, która robi coś pożytecznego.

Najpierw kilka notatek (jeszcze nie mogę komentować) do poprzedniej odpowiedzi:

  1. skrypt fixMouse dostarczony przez kopię zapasową Mr nie działa, ponieważ czasami wpis na klawiaturze myszy pojawia się w xinput pod niewłaściwą nazwą, tj. w moim przypadku pokazuje:

    ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
    ...
    ⎜   ↳ Ultrathin Touch Mouse                     id=11   [slave  pointer  (2)]
    ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    
    ...
        ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    

    z drugiej strony możesz użyć lsinput z input-utils, aby znaleźć poprawny identyfikator:

    lsinput 2>&1|grep -B5 "Ultrathin Touch Mouse"
    /dev/input/event12
       bustype : BUS_BLUETOOTH
       vendor  : 0x46d
       product : 0xb00d
       version : 1792
       name    : "Ultrathin Touch Mouse"
    
  2. z jakiegoś powodu, gdy zrzucasz mapę myszy, niektóre kody są duplikowane (te pomiędzy 0x700e0 a 0x700e7), bądź ostrożny, aby je znaleźć i wyeliminować, inaczej oszalejesz.

  3. zastąpienie wszystkich kodów klawiszem KEY_UNKNOWN zapobiega serii losowych znaków, ale sprawia, że ​​specjalne akcje dotykowe są bezużyteczne. W zamian odkryłem, że niektóre gesty można przekształcić w przydatne kombinacje. W szczególności „przeciągnięcie od lewej” wysyła kody 0x700e0 + 0x700e3 + 0x7002b, podczas gdy „przesunięcie od prawej” wysyła 0x700e3 + 0x700e3 + 0x70072. Odwzorowałem 0x700e3, który jest wspólny dla obu gestów, na KEY_UNKNOW, aby usunąć go z drogi. Następnie użyłem pozostałych kodów klawiszy, aby zrobić CTRL + F8 (siatka pulpitu) i ALT-F2 (biegacz), ale oczywiście możesz wygenerować dowolną kombinację dowolnych dwóch kluczy. Oto moja mapa, zachowaj ostrożność podczas kopiowania / wklejania, aby nie pozostawiać pustych linii i początkowych pustych spacji (łamią one wejście-kbd):

    0x700e3 = KEY_UNKNOWN
    0x700e0 = KEY_LEFTCTRL
    0x7002b = KEY_F8
    0x700e2 = KEY_LEFTALT
    0x70072 = KEY_F2
    0x70004 = KEY_UNKNOWN
    0x70005 = KEY_UNKNOWN
    0x70006 = KEY_UNKNOWN
    0x70007 = KEY_UNKNOWN
    0x70008 = KEY_UNKNOWN
    0x70009 = KEY_UNKNOWN
    0x7000a = KEY_UNKNOWN
    0x7000b = KEY_UNKNOWN
    0x7000c = KEY_UNKNOWN
    0x7000d = KEY_UNKNOWN
    0x7000e = KEY_UNKNOWN
    0x7000f = KEY_UNKNOWN
    0x70010 = KEY_UNKNOWN
    0x70011 = KEY_UNKNOWN
    0x70012 = KEY_UNKNOWN
    0x70013 = KEY_UNKNOWN
    0x70014 = KEY_UNKNOWN
    0x70015 = KEY_UNKNOWN
    0x70016 = KEY_UNKNOWN
    0x70017 = KEY_UNKNOWN
    0x70018 = KEY_UNKNOWN
    0x70019 = KEY_UNKNOWN
    0x7001a = KEY_UNKNOWN
    0x7001b = KEY_UNKNOWN
    0x7001c = KEY_UNKNOWN
    0x7001d = KEY_UNKNOWN
    0x7001e = KEY_UNKNOWN
    0x7001f = KEY_UNKNOWN
    0x70020 = KEY_UNKNOWN
    0x70021 = KEY_UNKNOWN
    0x70022 = KEY_UNKNOWN
    0x70023 = KEY_UNKNOWN
    0x70024 = KEY_UNKNOWN
    0x70025 = KEY_UNKNOWN
    0x70026 = KEY_UNKNOWN
    0x70027 = KEY_UNKNOWN
    0x70028 = KEY_UNKNOWN
    0x70029 = KEY_UNKNOWN
    0x7002a = KEY_UNKNOWN
    0x7002c = KEY_UNKNOWN
    0x7002d = KEY_UNKNOWN
    0x7002e = KEY_UNKNOWN
    0x7002f = KEY_UNKNOWN
    0x70030 = KEY_UNKNOWN
    0x70031 = KEY_UNKNOWN
    0x70032 = KEY_UNKNOWN
    0x70033 = KEY_UNKNOWN
    0x70034 = KEY_UNKNOWN
    0x70035 = KEY_UNKNOWN
    0x70036 = KEY_UNKNOWN
    0x70037 = KEY_UNKNOWN
    0x70038 = KEY_UNKNOWN
    0x70039 = KEY_UNKNOWN
    0x7003a = KEY_UNKNOWN
    0x7003b = KEY_UNKNOWN
    0x7003c = KEY_UNKNOWN
    0x7003d = KEY_UNKNOWN
    0x7003e = KEY_UNKNOWN
    0x7003f = KEY_UNKNOWN
    0x70040 = KEY_UNKNOWN
    0x70041 = KEY_UNKNOWN
    0x70042 = KEY_UNKNOWN
    0x70043 = KEY_UNKNOWN
    0x70044 = KEY_UNKNOWN
    0x70045 = KEY_UNKNOWN
    0x70046 = KEY_UNKNOWN
    0x70047 = KEY_UNKNOWN
    0x70048 = KEY_UNKNOWN
    0x70049 = KEY_UNKNOWN
    0x7004a = KEY_UNKNOWN
    0x7004b = KEY_UNKNOWN
    0x7004c = KEY_UNKNOWN
    0x7004d = KEY_UNKNOWN
    0x7004e = KEY_UNKNOWN
    0x7004f = KEY_UNKNOWN
    0x70050 = KEY_UNKNOWN
    0x70051 = KEY_UNKNOWN
    0x70052 = KEY_UNKNOWN
    0x70053 = KEY_UNKNOWN
    0x70054 = KEY_UNKNOWN
    0x70055 = KEY_UNKNOWN
    0x70056 = KEY_UNKNOWN
    0x70057 = KEY_UNKNOWN
    0x70058 = KEY_UNKNOWN
    0x70059 = KEY_UNKNOWN
    0x7005a = KEY_UNKNOWN
    0x7005b = KEY_UNKNOWN
    0x7005c = KEY_UNKNOWN
    0x7005d = KEY_UNKNOWN
    0x7005e = KEY_UNKNOWN
    0x7005f = KEY_UNKNOWN
    0x70060 = KEY_UNKNOWN
    0x70061 = KEY_UNKNOWN
    0x70062 = KEY_UNKNOWN
    0x70063 = KEY_UNKNOWN
    0x70064 = KEY_UNKNOWN
    0x70065 = KEY_UNKNOWN
    0x70066 = KEY_UNKNOWN
    0x70067 = KEY_UNKNOWN
    0x70068 = KEY_UNKNOWN
    0x70069 = KEY_UNKNOWN
    0x7006a = KEY_UNKNOWN
    0x7006b = KEY_UNKNOWN
    0x7006c = KEY_UNKNOWN
    0x7006d = KEY_UNKNOWN
    0x7006e = KEY_UNKNOWN
    0x7006f = KEY_UNKNOWN
    0x70070 = KEY_UNKNOWN
    0x70071 = KEY_UNKNOWN
    0x70073 = KEY_UNKNOWN
    0x70074 = KEY_UNKNOWN
    0x70075 = KEY_UNKNOWN
    0x70076 = KEY_UNKNOWN
    0x70077 = KEY_UNKNOWN
    0x70078 = KEY_UNKNOWN
    0x70079 = KEY_UNKNOWN
    0x7007a = KEY_UNKNOWN
    0x7007b = KEY_UNKNOWN
    0x7007c = KEY_UNKNOWN
    0x7007d = KEY_UNKNOWN
    0x7007e = KEY_UNKNOWN
    0x7007f = KEY_UNKNOWN
    0x70080 = KEY_UNKNOWN
    0x70081 = KEY_UNKNOWN
    0x70082 = KEY_UNKNOWN
    0x70083 = KEY_UNKNOWN
    0x70084 = KEY_UNKNOWN
    0x70085 = KEY_UNKNOWN
    0x70086 = KEY_UNKNOWN
    0x70087 = KEY_UNKNOWN
    0x70088 = KEY_UNKNOWN
    0x70089 = KEY_UNKNOWN
    0x7008a = KEY_UNKNOWN
    0x7008b = KEY_UNKNOWN
    0x7008c = KEY_UNKNOWN
    0x7008d = KEY_UNKNOWN
    0x7008e = KEY_UNKNOWN
    0x7008f = KEY_UNKNOWN
    0x70090 = KEY_UNKNOWN
    0x70091 = KEY_UNKNOWN
    0x70092 = KEY_UNKNOWN
    0x70093 = KEY_UNKNOWN
    0x70094 = KEY_UNKNOWN
    0x70095 = KEY_UNKNOWN
    0x70096 = KEY_UNKNOWN
    0x70097 = KEY_UNKNOWN
    0x70098 = KEY_UNKNOWN
    0x70099 = KEY_UNKNOWN
    0x7009a = KEY_UNKNOWN
    0x7009b = KEY_UNKNOWN
    0x7009c = KEY_UNKNOWN
    0x7009d = KEY_UNKNOWN
    0x7009e = KEY_UNKNOWN
    0x7009f = KEY_UNKNOWN
    0x700a0 = KEY_UNKNOWN
    0x700a1 = KEY_UNKNOWN
    0x700a2 = KEY_UNKNOWN
    0x700a3 = KEY_UNKNOWN
    0x700a4 = KEY_UNKNOWN
    0x700a5 = KEY_UNKNOWN
    0x700a6 = KEY_UNKNOWN
    0x700a7 = KEY_UNKNOWN
    0x700a8 = KEY_UNKNOWN
    0x700a9 = KEY_UNKNOWN
    0x700aa = KEY_UNKNOWN
    0x700ab = KEY_UNKNOWN
    0x700ac = KEY_UNKNOWN
    0x700ad = KEY_UNKNOWN
    0x700ae = KEY_UNKNOWN
    0x700af = KEY_UNKNOWN
    0x700b0 = KEY_UNKNOWN
    0x700b1 = KEY_UNKNOWN
    0x700b2 = KEY_UNKNOWN
    0x700b3 = KEY_UNKNOWN
    0x700b4 = KEY_UNKNOWN
    0x700b5 = KEY_UNKNOWN
    0x700b6 = KEY_UNKNOWN
    0x700b7 = KEY_UNKNOWN
    0x700b8 = KEY_UNKNOWN
    0x700b9 = KEY_UNKNOWN
    0x700ba = KEY_UNKNOWN
    0x700bb = KEY_UNKNOWN
    0x700bc = KEY_UNKNOWN
    0x700bd = KEY_UNKNOWN
    0x700be = KEY_UNKNOWN
    0x700bf = KEY_UNKNOWN
    0x700c0 = KEY_UNKNOWN
    0x700c1 = KEY_UNKNOWN
    0x700c2 = KEY_UNKNOWN
    0x700c3 = KEY_UNKNOWN
    0x700c4 = KEY_UNKNOWN
    0x700c5 = KEY_UNKNOWN
    0x700c6 = KEY_UNKNOWN
    0x700c7 = KEY_UNKNOWN
    0x700c8 = KEY_UNKNOWN
    0x700c9 = KEY_UNKNOWN
    0x700ca = KEY_UNKNOWN
    0x700cb = KEY_UNKNOWN
    0x700cc = KEY_UNKNOWN
    0x700cd = KEY_UNKNOWN
    0x700ce = KEY_UNKNOWN
    0x700cf = KEY_UNKNOWN
    0x700d0 = KEY_UNKNOWN
    0x700d1 = KEY_UNKNOWN
    0x700d2 = KEY_UNKNOWN
    0x700d3 = KEY_UNKNOWN
    0x700d4 = KEY_UNKNOWN
    0x700d5 = KEY_UNKNOWN
    0x700d6 = KEY_UNKNOWN
    0x700d7 = KEY_UNKNOWN
    0x700d8 = KEY_UNKNOWN
    0x700d9 = KEY_UNKNOWN
    0x700da = KEY_UNKNOWN
    0x700db = KEY_UNKNOWN
    0x700dc = KEY_UNKNOWN
    0x700dd = KEY_UNKNOWN
    0x700de = KEY_UNKNOWN
    0x700df = KEY_UNKNOWN
    0x700e1 = KEY_UNKNOWN
    0x700e4 = KEY_UNKNOWN
    0x700e5 = KEY_UNKNOWN
    0x700e6 = KEY_UNKNOWN
    0x700e7 = KEY_UNKNOWN
    0x700e8 = KEY_UNKNOWN
    0x700e9 = KEY_UNKNOWN
    0x700ea = KEY_UNKNOWN
    0x700eb = KEY_UNKNOWN
    0x700ec = KEY_UNKNOWN
    0x700ed = KEY_UNKNOWN
    0x700ee = KEY_UNKNOWN
    0x700ef = KEY_UNKNOWN
    0x700f0 = KEY_UNKNOWN
    0x700f1 = KEY_UNKNOWN
    0x700f2 = KEY_UNKNOWN
    0x700f3 = KEY_UNKNOWN
    0x700f4 = KEY_UNKNOWN
    0x700f5 = KEY_UNKNOWN
    0x700f6 = KEY_UNKNOWN
    0x700f7 = KEY_UNKNOWN
    0x700f8 = KEY_UNKNOWN
    0x700f9 = KEY_UNKNOWN
    0x700fa = KEY_UNKNOWN
    0x700fb = KEY_UNKNOWN
    0x700fc = KEY_UNKNOWN
    0x700fd = KEY_UNKNOWN
    0x700fe = KEY_UNKNOWN
    0x700ff = KEY_UNKNOWN
    0x90001 = 272  # BTN_LEFT
    0x90002 = 273  # BTN_RIGHT
    0x90003 = 274  # BTN_MIDDLE
    0x90004 = 275  # BTN_SIDE
    0x90005 = 276  # BTN_EXTRA
    

Nie byłem w stanie uzyskać odpowiednich kodów dla przeciągnięć dwoma palcami, ale znowu mnie to nie obchodzi, ponieważ te gesty są niemożliwe do wykonania.

PS Jeśli chcesz spróbować dostosować inne gesty, oto jak postępowałem:

  1. Posortowałem wpisy na mapie, wyczyściłem duplikaty i zauważyłem, że zawiera 252 symbole (plus 5 przycisków).

  2. Ustawiłem pierwsze dziesięć symboli na KEY_A, następne dziesięć na KEY_B i tak dalej, aż do ostatnich 2, które stały się KEY_Z; potem załadowałem tę mapę.

  3. Gesty wykonuję w oknach tekstowych (lub możesz użyć „xbindkeys -mk”) i odnotowuję utworzone litery.

  4. Na mapie zmieniam wszystkie litery NIE wyprodukowane na KEY_UNKNOWN, trzy pozostałe na KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, a następnie ładuję nową mapę.

  5. Wykonuję gest ponownie, zwracam uwagę na wytworzone litery / cyfry: są to kody, które można zdefiniować do wszystkiego, czego potrzebujesz, aby utworzyć określoną kombinację klawiszy.

Lorenzo
źródło
2

Możesz spróbować użyć input-kbdz input-utilspakietu:

$ apropos input-kbd
input-kbd (8)        - print or modify keyboard maps for input devices

Korzystając z indeksu urządzenia wejściowego (np. 4 dla /dev/input/event4, który można znaleźć, za pomocą lsinputktórego jest koniecznie inny niż identyfikator użyty w xinput), możesz ponownie skonfigurować mapę klawiatury, przesyłając jej plik za pomocą -fprzełącznika, np.

$ sudo input-kbd -f some-file 4

gdzie some-fileprzyjmuje postać scancode = keycode|keyname, gdzie następujące są równoważne:

0x0001 = KEY_F9
0x0001 = 67

Możesz znaleźć bieżącą mapę za pomocą sudo input-kbd 4. Ponieważ musisz otworzyć plik /dev, musisz użyć superużytkownika, aby zdarzenie to przeczytało.

Zauważ też, że pomimo jego pozornie mylącej nazwy, działa również z myszami.

Elmicha
źródło
Być może korzystasz z właściwego mechanizmu, ale niestety patrząc na mapę klawiszy , nie jest jasne, jaki scancode zmienić, szczególnie biorąc pod uwagę, że niektóre z tych kluczy są całkowicie niezdefiniowane. Być może przydałby się mechanizm wyszukiwania definicji nazw kluczy. +1 za zbliżenie.
wxl
Co się stanie, jeśli zamapujesz wszystkie KEY_ * na 0 lub jedną z wartości KEY_UNKNOWN (np. 240)? Czy to wyłącza niektóre gesty, które chcesz zachować? Aby wygenerować nową mapę, możesz przeciągnąć bieżącą mapę awk '/KEY_/ { $3 = 240 } { print }'.
elmicha
Wydaje mi się, że pytanie brzmi: gdzie mogę znaleźć definicję KEY_UNKNOWNlub jeśli chodzi o to BTN_EXTRA?
wxl
Możesz użyć, sudo input-events 4aby zobaczyć, który przycisk myszy jest który. KEY_UNKNOWN (mam nadzieję) nie drukuje ani nie wyzwala żadnej akcji.
elmicha
1
Definicja nazw kluczy znajduje się w /usr/include/linux/input.h, która stwierdza, że ​​nazwy są wzorowane na USB HUT 1.12 , która mówi, że kody kluczy 232-65535 są „zastrzeżone”. input-kbd używa name.shtam do odwrócenia nazwy klucza -> mapowania kodu, aby umożliwić input_kbd wydrukować nazwy kodów kluczy.
elmicha
2

Aby wyłączyć gesty, możesz zmienić mapowanie przycisków za pomocą evdevsterownika, tak aby wszystkie ostatnie 6 „przycisków” były wyłączone w następujący sposób:

  1. dołączając następujące elementy /usr/share/X11/xorg.conf.d/10-evdev.conflub w /etc/X11/xorg.conf.d/10-evdev.confzależności od tego, co masz:

    # custom for Logitech Ultrathin Touch mouse
    
    Section "InputDevice"
        Identifier "Logitech bluetooth Touch Mouse"
        Driver "evdev"
        Option "Name"   "Ultrathin Touch Mouse"
        Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
    EndSection
    
    Section "InputClass"
        Identifier  "Ultrathin Touch Mouse"
        Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
    EndSection
  2. zrestartowanie Xserwera za pomocąsudo service lightdm restart

  3. potwierdź za pomocą xinput --get-button-map "Ultrathin Touch Mouse"

Można zmienić wartość opcji InputDevice Identifier, jeśli chcesz, ale ważne jest, aby zachować wartość InputDevice Namei InputClass Identifierjako „ultracienkich Touch Mouse”, ponieważ jest to w jaki sposób xinputrozpoznaje go.

Testowany z wersją dla komputerów Mac, T631.

Jeśli potrzebujesz trochę więcej informacji evdev, ten post na blogu autorstwa Joe Shawa jest szczególnie wnikliwy na temat tego, jak pasuje do całego stosu wejściowego.

steev
źródło
To potencjalnie dobre rozwiązanie. Nienawidzę jednak używania Xplików konfiguracyjnych, zwłaszcza globalnie zdefiniowanych. Niektóre ścieżki aktualizacji zastąpią je, co nie jest idealne. Ponadto nie jest to idealne, ponieważ nie jest jasne, jak ponownie przypisać klucze. Nie twierdzę, że nie jest to prawidłowe rozwiązanie, ale jeśli chodzi o nagrodę, druga odpowiedź może wygrać. ☺ Wreszcie, nie można tego zaimplementować bez ponownego uruchomienia. Może gdybyś mógł wymyślić jakiś sposób evdevbezpośredniego rozwiązania problemu, może to być miłe, ale nie znalazłem czegoś takiego.
wxl
Z szacunkiem myślę, że prosisz o zbyt wiele. Ale tak czy inaczej, nie wysłałem postu, aby zdobyć nagrodę, tylko po to, aby pomóc tym, którzy mają podobny problem. Jeśli mają mniej ograniczeń na rozwiązanie niż ty, to powinno być dla nich przydatne. To powiedziawszy, jestem pewien, że jeśli chcesz zrestartować X, możesz osiągnąć ten sam wynik bez ponownego uruchamiania. Byłoby trochę bałaganu. Ale słyszę o aktualizacji. Będę musiał bardzo uważać, aby nie uszkodzić rzeczy podczas aktualizacji.
steev
1
z szacunkiem zgadzam się, ale mam nadzieję, że zawsze pomogę więcej niż tylko sobie. Biorąc to pod uwagę, doceniam twoją odpowiedź, dlatego dałem jej +1!
wxl
no cóż, gratulacje, bo wasz faktycznie działa;)
wxl
1
omg, myliłem się. wyglądało na to, że się zachowuje, ale nie udało mi się przetestować evemu-record. nie działa :(
wxl
1

Udało mi się skonfigurować gesty „przeciągnięcie lewej krawędzi” i „przesunięcie prawej krawędzi” za pomocą xbindkeys; może to dotyczyć również przeciągnięć dwoma palcami, ale nie zawracałem sobie głowy tymi, ponieważ trudno mi je wykonać.

To jest mój .xbindkeysrc

    #Right edge swipe (Send Alt+F2)
    "xte 'keydown Alt_L' 'key F2' 'keyup Alt_L'"
     Alt+Mod4+XF86TouchpadOff
    #Left edge swipe (Send CTRL+F8)
    "xte 'keydown Control_L' 'key F8' 'keyup Control_L'"
     Control+Mod4 + Tab

Odwzorowałem je na przydatne skróty KDE, oczywiście możesz zrobić cokolwiek innego. Musisz uruchomić xbindkeys przy logowaniu, utworzyłem plik .desktop, jak wyjaśniono w tutorialach xbindkeys:

    #./.config/autostart/xbindkeys.desktop
    [Desktop Entry]
    Comment[en_GB]=
    Comment=
    Exec=xbindkeys
    GenericName[en_GB]=
    GenericName=
    Icon=system-run
    MimeType=
    Name[en_GB]=
    Name=
    Path=
    StartupNotify=true
    Terminal=false
    TerminalOptions=
    Type=Application
    X-DBUS-ServiceName=
    X-DBUS-StartupType=
    X-KDE-SubstituteUID=false
    X-KDE-Username=

HTH

Lorenzo
źródło
1

Byłem sfrustrowany tym, ponieważ nigdy nie mogłem go uruchomić, pomimo wszystkich dostarczonych rozwiązań, w tym dostarczonych przez kogoś, kto faktycznie pisze Xkod wejściowy. To powiedziawszy, odeszłam od niego i po prostu użyłam normalnej myszy przewodowej.

Wczoraj znalazłem Ultrathin i zdecydowałem się wypróbować go ponownie, a to po prostu działa. Jest to prawdą przynajmniej w tym sensie, że powodem tego pytania jest to, że te gesty były interpretowane w dziwny sposób i zakłócały mój przepływ pracy. Teraz wydają się nie mieć żadnego rzeczywistego efektu, z wyjątkiem tego, że przeciągnięcie lewej krawędzi pozwala mi przełączać się między ostatnio używanymi kartami w przeglądarce Firefox.

Dziwne jest to, że w żaden sposób gesty nie są wyłączone. Wszystkie 13 „przycisków” jest zwracanych przez xinput --get-button-map "Ultrathin Touch Mouse". grep Ultrathin /usr/share/X11/xorg.conf.dNic też nie zwraca. Nie znaleziono żadnych istotnych NoSymbol(i VoidSymbolw ogóle żadnych) z xkbcompani żadnych istotnych KEY_UNKNOWNz input-kbd.

Z drugiej strony wszystko wygląda tak samo, z evemu-recordwyjątkiem faktu, że gesty podwójnego stuknięcia są po prostu traktowane jako proste BTN_LEFTzdarzenia.

To powiedziawszy, coś się zmieniło w stosunku do tego, ale nie jestem pewien co.

Ponadto nie testowałem mapowania rzeczy, ale tak naprawdę nie wchodziło to w zakres pierwotnego pytania.

wxl
źródło
0

Przeczytałem wszystkie odpowiedzi i napisałem skrypt wokół input-kbd (część input-utils), aby automatycznie naprawić ten problem.

Powinieneś uruchomić fixMouse z tego repozytorium raz na każde logowanie. To będzie:

  1. słuchaj dbus dla tej myszy
  2. skonfiguruj wszystkie naciśnięcia klawiszy na KEY_UNKNOWN

Standardowe funkcje myszy (lewy przycisk; przewijanie itp.) Nadal działają poprawnie. Zatrzymywane są tylko dziwne klawisze klawiatury.

Przetrwa zawieszenie, tryb uśpienia Bluetooth, włączenie / wyłączenie myszy itp.

Mi to pasuje.

Berend
źródło