Eu gostaria de remapear o "botão do Windows" no MS Sculpt Comfort Mouse para outro botão (por exemplo, o botão "Voltar") na minha máquina Linux (Linux Mint 18.2 "Sonya").
De acordo com xinput list
, o mouse é reconhecido como um dispositivo de ponteiro (id = 12).
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Microsoft Sculpt Comfort Mouse id=12 [slave pointer (2)]
⎜ ↳ FocalTechPS/2 FocalTech FocalTech Touchpad id=15 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ Chicony USB Keyboard id=9 [slave keyboard (3)]
↳ Chicony USB Keyboard id=10 [slave keyboard (3)]
↳ USB2.0 UVC HD Webcam id=11 [slave keyboard (3)]
↳ Asus WMI hotkeys id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
De acordo com xinput test 12
, a tecla Super_L
(keycode 133) é gerada pelo mouse quando o "botão Windows" é pressionado no mouse.
key press 133
key release 133
Agora, preciso remapear a chave desse dispositivo específico para outra chave. Eu faria isso usando a ferramenta setxkbmap
(descrita em Como remapear chaves no Linux apenas para um teclado específico ).
Meu script é o seguinte:
remote_id=$(
xinput list | sed -n 's/.*Microsoft Sculpt Comfort Mouse.*id=\([0-9]*\).*//p'
)
[ "$remote_id" ] || exit
# remap Windows button on MS Sculpt Mouse to Back button
mkdir -p /tmp/xkb/symbols
cat >/tmp/xkb/symbols/custom <<\EOF
xkb_symbols "remote" {
key <LWIN> { [ XF86Back ] };
};
EOF
setxkbmap -device $remote_id -print | sed 's/\(xkb_symbols.*\)"/+custom(remote)"/' | xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null
Eu também tentei uma abordagem semelhante descrita em Remapear / alterar seu secundário / teclas do teclado usb . Tentei trocar códigos por exemplo. para <LWIN>
e <VOL+>
. Mas sem sucesso, a tecla Windows do mouse ainda é interpretada como tecla do Windows.
Então eu tentei remapear a tecla Windows (trocada com) no meu teclado USB (id = 9) usando a segunda abordagem (pure xkbcomp
) e funcionou, MAS também mudou o comportamento do botão do mouse da mesma maneira ( independentemente de como foi o botão mapeado para o mouse). O estranho é que, quando pressiono o botão do Windows no teclado interno do laptop (não remapeado) e, em seguida, no mouse, ele é interpretado como botão do Windows. Quando pressiono o botão do Windows no meu teclado USB (remapeado em VOL +) e depois no mouse, ele é interpretado como VOL +. Pode estar relacionado a Bug 91571 - o xkb definido via xkbcomp parece não se aplicar a -i (ou não se aplica se usado no dispositivo geral) .
Infelizmente, não sou capaz de remapear o botão apenas para o dispositivo em particular.
1) Pode ser que a ferramenta xkbcomp
funcione corretamente apenas com dispositivos 'slave keyboard'? (Não com 'ponteiro escravo')
2) Existe uma maneira de tratar este mouse como 'teclado escravo'?
3) Ou existe outra maneira de remapear o 'botão do Windows' somente para este dispositivo específico (e não para o teclado USB principal)?