Ich hatte die Logitech MX-518-Maus, aber sie hatte Probleme mit der Reaktionsfähigkeit, sodass ich den Support anrief, um Ersatz zu bekommen. Statt einer weiteren 518 schickten sie mir eineLogitech G400 Mausweil der 518 nicht mehr hergestellt wird. Dies führt zu Problemen, da der MX518 zwar vonAbonnieren, die G400-Maus wird nicht unterstützt. Beim Ausführen $ lomoco -s
wird angezeigt 001.003: 046d:c245 Unsupported Logitech device: Unknown
.
Ich möchte die DPI meiner Maus auf einen einzigen Wert beschränken und die Tasten DPI+ und DPI- meiner Tastatur PgUpneu zuordnen.PgDn
Wie würde ich das erreichen?
Die Schaltflächen sind in der Reihenfolge:
- Knopf 1: Links Klick
- Taste 2: Mittelklick
- Taste 3: Rechtsklick
- Taste 4: Mausrad nach oben
- Taste 5: Mausrad nach unten
- Taste 6: Keiner
- Taste 7: Keiner
- Taste 8: Daumentaste Nr. 1
- Taste 9: Daumentaste Nr. 2
- Taste 10: Schaltfläche zum Aufgabenwechsel
- Taste 11: Keiner
- Taste 12: Keiner
Bei der Vorgängermaus (MX 518)Die Tasten 11 und 12 waren die DPI-Tasten. Ein Unterschied zwischen diesen Tasten und den anderen besteht darin, dass Anwendungen wie xev
standardmäßig das Drücken dieser Tasten nicht als Ereignis erkennen. Damit diese Tasten bei der MX 518-Maus geändert/belegt werden können, müssen sie zunächst deaktiviert werden. Ich glaube, das lomoco
hieß „Logitech SmartScroll/Cruise Control“. Bei der G400 lomoco
funktioniert es nicht und mir ist keine Alternative bekannt.
Hier ist auch eine Ausgabe von xinput
, falls sie hilfreich ist.
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
Antwort1
@Koviko – Ich habe eine ähnliche Maus – eine Logitech MX1100 – die auch DPI-Tasten hat, die nicht an den USB gesendet werden, wenn sie im Standardmodus gedrückt werden. Ich habe selbst einige Tests durchgeführt und konnte schließlich die Codes herausfinden, um das Signal zum Umschalten der Maus in den „Treibermodus“ zu senden, wodurch ich dann easygestures/xev verwenden konnte, um die Tasten neu zuzuweisen.
Wenn Sie möchten, kann ich Sie durch die Schritte führen, die ich verwendet habe, um herauszufinden, wie man es ausschaltet (ich habe jetzt ein Skript, das ich einfach beim Start ausführen muss, als eine Art Workaround, aber es funktioniert zumindest), aber dazu muss man eine VM einrichten, eine zweite Maus haben und den Roh-USB-Verkehr abhören, und leider scheint es sehr mausspezifisch zu sein.
Meine Schritte (es gibt mit ziemlicher Sicherheit bessere):
1) Installieren Sie eine Windows-VM (mit der installierten Logitech SetPoint-Software; ich habe VirtualBox verwendet, da ich das bereits mit WinXP für die Arbeit eingerichtet hatte), Wireshark und gcc auf Ihrem System. 2) Dann habe ich die folgenden Schritte in einem Terminal ausgeführt:
sudo modprobe usbmon
sudo wireshark &
sudo /usr/lib/virtualbox/VirtualBox &
3) Wählen Sie in Wireshark die Option „Die verfügbaren Erfassungsschnittstellen auflisten …“ und notieren Sie sich, welche USB-Busnummer viele Pakete generiert, wenn Sie die Maus bewegen (bei mir war es usbmon3, aber ich nehme an, dass das ausschließlich davon abhängt, an welchen USB-Anschluss Ihr Empfänger angeschlossen ist).
3) Innerhalb von VirtualBox (ich musste es als sudo ausführen, um den USB-Controller freizugeben) bearbeitete ich die Einstellungen der XP-VM und aktivierte sowohl den USB-Controller als auch den USB 2.0 (EHCI)-Controller. Dann fügte ich einen neuen USB-Filter hinzu, der von einem vorhandenen Gerät bestückt wurde, wählte den Empfänger meiner Logitech-Maus aus (Hersteller-ID 046d, Produkt c245, für Sie) und startete dann die VM.
(Hinweis: Ab diesem Zeitpunkt musste ich eine zweite Maus anschließen, da ich die Kontrolle über meine normale Maus an die Windows-VM übergeben musste, damit die SetPoint-Software erkennen konnte, dass es sich um mehr als eine generische Maus handelte.)
4) In der VM startete ich dann die SetPoint-Software und ging zu dem Bildschirm, auf dem Sie benutzerdefinierte Aktionen für verschiedene Schaltflächen festlegen können. Dann startete ich in Wireshark eine Erfassung auf dem USB-Bus für die Maus, ging dann sofort in die VM/SetPoint und änderte die Tastenzuweisung von DPI +/- in Keystroke Assignment, ging dann sofort zurück zu Wireshark und stoppte die Erfassung. (Ich wiederholte dies noch etwa 10-15 Mal und änderte die Einstellungen in verschiedene Modi, hauptsächlich, weil ich nicht sicher war, wie viele Daten ich benötigen würde, aber nach Überprüfung brauchte ich wirklich nur die ersten 1-2 Erfassungen.)
Vorausgesetzt, Ihre Maus funktioniert ungefähr so wie meine, was ich vermute, würde Ihre Aufnahme wahrscheinlich insgesamt 16 Frames umfassen, 4x GET DESCRIPTOR, dann 3x (2xURB_CONTROL out + 2xURB_INTERRUPT in). Was Sie suchen, sind die 3 längeren URB_CONTROL-Ausgangsframes. Ein Beispiel für einen meiner aufgenommenen Frames ist:
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
Was wir suchen, sind die letzten 7 Bytes der Antwort (im obigen Beispiel die '10 01 80 65 82 85 ff') aus jedem der längeren 'URB_CONTROL out'-Frames. Schließlich habe ich den Quellcode des "g_hack" heruntergeladen vonGit, und habe oben sowohl meinen Mausproduktcode als auch eine neue Option hineingeschustert (ich habe sie auf 0/1 mit einer if-Anweisung darin gesetzt, da es sich nur um einen sehr groben Proof of Concept handelte), die meine Maus in den „Treibermodus“ oder „DPI-Modus“ versetzen würde.
Danach mussten Sie nur noch die neu verfügbaren Maustasten in einem Neuzuordnungsprogramm Ihrer Wahl einrichten (ich habe Easygestures verwendet, da ich dies als erstes mit einer Benutzeroberfläche gefunden habe – es kann sein, dass es einen besseren Ersatz gibt, vielleicht aber auch nicht).