Controlar los gestos del mouse Bluetooth que registran eventos del teclado

9

tl; dr

Acabo de comprar un Logitech T630 . Es un mouse Bluetooth que admite varios eventos de teclado a través de gestos (PDF). Estos gestos son buenos y elegantes, pero les sirvo poco. Me está costando mucho deshacerme de ellos.

Quiero hacer lo siguiente, en orden decreciente de prioridad:

  1. deshabilitar estos gestos
  2. reasignar los gestos (creo que sin piratear el firmware o realizar ingeniería inversa en los controladores de dispositivo de Windows / OS X, esto no es posible)

No quiero:

  • usar Windows
  • deshabilitar todos los gestos

Para más información, sigue leyendo ...

botones y gestos

Los trece posibles eventos del mouse son:

  1. click izquierdo
  2. clic medio
  3. botón derecho del ratón
  4. desplazarse hacia arriba
  5. desplazarse hacia abajo
  6. desplazarse hacia la izquierda
  7. desplazarse hacia la derecha
  8. deslizar el borde hacia la izquierda
  9. deslizar el borde hacia la derecha
  10. deslizar dos dedos hacia la izquierda
  11. deslizar dos dedos hacia la derecha
  12. doble toque
  13. doble toque con dos dedos

Los primeros siete están en orden de cómo los asigna el sistema operativo.

Solo los tres primeros son mecánicos; todos los demás usan la superficie táctil:

gestos táctiles

Opciones de GUI

Configurar en Kubuntu Trusty fue muy fácil, pero ofrece poco soporte para configurar estos otros gestos.

Estos gestos no están relacionados con:

  • touchpad (synaptics no se está ejecutando)
  • accesibilidad
  • rincones calientes
  • gestos estándar del mouse

Se han verificado todas las configuraciones relacionadas con ellas y están todas apagadas.

configuración de línea de comando

lomoco

La lomocoutilidad para ayudar a configurar características especiales de los ratones USB Logitech no es aplicable.

xinput

Pensé que xinputpodría ofrecer algo de ayuda:

$ 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

Tenga en cuenta las 13 etiquetas de botones:

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

Apagarlos no ayudó:

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

Aunque, por ejemplo, puede convertir el botón central del mouse en un clic izquierdo:

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

xmodmap

Similar a xinput, los mismos resultados:

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

inputkbd

Sugerido por elmicha a continuación , esto está funcionando a nivel del núcleo, tratando de hacer que los gestos den como resultado eventos de teclado nulos. Debería funcionar, pero tampoco suerte aquí, con el siguiente proceso:

$ 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

Después de hacer esto, el mapa de teclas no muestra ningún cambio.

xkbcomp

Esto fue sugerido por Xel hacker de entrada Peter Hutterer , ciertamente un hombre que debería saber lo que estaba haciendo. Aún así, no hubo suerte:

$ 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

Después de hacer esto, la descripción del teclado no muestra ningún cambio.

Peter sintió que esto probablemente se debía al hecho de que Xestá confundido en cuanto a la naturaleza del dispositivo como un teclado o un mouse, algo así como este error que tiene el problema opuesto. Esto puede explicar por qué todos los demás elementos esperados no funcionan. Sin embargo, también dijo que usar evdevno debería funcionar por la misma razón.

evdev

Al principio parecía funcionar, pero tampoco lo hace. Esto intenta aprovechar el controlador de entrada genérico para Xestablecer la asignación de botones agregando lo siguiente a /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

Esto parece funcionar sin errores en /var/log/Xorg.0.log(usar grep EE), yxinput confirma la asignación de botones, pero no produce el efecto de deseo.

Esto es conoce con el trabajo para el T631, sin embargo.

eventos de teclado

El problema radica, creo, en el hecho de que estos gestos generan eventos de teclado:

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

En lo que respecta al mapa de teclas , se refieren 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

El doble toque no parece hacer nada.

otras referencias

También puede ser útil señalar una referencia a problemas similares en un error con el mouse antes mencionado que no está en la gnome-bluetoothbase de datos de código PIN. No hace falta decir que los comentarios adicionales sobre el tema son oficialmente tópicos en ese informe de error, pero las referencias pueden ayudar a agregar alguna perspectiva sobre la naturaleza de este problema.

Aquí está la salida de evemu-describe /dev/input/event4FWIW.

Adaptadores Bluetooth

FWIW He usado dos adaptadores USB Bluetooth diferentes:

$ 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
fuente
2
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Mitch
así que me di cuenta del problema: creo que necesita instalarlo en su VM de Windows: controlador estándar de Windows Logitech y consulte la vmmouse_detectutilidad. xmodmape xinputincluso xorg.confserá útil bajo su Kubuntu pero no bajo Windows VM. Entonces, bajo WinVM, debería poder configurar su mouse con las utilidades estándar de Logitech para Windows.
rápido
¿Alguna vez resolviste esto?
Seth
No, no se ha solucionado. ¿Tienes ideas?
wxl

Respuestas:

3

