Deshabilitar/reasignar los botones DPI del mouse Logitech G400

Deshabilitar/reasignar los botones DPI del mouse Logitech G400

Tenía el mouse Logitech MX-518, pero tenía problemas de capacidad de respuesta, lo que me obligó a llamar al soporte técnico para solicitar un reemplazo. En lugar de otro 518 me enviaron unRatón logitech g400porque el 518 ha sido descontinuado. Esto causa problemas porque, si bien el MX518 era compatible conlomoco, el mouse G400 no es compatible. $ lomoco -sEspectáculos en marcha 001.003: 046d:c245 Unsupported Logitech device: Unknown.

Lo que me gustaría hacer es bloquear el DPI de mi mouse en un solo valor y reasignar los botones DPI+ y DPI- a PgUpy PgDnen mi teclado.

¿Cómo lograría esto?

Logitech G400

Los botones son, en orden:

  1. Botón 1: Click izquierdo
  2. Botón 2: clic central
  3. Botón 3: Botón derecho del ratón
  4. Botón 4: Mueve hacia arriba la ruleta del ratón
  5. Botón 5: Rueda del ratón hacia abajo
  6. Botón 6: Ninguno
  7. Botón 7: Ninguno
  8. Botón 8: Botón pulgar n.º 1
  9. Botón 9: Botón pulgar n.º 2
  10. Botón 10: Botón de cambio de tareas
  11. Botón 11: Ninguno
  12. Botón 12: Ninguno

En el ratón anterior (MX 518),Los botones 11 y 12 eran las teclas DPI.. Una de las cosas que diferencia a estos botones del resto es que aplicaciones como ésta xevno reconocen su pulsación como un evento, de forma predeterminada. En el mouse MX 518, para que esos botones pudieran modificarse/vincularse, primero debían desactivarse. Creo que lomocolo llamaron "Logitech SmartScroll / Cruise Control". En el G400 lomocono funciona y desconozco otra alternativa.

Además, aquí hay algunos resultados de xinput, en caso de que sean útiles.

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

Respuesta1

@Koviko: tengo un mouse similar, un Logitech MX1100, que también tiene botones DPI que no se envían al USB cuando se presionan en el modo predeterminado. Hice algunas pruebas por mi cuenta y finalmente pude descubrir los códigos para enviar la señal para cambiar el mouse al "Modo controlador", lo que luego me permitió usar easygestures/xev para reasignar los botones.

Si lo desea, puedo guiarlo a través de los pasos que utilicé para determinar cómo apagarlo (ahora tengo un script que simplemente necesito ejecutar al inicio, como una solución alternativa, pero al menos está funcionando). pero implica configurar una máquina virtual y tener un mouse secundario y rastrear el tráfico USB sin procesar, y desafortunadamente parece ser muy específico del mouse.

Mis pasos (es casi seguro que existen mejores):

1) Tenga una máquina virtual Windows (con el software Logitech SetPoint instalado; usé VirtualBox, porque eso es lo que ya había configurado con WinXP para trabajar), Wireshark y gcc instalados en su sistema. 2) Luego ejecuté los siguientes pasos en una terminal:

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

3) Dentro de Wireshark, elija 'Enumerar las interfaces de captura disponibles...' y anote qué número de bus USB genera una tonelada de paquetes cuando mueve el mouse (el mío era usbmon3, pero imagino que se basa exclusivamente en a qué puerto USB está conectado su receptor).

3) Desde VirtualBox (necesitaba ejecutar como sudo para compartir el controlador USB), edité la configuración de la máquina virtual XP y habilité tanto el controlador USB como el controlador USB 2.0 (EHCI). Luego agregué un nuevo filtro USB desde un dispositivo existente, seleccioné el receptor de mi mouse Logitech (ID de proveedor 046d, producto c245, para usted) y luego inicié la máquina virtual.

(Nota: después de este punto, necesitaba conectar un segundo mouse, porque tenía que ceder el control de mi mouse normal a la máquina virtual de Windows para que el software SetPoint pudiera ver que existía como algo más que un mouse genérico).

4) En la máquina virtual, inicié el software SetPoint y fui a la pantalla que le permite configurar acciones personalizadas para varios botones. Luego, de vuelta en Wireshark, comencé una captura en el bus USB para el mouse, luego entré inmediatamente a VM/SetPoint y cambié la asignación de botones de DPI +/- a Keystroke Assignment, luego inmediatamente volví a Wireshark y detuve el captura. (Repetí esto entre 10 y 15 veces más, cambiando la configuración a diferentes modos, principalmente porque no estaba seguro de cuántos datos necesitaría, pero después de revisar, realmente solo necesitaba las primeras 1 o 2 capturas).

Suponiendo que su mouse funcione de manera vagamente similar al mío, lo cual supongo que así sería, su captura probablemente tendría un total de 16 fotogramas, 4x GET DESCRIPTOR, luego 3x (2xURB_CONTROL de salida + 2xURB_INTERRUPT de entrada). Lo que estás buscando son los 3 cuadros de salida URB_CONTROL más largos. Un ejemplo de uno de mis fotogramas capturados es:

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

Lo que estamos buscando son los últimos 7 bytes de la respuesta (en lo anterior, el '10 01 80 65 82 85 ff'), de cada uno de los fotogramas más largos de 'URB_CONTROL out'. Finalmente, descargué la fuente del "g_hack" degit, e improvisé tanto el código de producto de mi mouse en la parte superior como una nueva opción (lo configuré en 0/1 con una declaración if dentro de ellos, ya que era solo una prueba de concepto muy burda) que cambiaría mi mouse a "controlador modo" o "modo DPI".

Después de eso, todo lo que se necesitaba era configurar los botones del mouse recientemente disponibles en su elección de programas de reasignación (usé easygestures porque eso fue lo primero que encontré con una interfaz de usuario; puede que tenga o no un reemplazo superior).

información relacionada