Desabilitando / Remapeando os botões do DPI do mouse do Logitech G400

1

Eu tinha o mouse Logitech MX-518, mas ele estava tendo problemas com a capacidade de resposta, fazendo com que eu ligasse para o suporte de um substituto. Em vez de outro 518, eles me enviaram um mouse Logitech G400 porque o 518 foi descontinuado. Isso causa problemas porque, embora o MX518 tenha suporte do lomoco , o mouse G400 não é suportado. A execução de $ lomoco -s mostra 001.003: 046d:c245 Unsupported Logitech device: Unknown .

O que eu gostaria de fazer é travar o DPI do meu mouse em um único valor e remapear os botões DPI + e DPI- para PgUp e PgDn no meu teclado.

Como eu conseguiria isso?

Os botões estão na ordem:

  1. Botão 1 : clique com o botão esquerdo
  2. Botão 2 : clique com o botão direito do mouse
  3. Botão 3 : clique com o botão direito em
  4. Botão 4 : roda do mouse para cima
  5. Botão 5 : a roda do mouse para baixo
  6. Botão 6 : nenhum
  7. Botão 7 : nenhum
  8. Botão 8 : Botão Thumb # 1
  9. Botão 9 : Botão Thumb # 2
  10. Botão 10 : Botão do alternador de tarefas
  11. Botão 11 : nenhum
  12. Botão 12 : nenhum

No mouse anterior (MX 518), os botões 11 e 12 eram as teclas DPI . Uma das coisas que torna esses botões diferentes do restante é que aplicativos como xev não reconhecem pressioná-los como um evento, por padrão. No mouse MX 518, para que esses botões pudessem ser alterados / vinculados, eles precisavam primeiro ser desabilitados. Acredito que lomoco o chamou de "Logitech SmartScroll / Cruise Control". No G400, lomoco não funciona e não tenho conhecimento de uma alternativa.

Além disso, aqui está uma saída de xinput , caso seja útil.

user@localhost:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech Gaming Mouse G400                id=8    [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)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]
user@localhost:~$ xinput list-props 8
Device 'Logitech Gaming Mouse G400':
    Device Enabled (121):   1
    Coordinate Transformation Matrix (123): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (248): 0
    Device Accel Constant Deceleration (249):   2.000000
    Device Accel Adaptive Deceleration (250):   1.000000
    Device Accel Velocity Scaling (251):    1.000000
    Device Product ID (238):    1133, 49733
    Device Node (239):  "/dev/input/event4"
    Evdev Axis Inversion (252): 0, 0
    Evdev Axes Swap (254):  0
    Axis Labels (255):  "Rel X" (131), "Rel Y" (132), "Rel Vert Wheel" (247)
    Button Labels (256):    "Button Left" (124), "Button Middle" (125), "Button Right" (126), "Button Wheel Up" (127), "Button Wheel Down" (128), "Button Horiz Wheel Left" (129), "Button Horiz Wheel Right" (130), "Button Side" (242), "Button Extra" (243), "Button Forward" (244), "Button Back" (245), "Button Task" (246), "Button Unknown" (241), "Button Unknown" (241), "Button Unknown" (241), "Button Unknown" (241)
    Evdev Middle Button Emulation (257):    0
    Evdev Middle Button Timeout (258):  50
    Evdev Third Button Emulation (259): 0
    Evdev Third Button Emulation Timeout (260): 1000
    Evdev Third Button Emulation Button (261):  3
    Evdev Third Button Emulation Threshold (262):   20
    Evdev Wheel Emulation (263):    0
    Evdev Wheel Emulation Axes (264):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (265):    10
    Evdev Wheel Emulation Timeout (266):    200
    Evdev Wheel Emulation Button (267): 4
    Evdev Drag Lock Buttons (268):  0
    
por Koviko 29.03.2012 / 22:36

1 resposta

4

@Koviko - Eu tenho um mouse semelhante - um Logitech MX1100 - que também possui botões DPI que não são enviados para o USB quando pressionados no modo padrão. Fiz alguns testes por conta própria e, finalmente, consegui descobrir os códigos para enviar o sinal para mudar o mouse para o "Modo Driver", o que me permitiu usar o easygestures / xev para reatribuir os botões.

