Controlando os gestos do mouse Bluetooth que registram eventos do teclado

9

tl; dr

Acabei de comprar um Logitech T630 . É um mouse Bluetooth que suporta vários eventos do teclado por meio de gestos (PDF). Esses gestos são bons e elegantes, mas eu tenho pouco uso para eles. Estou tendo um tempo terrível me livrando deles.

Quero fazer o seguinte, em ordem decrescente de prioridade:

  1. desativar esses gestos
  2. remapear os gestos (acho que sem hackear o firmware ou fazer engenharia reversa dos drivers de dispositivo do Windows / OS X, isso não é possível)

Eu não quero:

  • use o Windows
  • desativar todos os gestos

Para mais informações, leia…

botões e gestos

Os treze eventos possíveis do mouse são:

  1. Clique esquerdo
  2. clique do meio
  3. clique direito
  4. rolar para cima
  5. rolar para baixo
  6. rolar para a esquerda
  7. role para a direita
  8. deslize a borda para a esquerda
  9. deslize a borda para a direita
  10. deslize com dois dedos para a esquerda
  11. deslize com dois dedos para a direita
  12. toque duplo
  13. toque duplo com dois dedos

Os sete primeiros estão em ordem de como o sistema operacional os mapeia.

Apenas os três primeiros são mecânicos - todos os outros usam a superfície de toque:

gestos de toque

Opções da GUI

A instalação no Kubuntu Trusty foi muito fácil, mas oferece pouco suporte para a configuração desses outros gestos.

Esses gestos não estão relacionados a:

  • touchpad ( synapticsnão está em execução)
  • acessibilidade
  • cantos quentes
  • gestos padrão do mouse

Todas as configurações relacionadas foram verificadas e estão todas desativadas.

configurações da linha de comando

lomoco

O lomocoutilitário para ajudar a configurar recursos especiais dos mouses USB da Logitech não é aplicável.

xinput

Eu pensei que xinputpoderia oferecer alguma ajuda:

$ 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

Observe os 13 rótulos dos botões:

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

Desligá-los não ajudou:

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

Mesmo assim, por exemplo, ele pode transformar o botão do meio do mouse em um clique esquerdo:

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

xmodmap

Similar aos xinputmesmos resultados:

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

inputkbd

Sugerido por elmicha abaixo , isso está funcionando no nível do kernel, tentando fazer com que os gestos resultem em eventos de teclado nulos. Deve funcionar, mas também não há sorte aqui, com o seguinte 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

Depois de fazer isso, o mapa de teclas não mostra nenhuma alteração.

xkbcomp

Isso foi sugerido pelo Xhacker Peter Hutterer , certamente um homem que deveria saber o que estava fazendo. Ainda assim, sem sorte:

$ 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

Depois de fazer isso, a descrição do teclado não mostra alterações.

Peter achava que isso provavelmente se devia ao fato de Xestar confuso quanto à natureza do dispositivo como teclado ou mouse, como esse bug que tem o problema oposto. Isso pode explicar por que todos os outros itens esperados não funcionam. No entanto, ele também disse que o uso evdevnão deve funcionar pelo mesmo motivo.

evdev

Pareceu a princípio funcionar, mas também não. Isso tenta aproveitar o driver de entrada genérico Xpara definir o mapeamento de botão anexando o seguinte a /usr/share/X11/xorg.conf.d/10-evdev.confou /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

Isso parece funcionar sem erros /var/log/Xorg.0.log(usando grep EE) e xinputconfirma o mapeamento de botões, mas não resulta no efeito desejado.

Esta é no entanto conhecido para trabalhar para o T631,.

eventos de teclado

O problema reside, acho, no fato de que esses gestos geram 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) ----------

No que diz respeito ao mapa de teclas , eles se referem 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

O toque duplo parece não fazer nada.

Outras referências

Também pode ajudar a apontar uma referência a problemas semelhantes em um bug, com o mouse mencionado acima não estando no gnome-bluetoothbanco de dados pincode. Escusado será dizer que mais comentários sobre o assunto são oficialmente offtopic nesse relatório de bug, mas as referências podem ajudar a adicionar alguma perspectiva sobre a natureza desse problema.

Aqui está a saída do evemu-describe /dev/input/event4FWIW.

Adaptadores Bluetooth

FWIW Eu usei dois 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
fonte
2
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Mitch
então resolvi o problema: acho que você precisa instalar no seu Windows VM - driver padrão do Windows Logitech e consultar o vmmouse_detectutilitário. xmodmape xinpute mesmo xorg.confserá útil em seu Kubuntu, mas não no Windows VM. Portanto, no WinVM, você poderá configurar o mouse com os utilitários padrão da Logitech para Windows.
swift
Você já resolveu isso?
Seth
não, não foi corrigido. tem idéias?
Wxl

Respostas:

3

Depois de muita dor, consegui criar um mapa-chave que faz algo útil.

