reprogramar botões do mouse

1

eu tenho minhas mãos em um mouse krom kroma nox. É legal, mas ainda estou tentando. Enquanto jogava o quake 4 no linux (debian jessie), notei que um dos botões do lado esquerdo não é reconhecido, e o botão do lado direito meio que dispara apenas um tiro.

Depois de usar o xev para verificar os eventos do mouse, descobri que o botão esquerdo do mouse que parece não funcionar é mapeado para o button9, e o do lado direito é basicamente button1 na repetição. enquanto pressionado, ele continua enviando o botão de pressionar e soltar para o botão 1.

Então, é basicamente inútil. Agora, enquanto no windows, este mouse traz um cd com um software para reprogramar os botões. É péssimo, ok, mas eu só queria tirar aquele maldito "auto-fogo" daquele botão. Pareceu funcionar, mas quando eu reinicio para o Linux, tudo está de volta.

Eu tentei rodar esse software usando wine, mas ele não detecta o mouse, e também não virtualbox (ambos detectam um mouse genérico). Existe alguma maneira de reprogramar isso no linux, ou eu preciso de outro mouse? Obrigado.

    
por Joao Pincho 09.03.2015 / 21:42

1 resposta

2

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.

  1. xinput list para descobrir o ID do seu mouse e seu nome
  2. 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, execute watch -n0 xinput query-state {id} para continuar consultando.
  3. Identifique quaisquer botões com comportamento especial.
  4. anote qual botão possui o ID do botão.
  5. 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
    
por 10.03.2015 / 00:07

Tags