Desativa os botões horizontais da roda de rolagem (para trás / para frente)

2

Recentemente recebi um Logitech M500:

Bus 002 Device 004: ID 046d:c069 Logitech, Inc. M500 Laser Mouse

Tem nove botões que posso identificar:

  • Dois no lado esquerdo
  • Esquerda, direita
  • Pressione a roda
  • Role a roda para cima, role a roda para baixo
  • Pressione a roda para a esquerda, pressione a roda para a direita

Os últimos dois estão me deixando louco. Toda vez que tento clicar no volante, acidentalmente clico no botão "pressionar a roda à esquerda" e o Firefox vai para a última página visitada. É muito chato.

Fácil o suficiente, certo? Basta descobrir quais botões xev mostra e desativá-los. Errado! xev não gera eventos "ButtonPress / ButtonRelease", mas estranho Pares "LeaveNotify / EnterNotify / KeymapNotify":

 LeaveNotify event, serial 40, synthetic NO, window 0x4a00001,
    root 0x94, subw 0x0, time 2344319, (104,86), root:(113,207),
    mode NotifyGrab, detail NotifyAncestor, same_screen YES,
    focus YES, state 0

EnterNotify event, serial 40, synthetic NO, window 0x4a00001,
    root 0x94, subw 0x0, time 2344319, (104,86), root:(113,207),
    mode NotifyUngrab, detail NotifyAncestor, same_screen YES,
    focus YES, state 0

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  4294967188 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

Agora, com certeza, o 4294967188 (-108 em dois complementos como 32 bit integer, se isso ajudar) será o keycode, certo? Errado de novo! É o mesmo número tanto para a roda horizontal esquerda / direita quanto para os botões laterais traseiro / frontal.

Aqui está minha lista de xinput do dispositivo:

Logitech USB Laser Mouse                    id=15   [slave  pointer  (2)]
    Reporting 7 classes:
        Class originated from: 15. Type: XIButtonClass
        Buttons supported: 16
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
        Button state:
        Class originated from: 15. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 15. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 15. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 15. Type: XIValuatorClass
        Detail for Valuator 3:
          Label: Rel Vert Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 15. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0
        Class originated from: 15. Type: XIScrollClass
        Scroll info for Valuator 3
          type: 1 (vertical)
          increment: -1.000000
          flags: 0x2 ( preferred )

Parece mapear os botões exatamente como normalmente seriam. Então o que acontece quando escrevo um pequeno script que chama "xinput query-state $ DEVNO" em um loop e pressiona os botões horríveis? Você adivinhou:

2 classes :
ButtonClass
    button[1]=up
    button[2]=up
    button[3]=up
    button[4]=up
    button[5]=up
    button[6]=up
    button[7]=up
    button[8]=up
    button[9]=up
    button[10]=up
    button[11]=up
    button[12]=up
    button[13]=up
    button[14]=up
    button[15]=up
    button[16]=up
ValuatorClass Mode=Relative Proximity=In
    valuator[0]=538
    valuator[1]=456
    valuator[2]=-2
    valuator[3]=-464

Eles sempre aparecem como "para cima", embora estejam claramente "para baixo". Os botões do mouse que geram eventos ButtonPress apropriados (à esquerda / direita, por exemplo) aparecem no anúncio "para baixo" como deveriam.

    
por Jonas Mechtheim 24.02.2015 / 20:28

1 resposta

5

Eu tenho um Logitech M325, que também usa os botões 8 e 9 para a inclinação para a esquerda e para a direita da roda de rolagem. Eu uso esse script para desativá-los:

#!/bin/bash

set -eu

MOUSE_ID=$(xinput --list | grep Logitech | sed -r 's/.*id=([0-9]+).*//')

if [ -n "$MOUSE_ID" ]; then
    xinput set-button-map $MOUSE_ID 1 2 3 4 5 6 7 0 0
fi
    
por 03.06.2015 / 16:36

Tags