Controllo dei gesti del mouse Bluetooth che registrano gli eventi della tastiera


9

tl; dr

Ho appena comprato un Logitech T630 . È un mouse Bluetooth che supporta diversi eventi della tastiera tramite gesti (PDF). Questi gesti vanno bene e dandy ma ho poco da fare per loro. Mi sto divertendo molto a sbarazzarmi di loro.

Voglio fare quanto segue, in ordine di priorità decrescente:

  1. disabilita questi gesti
  2. rimappare i gesti (penso che senza hackerare il firmware o decodificare i driver di dispositivo Windows / OS X, questo non è possibile)

Non voglio:

  • usa Windows
  • disabilita tutti i gesti

Per maggiori informazioni, continua a leggere ...

pulsanti e gesti

I tredici possibili eventi del mouse sono:

  1. clic sinistro
  2. clic centrale
  3. tasto destro
  4. scorrere verso l'alto
  5. scorrere verso il basso
  6. scorrere verso sinistra
  7. scorrere verso destra
  8. fai scorrere il bordo a sinistra
  9. scorrere il bordo verso destra
  10. scorri con due dita verso sinistra
  11. scorri con due dita verso destra
  12. tocca due volte
  13. tocca due volte con due dita

I primi sette sono in ordine di come il sistema operativo li mappa.

Solo i primi tre sono meccanici, tutti gli altri usano la superficie tattile:

gesti tattili

Opzioni della GUI

Configurare in Kubuntu Trusty è stato un gioco da ragazzi, ma offre poco supporto per la configurazione di questi altri gesti.

Questi gesti non sono correlati a:

  • touchpad ( synapticsnon è in esecuzione)
  • accessibilità
  • angoli caldi
  • gesti standard del mouse

Tutte le impostazioni relative a quelle sono state verificate e sono tutte disattivate.

impostazioni della riga di comando

lomoco

L' lomocoutilità per la configurazione delle funzioni speciali dei mouse USB Logitech non è applicabile.

xinput

Ho pensato che xinputpotesse offrire un aiuto:

$ 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

Nota le 13 etichette dei pulsanti:

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

Disattivarli non ha aiutato:

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

Anche se, ad esempio, può trasformare il pulsante centrale del mouse in un clic sinistro:

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

xmodmap

Simile a xinput, stessi risultati:

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

inputkbd

Suggerito da elmicha di seguito , funziona a livello di kernel, cercando di far sì che i gesti risultino in eventi null sulla tastiera. Dovrebbe funzionare, ma anche qui, senza fortuna, con il seguente processo:

$ 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

Dopo aver fatto ciò, la keymap non mostra alcun cambiamento.

xkbcomp

Ciò è stato suggerito Xdall'hacker di input Peter Hutterer , sicuramente un uomo che dovrebbe sapere cosa stava facendo. Ancora niente fortuna:

$ 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

Dopo aver fatto ciò, la descrizione della tastiera non mostra alcuna modifica.

Peter riteneva che ciò fosse probabilmente dovuto al fatto che era Xconfuso sulla natura del dispositivo come tastiera o mouse, un po 'come questo bug che ha il problema opposto. Questo potrebbe spiegare perché tutti gli altri articoli previsti non funzionano. Tuttavia, ha anche affermato che l'utilizzo evdevnon dovrebbe funzionare per lo stesso motivo.

evdev

All'inizio sembrava funzionare, ma neanche. Questo tentativo di sfruttare il driver di input generico per Ximpostare la mappatura dei tasti aggiungendo il testo seguente /usr/share/X11/xorg.conf.d/10-evdev.confo /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

Questo sembra funzionare senza errori /var/log/Xorg.0.log(nell'uso grep EE) e xinputconferma la mappatura dei pulsanti, ma non provoca l'effetto desiderato.

Questo è noto per funzionare per il T631, tuttavia.

eventi da tastiera

Il problema risiede, credo, nel fatto che questi gesti generano eventi da tastiera:

$ 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) ----------

