У меня была мышь Logitech MX-518, но у нее были проблемы с отзывчивостью, из-за чего мне пришлось позвонить в службу поддержки и попросить заменить ее. Вместо другой 518 они прислали мнеМышь Logitech G400потому что 518 был снят с производства. Это вызывает проблемы, потому что, хотя MX518 поддерживалсяломоко, мышь 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 / Cruise Control". На 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 для мыши, затем немедленно перешел в виртуальную машину/SetPoint и изменил назначение кнопок с DPI +/- на Назначение нажатия клавиш, затем немедленно вернулся в Wireshark и остановил захват. (Я повторил это еще около 10-15 раз, меняя настройки на разные режимы, в основном потому, что я не был уверен, сколько данных мне понадобится, но после просмотра мне действительно были нужны только первые 1-2 захвата.)
Если предположить, что ваша мышь работает примерно так же, как моя, что, как я предполагаю, так и есть, ваш захват, скорее всего, будет содержать в общей сложности 16 кадров, 4x GET DESCRIPTOR, затем 3x(2xURB_CONTROL out + 2xURB_INTERRUPT in). То, что вы ищете, — это 3 более длинных кадра URB_CONTROL out. Вот пример одного из моих захваченных кадров:
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" сГити добавил в код продукта моей мыши вверху и новую опцию (я установил ее на 0/1 с оператором if внутри, поскольку это было всего лишь очень грубое доказательство концепции), которая переключала бы мою мышь в «режим драйвера» или «режим DPI».
После этого все, что требовалось, — настроить новые доступные кнопки мыши в выбранных вами программах переназначения (я использовал easygestures, потому что это было первое, что я нашел в пользовательском интерфейсе — возможно, у него найдется более удачная замена, а может и нет).