Se você quiser, posso orientá-lo nas etapas que usei para determinar como desativá-lo (agora tenho um script que simplesmente preciso executar na inicialização, como uma solução alternativa muito hack-y, mas ele está trabalhando em pelo menos), mas envolve a configuração de uma máquina virtual e ter um mouse secundário e farejar o tráfego USB bruto, e infelizmente parece ser muito específico para o mouse.

Meus passos (os melhores quase certamente existem):

1) Ter uma VM Windows (com o software Logitech SetPoint instalado; usei o VirtualBox, porque é isso que eu já tinha configurado com o WinXP para trabalho), o Wireshark e o gcc instalados no seu sistema. 2) Então eu corri os seguintes passos em um terminal:

sudo modprobe usbmon
sudo wireshark &
sudo /usr/lib/virtualbox/VirtualBox &

3) No Wireshark, escolha 'Listar as interfaces de captura disponíveis ...' e anote qual número de barramento USB gera uma tonelada de pacotes quando você move o mouse (o meu usbmon3, mas imagino que seja puramente baseado em qual porta USB seu receptor está conectado).

3) A partir do VirtualBox (precisei rodar como sudo para compartilhar o controlador USB), editei as configurações da VM XP e ativei tanto o controlador USB quanto o controlador USB 2.0 (EHCI). Em seguida, adicionei um novo Filtro USB preenchido a partir de um dispositivo existente e selecionei o receptor do meu mouse da Logitech (ID do fornecedor 046d, Produto c245, para você) e iniciei a VM.

(Nota: Após este ponto, eu precisava de um segundo mouse conectado, porque eu tinha que controlar meu mouse normal para a VM do Windows para que o software SetPoint pudesse ver que ele existia como algo mais do que um mouse genérico. )

4) Na VM, iniciei o software SetPoint e fui para a tela que permite definir ações personalizadas para vários botões. Em seguida, no Wireshark, iniciei uma captura no barramento USB para o mouse e, em seguida, entrei imediatamente no VM / SetPoint e mudei a atribuição de botões de DPI +/- para Atribuição de pressionamento de tecla, depois voltei imediatamente para o Wireshark e parei capturar. (Repeti isso cerca de 10 a 15 vezes, alterando as configurações para modos diferentes, principalmente porque eu não tinha certeza de quantos dados precisaria, mas depois de revisar, eu realmente só precisava das primeiras 1 a 2 capturas.) / p>

Supondo que seu mouse funcione vagamente como o meu, o que eu acho que seria, sua captura provavelmente teria um total de 16 quadros, 4x GET DESCRIPTOR, depois 3x (2xURB_CONTROL out + 2xURB_INTERRUPT in). O que você está procurando são os três quadros de saída URB_CONTROL mais longos. Um exemplo de um dos meus quadros capturados é:

0000  c0 80 64 36 00 88 ff ff  53 02 00 03 03 00 00 00
0010  5e 4b 25 50 00 00 00 00  f4 d9 08 00 8d ff ff ff
0020  07 00 00 00 07 00 00 00  21 09 10 02 01 00 07 00
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0040  10 01 80 65 82 85 ff

O que procuramos são os últimos 7 bytes da resposta (acima, o '10 01 80 65 82 85 ff '), de cada um dos quadros' URB_CONTROL out 'mais longos. Finalmente, eu baixei a fonte do "g_hack" de Git , e remendado no meu código de produto mouse no topo, e uma nova opção (eu configurá-lo para 0/1 com uma declaração if dentro deles, uma vez que era apenas uma prova de conceito muito crua), que iria mudar meu mouse em " modo driver "ou" modo DPI ".

Depois disso, tudo o que era necessário era configurar os novos botões do mouse disponíveis em seus programas de remapeamento (eu usei easygestures porque essa foi a primeira coisa que encontrei com uma UI que encontrei - pode ou não ter um substituto superior) ).

    
por Icehawk78 10.08.2012 / 23:19