mapeamento de botão Xinput e emulação do botão do meio

2

Eu tenho um mouse com 4 botões físicos (Kensington Slimblade Trackball), vamos chamá-los de A B C D, mais 3 eixos: mouse X, Y e roda de rolagem.

Os botões A e B funcionam como caixa principal (botão 1) e clique direito (botão 3). Pressionar A + B juntos gera um clique do meio (botão 2), o que também é ótimo.

Agora, gostaria de mapear os botões C e D para minhas próprias finalidades, mas não consigo encontrar como mapear o botão C separadamente da emulação A + B.

Com o mapa de botões padrão, recebo este mapeamento:

physical buttons:   A C B         D
xinput button-map:  1 2 3 4 5 6 7 8 9 10 11 12 

Se eu tentar mapear o botão C para 8 e D para 9, com xinput set-button-map , então pressionar A + B também será mapeado para o botão 8!

physical buttons:   A C B         D
xinput button-map:  1 8 3 0 0 0 0 9
                      ^
                      A+B emulation becomes 8 too!

Como posso mapear o botão C para um número de botão arbitrário, mantendo a emulação A + B como botão 2?

Devo trabalhar em um nível inferior ao Xinput? Como? Devo usar uma configuração Xinput diferente?

Edit: aqui estão os códigos evtest para os 4 botões:

A:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
type 1 (EV_KEY), code 272 (BTN_LEFT), value 1

B:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
type 1 (EV_KEY), code 273 (BTN_RIGHT), value 1

C:
type 4 (EV_MSC), code 4 (MSC_SCAN), value ff000001
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1

D:
type 4 (EV_MSC), code 4 (MSC_SCAN), value ff000002
type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
    
por Tobia 06.10.2016 / 19:48

1 resposta

2

Acabei de corrigir o driver evdev do Xorg para adicionar uma opção Emulate3Button, que configura o número do botão emitido pela emulação do botão do meio. (Enviei o patch para a lista de discussão, ele deve ser mesclado mais cedo ou mais tarde.)

Em seguida, adicionei esta parte da configuração:

Section "InputClass"
    Identifier  "SlimBlade Trackball"
    Driver      "evdev"

    Option      "ButtonMapping" "1 8 3 4 5 6 7 9 0 2"
    Option      "Emulate3Button" "10"
EndSection

Isso faz com que o botão de emulação do botão do meio emita o número 10, depois mapeia o botão C para 8, D para 9 e 10 para 2. Voila.

    
por 24.10.2016 / 17:12