Per quanto riguarda la keymap , si riferiscono a:

$ 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

Il doppio tocco non sembra fare nulla.

altri riferimenti

Può anche aiutare a segnalare un riferimento a problemi simili in un bug con il mouse sopra menzionato che non si trova nel gnome-bluetoothdatabase con codice PIN. Inutile dire che ulteriori commenti sull'argomento sono ufficialmente offtopici su tale segnalazione di bug, ma i riferimenti possono aiutare ad aggiungere una prospettiva sulla natura di questo problema.

Ecco l'output di evemu-describe /dev/input/event4FWIW.

Adattatori Bluetooth

FWIW Ho usato due diversi adattatori Bluetooth USB:

$ 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

2
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Mitch

quindi ho capito il problema: penso che sia necessario installare sulla tua macchina virtuale Windows - driver Windows Logitech standard e fare riferimento vmmouse_detectall'utilità. xmodmape xinputpersino xorg.confsarà utile sotto Kubuntu ma non sotto Windows VM. Quindi sotto WinVM dovresti essere in grado di configurare il tuo mouse con le utility Logitech standard per Windows.
rapido

L'hai mai risolto?
Seth,

no, non è stato corretto. hai idee?
wl

Risposte:


3

Dopo molto dolore, sono riuscito a creare una mappa chiave che fa qualcosa di utile.

Prima un paio di note (non posso ancora commentare) sulla risposta precedente:

  1. lo script fixMouse fornito da Mr back-up non funziona, perché a volte la voce Tastiera del mouse appare con il nome sbagliato in xinput, cioè nel mio caso mostra:

    ⎡ 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)]
    

    d'altra parte puoi usare lsinput di input-utils per trovare l'id corretto:

    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. per qualche motivo quando si esegue il dump della mappa per il mouse, alcuni codici vengono duplicati (quelli compresi tra 0x700e0 e 0x700e7), fare attenzione a trovarli ed eliminarli o impazzire.

  3. la sostituzione di tutti i codici chiave con KEY_UNKNOWN impedisce l'esplosione di caratteri casuali, ma rende inutili le azioni di tocco speciali. Ho scoperto invece che puoi rimappare alcuni gesti in combinazioni utili. In particolare il "passaggio rapido da sinistra" invia i codici 0x700e0 + 0x700e3 + 0x7002b, mentre il "passaggio rapido da destra" invia 0x700e3 + 0x700e3 + 0x70072. Ho mappato 0x700e3, che è comune a entrambi i gesti, su KEY_UNKNOW, per toglierlo di mezzo. Quindi ho usato i codici chiave rimanenti per creare CTRL + F8 (griglia del desktop) e ALT-F2 (corridore), ma ovviamente puoi generare qualsiasi combinazione di due chiavi qualsiasi. Ecco la mia mappa, fai attenzione quando copia / incolla per non lasciare righe vuote e spazi vuoti iniziali (interrompono input-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
    

Non sono stato in grado di ottenere i codici corretti per lo scorrimento con due dita, ma di nuovo non mi interessa perché quei gesti sono impossibili da eseguire.

PS Se vuoi provare a personalizzare altri gesti, ecco come ho proceduto:

  1. Ho ordinato le voci della mappa, ripulito i duplicati e ho notato che comprende 252 simboli (più 5 pulsanti).

  2. Ho impostato i primi dieci simboli su KEY_A, i seguenti dieci su KEY_B e così via fino agli ultimi 2 che sono diventati KEY_Z; poi ho caricato questa mappa.

  3. Eseguo i gesti in una finestra di testo (oppure puoi usare "xbindkeys -mk") e prendere nota delle lettere prodotte.

  4. Nella mappa cambio tutte le lettere NON prodotte in KEY_UNKNOWN, le tre restanti in KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, quindi carico questa nuova MAP.

  5. Eseguo di nuovo il gesto, prendo atto delle lettere / numeri prodotti: questi sono i codici che possono essere definiti per qualsiasi cosa sia necessaria per creare una specifica combinazione di tasti.