Primeiro, algumas notas (ainda não posso comentar) sobre a resposta anterior:

  1. o script fixMouse fornecido pelo backup do Sr. não funciona, porque às vezes a entrada de teclado do mouse aparece com o nome errado no xinput, ou seja, no meu 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)]
    

    por outro lado, você pode usar lsinput de input-utils para encontrar o ID correto:

    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 algum motivo, ao descarregar o mapa para o mouse, alguns códigos são duplicados (aqueles entre 0x700e0 e 0x700e7), tenha cuidado para encontrá-los e eliminá-los, ou você ficará louco.

  3. a substituição de todos os códigos de chave por KEY_UNKNOWN evita a explosão de caracteres aleatórios, mas torna inúteis as ações especiais de toque. Descobri que você pode remapear alguns dos gestos para combinações úteis. Em particular, o "deslize da esquerda" envia os códigos 0x700e0 + 0x700e3 + 0x7002b, enquanto o "deslize da direita" envia 0x700e3 + 0x700e3 + 0x70072. Mapeei 0x700e3, que é comum a ambos os gestos, para KEY_UNKNOW, para tirá-lo do caminho. Então usei os códigos de chave restantes para criar CTRL + F8 (grade da área de trabalho) e ALT-F2 (corredor), mas é claro que você pode gerar qualquer combinação de duas chaves. Aqui está o meu mapa, tenha cuidado ao copiar / colar para não deixar linhas vazias nem espaços em branco iniciais (eles quebram 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
    

Não consegui obter os códigos adequados para os furtos com dois dedos, mas, novamente, não me importo porque esses gestos são impossíveis de executar.

PS No caso de você querer personalizar outros gestos, eis como eu procedi:

  1. Classifiquei as entradas do mapa, limpei as duplicatas e notei que ela compreende 252 símbolos (mais 5 botões).

  2. Defino os dez primeiros símbolos como KEY_A, os dez seguintes como KEY_B e assim por diante até os dois últimos que se tornaram KEY_Z; então carreguei este mapa.

  3. Realizo os gestos em uma janela de texto (ou você pode usar "xbindkeys -mk") e tomo nota das letras produzidas.

  4. No mapa, altero todas as letras NÃO produzidas para KEY_UNKNOWN, as três restantes para KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, depois carrego este novo MAP.

  5. Repito o gesto, tomo nota das letras / números produzidos: estes são os códigos que podem ser definidos para o que você precisar para fazer uma combinação de teclas específica.

Lorenzo
fonte
2

Você pode tentar usar input-kbdo input-utilspacote:

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

Usando o índice do dispositivo de entrada (por exemplo, 4 para /dev/input/event4, que pode ser encontrado através do lsinputqual é necessariamente diferente do ID usado xinput), você pode reconfigurar o mapa do teclado, alimentando um arquivo com o -fcomutador, por exemplo

$ sudo input-kbd -f some-file 4

onde o some-fileassume a forma de scancode = keycode|keyname, onde o seguinte é equivalente:

0x0001 = KEY_F9
0x0001 = 67

Você pode encontrar o mapa atual com sudo input-kbd 4. Desde que você precisa abrir um arquivo /dev, é necessário usar o superusuário para ler este evento.

Observe também que, apesar do nome aparentemente enganador, ele também funciona com ratos.

elmicha
fonte
Você pode estar no mecanismo certo, mas, infelizmente, olhando para o mapa de teclas , não está claro qual código de alteração mudar, especialmente porque alguns desses nomes de chave são totalmente indefinidos. Talvez se você pudesse encontrar o mecanismo para descobrir a definição de nomes-chave, isso seria útil. +1 para se aproximar.
Wxl
O que acontece se você mapear todos os KEY_ * para 0 ou um dos valores KEY_UNKNOWN (por exemplo, 240)? Ou isso desativa alguns dos gestos que você deseja manter? Para gerar o novo mapa, você pode canalizar o mapa atual awk '/KEY_/ { $3 = 240 } { print }'.
elmicha
Eu acho que a pergunta é: onde posso descobrir a definição de KEY_UNKNOWN, ou para esse assunto BTN_EXTRA?
Wxl
Você pode usar sudo input-events 4para ver qual botão do mouse é qual. KEY_UNKNOWN (espero) não imprime ou dispara nenhuma ação.
elmicha
11
A definição dos nomes das chaves está em /usr/include/linux/input.h, que indica que os nomes são modelados após o USB HUT 1.12 , que diz que os códigos de chave 232-65535 são "Reservados". O input-kbd usa o name.shlá para inverter o nome da chave -> mapeamento de código, para permitir que o input_kbd imprima nomes para os códigos de chave.
elmicha
2

Para desativar os gestos, você pode alterar o mapeamento de botões com o evdevdriver para que os últimos 6 "botões" sejam todos desabilitados da seguinte maneira:

  1. anexando o seguinte /usr/share/X11/xorg.conf.d/10-evdev.confou /etc/X11/xorg.conf.d/10-evdev.confdependendo do que você possui:

    # 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. reiniciando o Xservidor comsudo service lightdm restart

  3. confirme com xinput --get-button-map "Ultrathin Touch Mouse"

Você pode alterar o valor de InputDevice Identifierse desejar, mas é importante manter o valor para InputDevice Namee InputClass Identifiercomo "Ultrathin Touch Mouse", pois é assim que o xinputreconhece.

Testado com a versão Mac, T631.

Se você quiser um pouco mais de informações evdev, este post de Joe Shaw é particularmente esclarecedor sobre como ele se encaixa em toda a pilha de entradas.

steev
fonte
Esta é potencialmente uma boa solução. No entanto, detesto usar Xarquivos de configuração, especialmente os definidos globalmente. Certos caminhos de atualização os substituirão, o que não é o ideal. Além disso, isso não é ideal porque não está claro como remapear as chaves. Não estou dizendo que não é uma solução válida, mas quando se trata de recompensa, a outra resposta pode vencer. ☺ Finalmente, é uma pena que isso não possa ser implementado sem uma reinicialização. Talvez se você pudesse descobrir alguma maneira de lidar evdevdiretamente, isso seria bom, mas eu não encontrei isso.
Wxl
Respeitosamente, acho que você está pedindo demais. Mas de qualquer maneira, eu não postei para receber a recompensa, apenas para possivelmente ajudar aqueles que têm um problema semelhante. Se eles tiverem menos restrições em uma solução do que você, deve ser útil para eles. Dito isto, tenho certeza que se você quisesse reiniciar o X, poderia obter o mesmo resultado sem reiniciar. Seria apenas um pouco confuso. Mas eu ouvi você sobre a atualização. Vou ter muito cuidado para não quebrar as coisas durante uma atualização.
steev
11
respeitosamente, concordo, mas minha esperança é sempre ajudar mais do que apenas eu. Dito isto, agradeço sua resposta, e foi por isso que marquei com +1!
Wxl
bem, parabéns desde que o seu realmente funcione;)
wxl 15/01
11
omg, eu estava errado. parecia estar se comportando, mas eu realmente não testei evemu-record. não funciona :(
wxl
1

Eu consegui configurar os gestos "deslize da borda esquerda" e "deslize da borda direita" usando xbindkeys; isso provavelmente pode se aplicar também aos golpes de dois dedos, mas eu não me incomodei com eles, pois acho que eles são difíceis de executar de qualquer maneira.

Este é o meu .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

Mapeei-os para atalhos úteis do KDE, é claro que você pode fazer qualquer outra coisa. Você precisa executar o xbindkeys no login. Criei um arquivo .desktop, conforme explicado em qualquer tutorial sobre 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
fonte
1

Fiquei frustrado com isso, porque nunca consegui fazê-lo funcionar, apesar de todas as soluções fornecidas, incluindo as fornecidas por alguém que realmente escreve Xcódigo de entrada. Dito isso, eu me afastei dele e usei um mouse normal com fio.

Ontem encontrei o ultrafino e decidi tentar novamente e ele simplesmente funciona. Isso é verdade, pelo menos no sentido em que a razão para esta pergunta é que esses gestos estavam sendo interpretados de maneiras estranhas e mexendo com meu fluxo de trabalho. Agora, eles parecem não ter efeito real, exceto que o toque na borda esquerda me permite alternar entre as últimas guias usadas no Firefox.

O que é estranho é que os gestos não são realmente desativados. Todos os 13 "botões" são retornados por xinput --get-button-map "Ultrathin Touch Mouse". Também grep Ultrathin /usr/share/X11/xorg.conf.dnão retorna nada. Não há NoSymbols relevantes (e nenhum VoidSymbols) encontrados com xkbcompnem KEY_UNKNOWNs relevantes input-kbd.

Por outro lado, tudo parece o mesmo, evemu-recordexceto pelo fato de os gestos de toque duplo serem considerados BTN_LEFTeventos simples .

Dito isto, algo mudou em relação a isso, mas não sei ao certo o que.

Além disso, não testei remapear as coisas, mas isso não estava realmente no escopo da pergunta original.

wxl
fonte
0

Li todas as respostas e escrevi um script em torno do input-kbd (parte do input-utils) para corrigir automaticamente esse problema.

Você deve executar o fixMouse neste repositório uma vez a cada login. Será:

  1. ouça dbus para este mouse
  2. configure todas as teclas para KEY_UNKNOWN

Os recursos padrão do mouse (botão esquerdo; rolagem; etc.) ainda funcionam bem. Apenas as estranhas teclas do teclado são paradas.

Ele sobrevive à suspensão, suspensão do bluetooth, mouse on-off, etc.

Funciona para mim.

Berend
fonte