O primeiro passo é descobrir quais são os botões físicos. Vou descrever o processo de remapeamento de um mouse para jogos genéricos, no meu caso um RAT3 saitek, mas as etapas gerais serão aplicadas a qualquer mouse.
-
xinput list
para descobrir o ID do seu mouse e seu nome -
xinput query-state {id}
para descobrir o estado de todos os botões. Use essa oportunidade para contar seus botões de mouse. Para ajudar nesse processo, executewatch -n0 xinput query-state {id}
para continuar consultando. - Identifique quaisquer botões com comportamento especial.
- anote qual botão possui o ID do botão.
-
adicione um arquivo chamado
50-mousename
to/usr/share/X11/xorg.conf.d/
e abra-o com seu editor favorito. insira este modelo:Section "InputClass" Identifier "Mouse Remap" MatchProduct "{mouse name}" MatchDevicePath "/dev/input/event*" Option "ZAxisMapping" "4 5" Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 0 0 0 0 0" Option "Resolution" "3200" #you will probably have to change this!
a linha importante é esta:
Option "ButtonMapping" "1 2 3"...
lembra daquela lista de botões que você fez anteriormente? Esta opção decide quais botões físicos correspondem a quais eventos de botão."1 2 3"
significaria que "botão físico 1" é "evento de botão 1", "botão de física 2" é "evento de botão 2" e assim por diante. Se você quisesse, digamos, trocar a roda de rolagem e os botões do mouse, você mudaria para "3 2 1". Se isso não faz sentido, dê uma olhada nesta tabela:| Physical Button | Button Event | normal action | |-----------------|--------------|---------------| |Left | 1 | select | |Middle | 2 | paste/depends | |Right | 3 | context menu | |Scroll Up | 4 | context menu | |Scroll Down | 5 | context menu | |Custom | 6+ | depends |
para desativar um botão, coloque 0 em seu lugar, por exemplo para desativar o botão do meio do mouse
"1 0 3 4 5 6 7 8 9 ..."
Você precisará fazer login e logout para que isso entre em vigor.
Desde que senti que fazia pouco sentido, deixe-me mostrar-lhe o processo para mim.
username@hostname ~> xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Saitek Cyborg R.A.T.3 Mouse id=12 [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)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ USB Keyboard id=10 [slave keyboard (3)]
↳ USB Keyboard id=11 [slave keyboard (3)]
ok, então o nome do meu dispositivo é Saitek Cyborg R.A.T.3 Mouse
com um ID de 12
notafile@notapc ~> xinput query-state 12
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]=down
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
button[17]=up
button[18]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=1351
valuator[1]=403
valuator[2]=-372
Então meu mouse tem um total de 18 botões. Aqui estão os mapeamentos que descobri:
| Number | Button |
|--------|-------------|
| 1 | Left |
| 2 | Middle |
| 3 | Right |
| 4 | scroll up |
| 5 | scroll down |
| 8 | upper thumb |
| 9 | lower thumb |
| 10 | mode red |
| 11 | mode blue |
| 12 | mode purple |
| 13 | DPI up |
| 14 | DPI down |
com este mouse, temos alguns botões com comportamento especial. Os botões 10-12 são sempre pressionados e não são liberados até que o botão de modo seja pressionado novamente. Isso pode ser corrigido com a opção "AutoRelease", na qual não entrarei agora, a menos que isso seja um problema para você.
Portanto, nosso mapeamento deve ser bem direto. Botões 1-5 são normais, 8 e 9
são nossos botões personalizados e 6-7 e 10+ são botões que realmente não precisamos. O mapa resultante é: "1 2 3 4 5 0 0 0 8 9 0 0 0 0 0 0 0 0 0"
. Certifique-se de preencher o final com 0s, para que a quantidade de itens seja a mesma dos botões, neste caso 18.
Eu terminei! Agora eu só tenho que inserir isso no arquivo de configuração em /usr/share/X11/xorg.conf.d/50-saitek-rat3
, e sair e voltar!
Aqui está minha configuração final:
Section "InputClass"
Identifier "Mouse Remap"
MatchProduct "Saitek Cyborg R.A.T.3 Mouse"
MatchDevicePath "/dev/input/event*"
Option "ZAxisMapping" "4 5"
Option "ButtonMapping" "1 2 3 4 5 0 0 0 8 9 0 0 0 0 0 0 0 0 0"
Option "Resolution" "3200"
EndSection