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 -s
Espectá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?
Los botones son, en orden:
- Botón 1: Click izquierdo
- Botón 2: clic central
- Botón 3: Botón derecho del ratón
- Botón 4: Mueve hacia arriba la ruleta del ratón
- Botón 5: Rueda del ratón hacia abajo
- Botón 6: Ninguno
- Botón 7: Ninguno
- Botón 8: Botón pulgar n.º 1
- Botón 9: Botón pulgar n.º 2
- Botón 10: Botón de cambio de tareas
- Botón 11: Ninguno
- 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 xev
no 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 lomoco
lo llamaron "Logitech SmartScroll / Cruise Control". En el G400 lomoco
no 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).