Después de mucho dolor, logré crear un mapa clave que hace algo útil.

Primero un par de notas (no puedo comentar aún) sobre la respuesta anterior:

  1. el script fixMouse proporcionado por Mr back-up no funciona, porque a veces la entrada del teclado del mouse aparece con un nombre incorrecto en xinput, es decir, en mi caso muestra:

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

    Por otro lado, puede usar lsinput desde input-utils para encontrar la identificación correcta:

    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. Por alguna razón, al volcar el mapa para el mouse, algunos códigos se duplican (aquellos entre 0x700e0 y 0x700e7), tenga cuidado de encontrarlos y eliminarlos, o se volverá loco.

  3. Reemplazar todos los códigos de tecla con KEY_UNKNOWN evita las ráfagas de caracteres aleatorios, pero hace que las acciones táctiles especiales sean inútiles. En cambio, descubrí que puedes reasignar algunos de los gestos a combinaciones útiles. En particular, el "deslizar desde la izquierda" envía los códigos 0x700e0 + 0x700e3 + 0x7002b, mientras que el "deslizar desde la derecha" envía 0x700e3 + 0x700e3 + 0x70072. Mapeé 0x700e3, que es común a ambos gestos, a KEY_UNKNOW, para quitarlo del camino. Luego utilicé los códigos de tecla restantes para hacer CTRL + F8 (cuadrícula de escritorio) y ALT-F2 (corredor), pero por supuesto puedes generar cualquier combinación de dos teclas. Aquí está mi mapa, tenga cuidado al copiar / pegar para no dejar líneas vacías ni espacios en blanco iniciales (rompen 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
    

No pude obtener los códigos adecuados para los golpes de dos dedos, pero nuevamente no me importa porque esos gestos son imposibles de realizar.

PD: en caso de que desee intentar personalizar otros gestos, así es como procedí:

  1. Ordene las entradas del mapa, limpié los duplicados y noté que comprende 252 símbolos (más 5 botones).

  2. Establecí los primeros diez símbolos en KEY_A, los siguientes diez en KEY_B y así sucesivamente hasta los últimos 2 que se convirtieron en KEY_Z; Entonces cargué este mapa.

  3. Realizo los gestos en una ventana de texto (o puede usar "xbindkeys -mk") y tomo nota de las letras producidas.

  4. En el mapa, cambio todas las letras NO producidas a KEY_UNKNOWN, las tres restantes a KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, luego cargo este nuevo MAP.

  5. Realizo el gesto nuevamente, tomo nota de las letras / números producidos: estos son los códigos que se pueden definir según lo que necesite para hacer una combinación de teclas específica.

lorenzo
fuente
2

Podría intentar usar input-kbddesde el input-utilspaquete:

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

Usando el índice del dispositivo de entrada (p. Ej., 4 para /dev/input/event4, que se puede encontrar a través del lsinputcual es necesariamente diferente de la identificación utilizada xinput), puede reconfigurar el mapa del teclado al alimentarlo con un archivo con el -finterruptor, p. Ej.

$ sudo input-kbd -f some-file 4

donde some-filetoma la forma de scancode = keycode|keyname, donde los siguientes son equivalentes:

0x0001 = KEY_F9
0x0001 = 67

Puede encontrar el mapa actual con sudo input-kbd 4. Ya que necesita abrir un archivo desde/dev , debe usar el superusuario para leer esto.

También tenga en cuenta que a pesar de su nombre aparentemente engañoso, también funciona con ratones.

elmicha
fuente
Usted puede ser el que el mecanismo adecuado, pero, por desgracia, mirando el mapa de teclado , no está claro qué código de rastreo al cambio, especialmente teniendo en cuenta que algunos de esos nombres de clave no están definidos en su totalidad. Quizás si pudiera encontrar el mecanismo para encontrar la definición de los nombres clave, sería útil. +1 por acercarse.
wxl
¿Qué sucede si asigna todos los KEY_ * a 0 o uno de los valores de KEY_UNKNOWN (por ejemplo, 240)? ¿O deshabilita algunos de los gestos que desea mantener? Para generar el nuevo mapa, puede canalizar el mapa actual awk '/KEY_/ { $3 = 240 } { print }'.
elmicha
Supongo que la pregunta es, ¿dónde puedo encontrar la definición KEY_UNKNOWNo, para el caso BTN_EXTRA,?
wxl
Puede usar sudo input-events 4para ver qué botón del mouse es cuál. KEY_UNKNOWN (con suerte) no imprime ni activa ninguna acción.
elmicha
1
La definición de los nombres de las claves se encuentra en /usr/include/linux/input.h, que establece que los nombres se modelan después de USB HUT 1.12 , que dice que los códigos de teclas 232-65535 están "reservados". input-kbd usa name.shthere para revertir el nombre de clave -> mapeo de código, para permitir que input_kbd imprima nombres para los códigos de clave.
elmicha
2

Para deshabilitar los gestos, puede cambiar la asignación de botones con el evdevcontrolador para que los últimos 6 "botones" estén deshabilitados así:

  1. agregando lo siguiente /usr/share/X11/xorg.conf.d/10-evdev.confo /etc/X11/xorg.conf.d/10-evdev.confdependiendo de lo que tenga:

    # 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. reiniciar el Xservidor consudo service lightdm restart

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

Puede cambiar el valor de InputDevice Identifiersi lo desea, pero es importante mantener el valor InputDevice Namey InputClass Identifiercomo "Ultrathin Touch Mouse", ya que así es como lo xinputreconoce.

Probado con la versión para Mac, T631.

Si desea obtener un poco más de información evdev, esta publicación de blog de Joe Shaw es particularmente perspicaz acerca de cómo encaja en toda la pila de entradas.

steev
fuente
Esta es potencialmente una buena solución. Sin embargo, odio usar Xarchivos de configuración, especialmente los definidos globalmente. Ciertas rutas de actualización las sobrescribirán, lo que no es ideal. Además, esto no es ideal porque no está claro cómo reasignar las teclas. No digo que no sea una solución válida, pero cuando se trata de recompensas, la otra respuesta puede ganar. ☺ Finalmente, es un fastidio que esto no se pueda implementar sin un reinicio. Tal vez si pudieras encontrar alguna forma de tratar evdevdirectamente, eso sería bueno, pero no he encontrado tal cosa.
wxl
Respetuosamente, creo que estás pidiendo demasiado. Pero de todos modos, no publiqué para obtener la recompensa, solo para posiblemente ayudar a aquellos que tienen un problema similar. Si tienen menos restricciones sobre una solución que usted, entonces debería ser útil para ellos. Dicho esto, estoy seguro de que si desea reiniciar X, podría lograr el mismo resultado sin reiniciar. Sería un poco desordenado. Pero te escucho sobre la actualización. Tendré que tener mucho cuidado de no romper las cosas durante una actualización.
steev
1
respetuosamente, estoy de acuerdo, pero mi esperanza es siempre ayudar más que a mí mismo. Dicho esto, agradezco su respuesta, ¡por eso lo hice + 1!
wxl
bueno, felicidades ya que el tuyo realmente funciona;)
wxl
1
Dios mío, estaba equivocado. parecía estar comportándose, pero no pude probarlo realmente evemu-record. no funciona :(
wxl
1

Logré configurar los gestos "deslizar el borde izquierdo" y "deslizar el borde derecho" usando xbindkeys; Esto probablemente también se puede aplicar a los dos deslizamientos de los dedos, pero no me molesté con ellos, ya que me resulta difícil realizarlos de todos modos.

Este es mi .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

Los he asignado a atajos útiles de KDE, por supuesto, puedes hacer cualquier otra cosa. Necesita ejecutar xbindkeys al iniciar sesión, he creado un archivo .desktop como se explica en los tutoriales de 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
fuente
1

Me sentí frustrado por esto porque nunca pude lograr que funcionara, a pesar de todas las soluciones proporcionadas, incluidas las proporcionadas por alguien que realmente escribe X el código de entrada. Dicho esto, me alejé de él y solo usé un mouse normal con cable.

Ayer encontré el Ultrathin y decidí probarlo de nuevo y Just Works ™.Esto es cierto al menos en el sentido de que la razón de esta pregunta es que estos gestos fueron interpretados de manera extraña y jugando con mi flujo de trabajo. Ahora parecen no tener ningún efecto real, excepto que el deslizamiento del borde izquierdo me permite cambiar entre las últimas pestañas usadas en Firefox.

Lo extraño es que de ninguna manera los gestos están realmente desactivados. Todos los 13 "botones" son devueltos por xinput --get-button-map "Ultrathin Touch Mouse". Tampoco grep Ultrathin /usr/share/X11/xorg.conf.ddevuelve nada. No hay NoSymbols relevantes (y no hay VoidSymbols en absoluto) encontrados xkbcompni relevantesKEY_UNKNOWN s coninput-kbd .

Por otro lado, todo se ve igual evemu-recordexcepto por el hecho de que los gestos de doble toque simplemente se toman como simplesBTN_LEFT eventos .

Dicho esto, algo ha cambiado en relación con esto, pero no estoy seguro de qué.

Además, no he probado la reasignación de cosas, pero eso no estaba realmente en el alcance de la pregunta original.

wxl
fuente
0

He leído todas las respuestas y he escrito un script alrededor de input-kbd (parte de input-utils) para corregir automáticamente este problema.

Debe ejecutar fixMouse desde este repositorio una vez cada inicio de sesión. Va a:

  1. escucha dbus para este mouse
  2. configurar todas las pulsaciones de teclas para KEY_UNKNOWN

Las funciones estándar del mouse (botón izquierdo; desplazamiento; etc.) aún funcionan bien. Solo se detienen las extrañas teclas del teclado.

Sobrevive a la suspensión, el sueño de Bluetooth, el encendido y apagado del mouse, etc.

Esto funciona para mi.

Berend
fuente