2

Puoi provare a usare input-kbddal input-utilspacchetto:

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

Utilizzando l'indice del dispositivo di input (ad es. 4 per /dev/input/event4, che può essere trovato tramite il lsinputquale è necessariamente diverso dall'id utilizzato in xinput), è possibile riconfigurare la mappa della tastiera inserendola in un file con l' -finterruttore, ad es.

$ sudo input-kbd -f some-file 4

dove some-fileprende la forma di scancode = keycode|keyname, dove sono equivalenti i seguenti:

0x0001 = KEY_F9
0x0001 = 67

Puoi trovare la mappa corrente con sudo input-kbd 4. Poiché è necessario aprire un file da /dev, è necessario utilizzare superutente per leggere questo evento.

Inoltre, nonostante il suo nome apparentemente fuorviante, funziona anche con i topi.


Potresti essere sul giusto meccanismo, ma, purtroppo guardando la mappa dei tasti , non è chiaro quale scancode cambiare, specialmente dato che alcuni di questi nomi di chiave sono completamente indefiniti. Forse se potessi trovare il meccanismo per scoprire la definizione dei nomi dei tasti, sarebbe utile. +1 per avvicinarsi.
wxl,

Cosa succede se si mappano tutti i KEY_ * su 0 o uno dei valori di KEY_UNKNOWN (ad es. 240)? O questo disabilita alcuni dei gesti che vuoi mantenere? Per generare la nuova mappa, è possibile reindirizzare la mappa corrente awk '/KEY_/ { $3 = 240 } { print }'.
elmicha,

Credo che la domanda è: dove posso trovare la definizione di KEY_UNKNOWN, o per quella materia, BTN_EXTRA?
wl

Puoi usare sudo input-events 4per vedere quale pulsante del mouse è quale. KEY_UNKNOWN (si spera) non stampa né attiva alcuna azione.
elmicha,

1
La definizione dei nomi delle chiavi è in /usr/include/linux/input.h, che afferma che i nomi sono modellati su USB HUT 1.12 , che dice che i codici chiave 232-65535 sono "Riservati". input-kbd usa name.shthere per invertire il nome della chiave -> mapping del codice, per consentire a input_kbd di stampare i nomi per i codici chiave.
elmicha,

2

Per disabilitare i gesti, è possibile modificare la mappatura dei pulsanti con il evdevdriver in modo che gli ultimi 6 "pulsanti" siano tutti disabilitati in questo modo:

  1. aggiungendo quanto segue /usr/share/X11/xorg.conf.d/10-evdev.confo in /etc/X11/xorg.conf.d/10-evdev.confbase a ciò che hai:

    # 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. riavviare il Xserver consudo service lightdm restart

  3. conferma con xinput --get-button-map "Ultrathin Touch Mouse"

È possibile modificare il valore di InputDevice Identifierse lo si desidera, ma è importante mantenere il valore per InputDevice Namee InputClass Identifiercome "Mouse ultrasottile touch", poiché è così che lo xinputriconosce.

Testato con la versione Mac, T631.

Se vuoi maggiori informazioni su evdevquesto, questo post sul blog di Joe Shaw è particolarmente penetrante su come si adatta all'intero stack di input.


Questa è potenzialmente una buona soluzione. Tuttavia, detesto usare i Xfile di configurazione, specialmente quelli definiti a livello globale. Alcuni percorsi di aggiornamento li sovrascriveranno, il che non è l'ideale. Inoltre, questo non è l'ideale perché non è chiaro come rimappare le chiavi. Non sto dicendo che non sia una soluzione valida, ma quando si tratta di ricompensa, l'altra risposta potrebbe vincere. ☺ Infine, è un peccato che questo non possa essere implementato senza un riavvio. Forse se riuscissi a trovare un modo per affrontare evdevdirettamente, potrebbe essere carino, ma non ho trovato nulla del genere.
wxl,

