Problema de mapeamento de botão no mouse [Razer Naga]

1

Atualmente estou tendo um problema ao tentar mapear os botões laterais do meu Razer Naga, estou executando o Elementary OS, mas pelo que entendi isso é um Ubuntu e devo acrescentar que tudo isso é muito novo para mim também!

Existem 12 botões ao lado do Naga, atualmente mapeados 1-12. Há uma opção para alterá-los para os mapeamentos do Numpad (configuráveis por um comutador físico no próprio mouse), o que resolveria meu problema, mas inadvertidamente faz com que meus cliques com o botão direito falhem em 60% do tempo.

Também devo mencionar que estou passando pela mesma situação em duas máquinas completamente diferentes, mas com o mesmo mouse físico.

Meu objetivo final é vincular pelo menos 3 dos botões (1-3) a outra coisa, digamos F1, F2 e F3 por razões de argumentação.

Até agora, fiz bastante pesquisa no Google, mas uma diferença importante que noto quando outras pessoas resolveram isso é a diferença na minha xinput output:

 ⎡ Virtual core pointer                     id=2    [master pointer  (3)]
 ⎜   ↳ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
 ⎜   ↳ SynPS/2 Synaptics TouchPad               id=12   [slave  pointer  (2)]
 ⎜   ↳ Razer Razer Naga                         id=14   [slave  pointer  (2)]
 ⎜   ↳ Razer Razer Naga                         id=13   [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)]
    ↳ Lenovo EasyCamera                         id=9    [slave  keyboard (3)]
    ↳ Ideapad extra buttons                     id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

Na saída de outras pessoas, notei que há um "Razer Naga" presente na seção de ponteiro e um na seção de teclado. Como você pode ver no meu, há dois listados, apenas na seção de ponteiro.

Outras resoluções sugeriram a execução de um script para substituir os mapeamentos de teclado da entrada do teclado, o que não funcionará para mim, eu acho.

Eu tentei usar xev para mostrar a saída do que acontece quando pressiono um desses botões, mas isso realmente não me ajuda. Aqui está um exemplo de mim clicando no botão esquerdo do mouse:

ButtonRelease event, serial 37, synthetic NO, window 0x3a00001,
  root 0x9d, subw 0x3a00002, time 16486037, (24,50), root:(618,357),
  state 0x100, button 1, same_screen YES

Agora o misterioso botão "1" ao lado:

KeyPress event, serial 37, synthetic NO, window 0x3a00001,
  root 0x9d, subw 0x3a00002, time 16536943, (31,58), root:(625,365),
  state 0x0, keycode 10 (keysym 0x31, 1), same_screen YES,
  XLookupString gives 1 bytes: (31) "1"
  XmbLookupString gives 1 bytes: (31) "1"
  XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3a00001,
  root 0x9d, subw 0x3a00002, time 16537199, (31,58), root:(625,365),
  state 0x0, keycode 10 (keysym 0x31, 1), same_screen YES,
  XLookupString gives 1 bytes: (31) "1"
  XFilterEvent returns: False

Neste ponto, eu realmente não sei onde proceder (eu nem sei qual dos dois dispositivos listados no xinput é aquele mapeado para os botões), então qualquer conselho ou ponteiros seria muito apreciado!

    
por Liam Stevenson 13.04.2015 / 00:13

1 resposta

1

Eu não entendo completamente a situação (não que você não tenha explicado bem), mas me deparei com o problema de mapeamento Naga e depois de não encontrar nenhuma solução na web, decidi experimentá-lo. .

O problema é que talvez a minha solução também funcione para você, mesmo que seu sistema marque o dispositivo como um ponteiro em vez de um teclado. Experimente e me avise!.

Minha solução provavelmente não é a melhor, mas certamente funcionou para mim. Eu escrevi um pequeno daemon em C ++ e o coloquei em um repositório do github que você pode baixar e instalar a partir aqui

A ideia é implementar estes três passos:

  1. Silencie o dispositivo para que os botões "não façam nada" usando:

    $xinput set-int-prop <id> "Device Enabled" 8 0

    Onde está o id do teclado visto com xinput (talvez 13 no seu caso?)

  2. Capture o evento acionado pelo botão pressionando. Eu fiz isso, pegando a entrada bruta do nó do dispositivo de evento. Usando C ++, algumas bibliotecas sys linux e input.h. Você pode olhar como fazer isso no google (eu não posso postar mais de dois links, mas no link reddit você tem o link com uma página explicando isso). A parte boa dessa abordagem é que você pode capturar os dados de qualquer dispositivo, desde que o xinput os veja (não importa se o xinput acha que é um ponteiro, contanto que ele tenha botões e o xinput tenha um id para ele, acredito que esta abordagem funcionará, mas não me cite sobre isso).

  3. Use as chamadas C ++ system () e xdotool (que você pode instalar a partir dos repositórios oficiais do Ubuntu) para emular as principais pressões (note que as chamadas system () permitem que você execute qualquer tipo de utilitário ou script personalizado) . Veja a página do manual do xdotool para mais informações, mas a melhor parte é que usando xdotool com "--window getactivewindow", as pressões de teclas emuladas ocorrem na janela focada no momento!

Explica-se um pouco mais aqui: link

Eu recomendo que você verifique o repositório do github, pois ele tem informações sobre tudo o que eu fiz. E o código-fonte (que é apenas cerca de 100 linhas) é facilmente extrapolado para outros dispositivos ou situações. Se você tem um Naga e Ubuntu você provavelmente terá que usar o instalador e tudo será configurado automaticamente.

No caso da pessoa que faz a pergunta, com um pouco de sorte especificando manualmente no arquivo "nagastart.sh", o ID do dispositivo de teclado deve fazer o trabalho. Apenas mudando uma linha. (atualmente o script procura por um Naga em dispositivos de teclado).

Espero que isso seja informação suficiente, se não, eu ficarei feliz em explicar tudo o que puder sobre isso. (O que não é muito)

A propósito, não é muito infalível, então se você instalá-lo usando um ID de dispositivo errado você obterá um comportamento inesperado (como os cliques do mouse fazendo coisas engraçadas se o teclado for id = 13 e você colocar id = 14) , mas não se preocupe. Basta abrir um terminal e matar naga. Para remover todas as alterações, execute

 $sudo rm /usr/local/bin/naga ~/.config/autostart/naga.desktop /usr/local/bin/nagastart.sh

Boa sorte!

    
por 31.05.2015 / 19:16

Tags