Logitech M535 no Linux

Logitech M535 no Linux

Acabei de comprar um mouse Bluetooth Logitech M535. Possui roda inclinável, mas está mapeada para os botões "voltar" e "avançar". Para fazê-lo funcionar como rolagem horizontal, escrevi este script:

#! /bin/dash

MOUSE_ID=`xinput list | grep -o 'M535.*pointer' | sed 's/^.*id=\([0-9]*\)[\t].*$/\1/')`
xinput set-button-map $MOUSE_ID 1 2 3 4 5 8 9 6 7 10 11 12

Infelizmente, desta forma, os botões de rolagem não se repetem.

Além disso o mouse também possui um botão extra, que envia ALT+TAB (através de um teclado "falso"):

ignazio@ignazio-HP:~$ xinput | grep M535
⎜   ↳ Bluetooth Mouse M336/M337/M535            id=15   [slave  pointer  (2)]
    ↳ Bluetooth Mouse M336/M337/M535            id=16   [slave  keyboard (3)]
ignazio@ignazio-HP:~$ xinput test 16
key press   64 
key press   23 
key release 23 
key release 64 

Como posso vincular este botão a outra coisa?

Tentei usar xbindkeysmas não consegui interceptar ALT+TAB. Além disso, mesmo que pudesse, quero interceptar apenas o teclado falso do mouse e não consegui encontrar nenhuma maneira de filtrar dispositivos no formato xbindkeys.

Eu também sei que existem módulos de kernel para mouses Logitech semelhantes (vejahttps://github.com/CzBiX/logitech-m560), mas este não é compatível.

Responder1

Resolvi a rolagem horizontal usando o software key-mapper gui e, em seguida, mapeando o botão da roda esquerda (LADO DO BOTÃO) para roda (direita, 1); e o botão da roda direita para rodar (esquerda, 1).

Responder2

Eu resolvi usando hwdb. Eu criei /etc/udev/hwdb.d/10-m535.hwdb:

evdev:input:b0005v046DpB016e1203-*
 KEYBOARD_KEY_700e2=reserved
 KEYBOARD_KEY_7002b=leftmeta

Então:

sudo udevadm hwdb --update
sudo udevadm trigger

E desligue e ligue o mouse. Funciona agora, vinculei a chave meta (Windows).

Acho que essa solução poderia ser feita de forma que xinput set-button-mapnão seja necessária (e talvez eu possa resolver o problema dos botões não se repetirem) ... Mas não consegui encontrar os códigos dos botões 6 e 7 (role para a esquerda e para a direita). Encontrei os scancodes:

evdev:input:b0005v046DpB016e1203-*
 KEYBOARD_KEY_700e2=reserved
 KEYBOARD_KEY_7002b=leftmeta
 KEYBOARD_KEY_90004=??? (scroll left - mouse button 6)
 KEYBOARD_KEY_90005=??? (scroll right - mouse button 7)

Tentei os valores decimais para BTN_SIDE, BTN_EXTRA, BTN_BACK, BTN_FORWARD, BTN_6, BTN_7(conforme definido em /usr/include/linux/input-event-codes.h) sem sorte.

Outro mouse, com rolagem horizontal funcionando imediatamente, tem a seguinte evtestsaída:

Event: time 1522616506.145899, -------------- SYN_REPORT ------------
Event: time 1522616507.105926, type 2 (EV_REL), code 6 (REL_HWHEEL), value 1
Event: time 1522616507.105926, -------------- SYN_REPORT ------------
Event: time 1522616508.191962, type 2 (EV_REL), code 6 (REL_HWHEEL), value -1

Posso de alguma forma especificar um EV_RELevento com valor para código-chave no arquivo hwdb?

informação relacionada