Rispettosamente, penso che tu stia chiedendo troppo. Ma comunque, non ho postato per ottenere la taglia, solo per aiutare eventualmente coloro che hanno un problema simile. Se hanno meno vincoli su una soluzione, allora dovrebbe essere utile a loro. Detto questo, sono sicuro che se volessi riavviare X, potresti ottenere lo stesso risultato senza riavviare. Sarebbe solo un po 'disordinato. Ma ti sento parlare dell'aggiornamento. Dovrò stare molto attento a non rompere le cose durante un aggiornamento.
Steev,

1
rispettosamente, sono d'accordo, ma la mia speranza è sempre di aiutare più di me stesso. detto questo, apprezzo molto la tua risposta, motivo per cui l'ho fatto +1!
wxl,

beh, congratulazioni dato che il tuo funziona davvero;)
wxl

1
oh, ho sbagliato. sembrava comportarsi bene, ma in realtà non sono riuscito a provarlo evemu-record. non funziona :(
wxl

1

Sono riuscito a configurare i gesti "scorrimento del bordo sinistro" e "scorrimento del bordo destro" utilizzando xbindkeys; questo può probabilmente valere anche per i due movimenti delle dita, ma non mi sono preoccupato di quelli poiché li trovo comunque difficili da eseguire.

Questo è il mio .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

Li ho mappati su utili scorciatoie di KDE, ovviamente puoi fare qualsiasi altra cosa. Devi eseguire xbindkeys al login, ho creato un file .desktop come spiegato in tutti i tutorial di 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


1

Sono stato frustrato da questa cosa perché non sono mai riuscito a farlo funzionare, nonostante tutte le soluzioni fornite, comprese quelle fornite da qualcuno che scrive effettivamente il Xcodice di input. Detto questo, mi sono allontanato da esso e ho appena usato un normale mouse con filo.

Ieri ho trovato l'Ultrasottile e ho deciso di provarlo di nuovo ed è Just Works ™. Questo è vero almeno nel senso che la ragione di questa domanda è che questi gesti venivano interpretati in modi strani e incasinati con il mio flusso di lavoro. Ora sembrano non avere alcun effetto reale, tranne per il fatto che il tocco sul bordo sinistro mi consente di scambiare tra le ultime schede utilizzate in Firefox.

La cosa strana è che in nessun modo i gesti sono effettivamente disabilitati. Tutti i 13 "pulsanti" vengono restituiti da xinput --get-button-map "Ultrathin Touch Mouse". Inoltre grep Ultrathin /usr/share/X11/xorg.conf.dnon restituisce nulla. Non ci sono NoSymbols rilevanti (e non ci sono VoidSymbolaffatto) trovati xkbcompKEY_UNKNOWNs rilevanti input-kbd.

D'altra parte, tutto sembra uguale allo stesso, evemu-recordtranne per il fatto che i gesti del doppio tocco sono semplicemente considerati BTN_LEFTeventi semplici .

Detto questo, qualcosa è cambiato in relazione a questo, ma non sono sicuro di cosa.

Inoltre, non ho provato a rimappare le cose, ma questo non rientrava nell'ambito della domanda originale.


0

Ho letto tutte le risposte e ho scritto uno script attorno a input-kbd (parte di input-utils) per risolvere automaticamente questo problema.

È necessario eseguire fixMouse da questo repository dopo ogni accesso. Lo farà:

  1. ascolta dbus per questo mouse
  2. configura tutte le sequenze di tasti su KEY_UNKNOWN

Le funzioni standard del mouse (pulsante sinistro; scorrimento; ecc.) Funzionano ancora bene. Solo gli strani tasti della tastiera vengono fermati.

Sopravvive alla sospensione, alla sospensione del bluetooth, al mouse acceso-spento, ecc.

Per me funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.