Отключение / переназначение кнопок DPI мыши Logitech G400
У меня была мышь Logitech MX-518, но у нее были проблемы с отзывчивостью, из-за чего я обратился в службу поддержки для замены. Вместо другого 518 мне прислали мышь Logitech G400, потому что 518 был снят с производства. Это вызывает проблемы, потому что, в то время как MX518 поддерживается lomoco, мышь G400 не поддерживается. Бег $ lomoco -s
шоу 001.003: 046d:c245 Unsupported Logitech device: Unknown
,
То, что я хотел бы сделать, это привязать DPI моей мыши к одному значению и переназначить кнопки DPI+ и DPI- на PgUp и PgDn на моей клавиатуре.
Как бы я это сделал?
Кнопки расположены по порядку:
- Кнопка 1: левый щелчок
- Кнопка 2: средний щелчок
- Кнопка 3: щелкните правой кнопкой мыши
- Кнопка 4: колесо мыши вверх
- Кнопка 5: колесо мыши вниз
- Кнопка 6: Нет
- Кнопка 7: Нет
- Кнопка 8: кнопка большого пальца № 1
- Кнопка 9: кнопка большого пальца № 2
- Кнопка 10: Кнопка переключения задач
- Кнопка 11: Нет
- Кнопка 12: Нет
На предыдущей мыши (MX 518) кнопки 11 и 12 были клавишами DPI. Одна из вещей, которая отличает эти кнопки от других, заключается в том, что такие приложения, как xev
по умолчанию не распознавать нажатие на них как на событие. На мыши MX 518, чтобы эти кнопки можно было изменять / связывать, их сначала нужно было отключить. я полагаю, что lomoco
назвал это "Logitech SmartScroll / Круиз-контроль". На G400, lomoco
не работает, и я не знаю альтернативы.
Кроме того, вот некоторые результаты xinput
В случае, если это полезно.
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
1 ответ
@Koviko - у меня есть похожая мышь - Logitech MX1100, у которой также есть кнопки DPI, которые не отправляются на USB при нажатии в режиме по умолчанию. Я провел некоторое собственное тестирование и в конечном итоге смог выяснить коды для отправки сигнала на переключение мыши в "Режим драйвера", что позволило мне использовать easygestures/xev для переназначения кнопок.
Если хотите, я могу рассказать вам о шагах, которые я использовал, чтобы определить, как его отключить (у меня теперь есть скрипт, который мне просто нужно запустить при запуске, как очень хакерский обходной путь, но он работает по крайней мере), но это включает в себя настройку виртуальной машины, наличие вспомогательной мыши и прослушивание необработанного USB-трафика, и, к сожалению, похоже, что она очень специфична для мыши.
Мои шаги (лучшие из них почти наверняка существуют):
1) У вас есть виртуальная машина Windows (с установленным программным обеспечением Logitech SetPoint; я использовал VirtualBox, потому что это то, что я уже настроил для работы с WinXP), Wireshark и gcc установлены в вашей системе. 2) Затем я запустил следующие шаги в терминале:
sudo modprobe usbmon
sudo wireshark &
sudo /usr/lib/virtualbox/VirtualBox &
3) В Wireshark выберите "Список доступных интерфейсов захвата..." и запишите, какой номер шины USB генерирует тонну пакетов при перемещении мыши (у меня был usbmon3, но я полагаю, что он основан исключительно на к какому USB-порту подключен ваш приемник).
3) В VirtualBox (мне нужно было работать от имени sudo для совместного использования контроллера USB), я отредактировал настройки виртуальной машины XP и включил контроллер USB и контроллер USB 2.0 (EHCI). Затем я добавил новый USB-фильтр, заполненный с существующего устройства, и выбрал приемник мыши Logitech (Vendor ID 046d, Product c245, для вас), а затем запустил виртуальную машину.
(Примечание: после этого мне понадобилась вторая подключенная мышь, потому что я должен был контролировать свою обычную мышь для виртуальной машины Windows, чтобы программное обеспечение SetPoint могло видеть, что она существует как нечто большее, чем обычная мышь.)
4) Затем на виртуальной машине я запустил программное обеспечение SetPoint и перешел к экрану, который позволяет настраивать пользовательские действия для различных кнопок. Затем, вернувшись в Wireshark, я запустил захват на шине USB для мыши, затем сразу же перешел к VM/SetPoint и изменил назначение кнопок с DPI +/- на Keystroke Assignment, затем сразу же вернулся к Wireshark и остановил захватить. (Я повторял это еще 10-15 раз, меняя настройки на разные режимы, в основном потому, что я не знал, сколько данных мне понадобится, но после просмотра мне действительно потребовались только первые 1-2 захвата.)
Если предположить, что ваша мышь работает примерно так же, как моя, что, как я предполагаю, будет, у вас будет всего 16 кадров, 4x GET DESCRIPTOR, затем 3x(2xURB_CONTROL out + 2xURB_INTERRUPT in). То, что вы ищете, - это 3 более длинных URB_CONTROL выходных кадра. Пример одного из моих захваченных кадров:
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
То, что мы ищем, это последние 7 байтов из ответа (как указано выше, '10 01 80 65 82 85 ff'), из каждого из более длинных кадров URB_CONTROL out. Наконец, я скачал источник "g_hack" из Git и добавил код моего продукта мыши в верхней части страницы и новую опцию (я установил его на 0/1 с оператором if внутри них, так как это было очень грубое подтверждение концепции), который переключил бы мою мышь в "режим драйвера" или "режим DPI".
После этого все, что требовалось, - это настроить новые доступные кнопки мыши в выбранных вами программах переотображения (я использовал easygestures, потому что это было первое, что я нашел с пользовательским интерфейсом - он может иметь или не иметь превосходную замену).