Отключение/переназначение кнопок DPI мыши Logitech G400

Отключение/переназначение кнопок DPI мыши Logitech G400

У меня была мышь Logitech MX-518, но у нее были проблемы с отзывчивостью, из-за чего мне пришлось позвонить в службу поддержки и попросить заменить ее. Вместо другой 518 они прислали мнеМышь Logitech G400потому что 518 был снят с производства. Это вызывает проблемы, потому что, хотя MX518 поддерживалсяломоко, мышь G400 не поддерживается. Запуск $ lomoco -sпоказывает 001.003: 046d:c245 Unsupported Logitech device: Unknown.

Я хотел бы зафиксировать DPI моей мыши на одном значении и переназначить кнопки DPI+ и DPI- PgUpна PgDnклавиатуре.

Как мне этого добиться?

Logitech G400

Кнопки расположены в следующем порядке:

  1. Кнопка 1: Щелчок левой кнопкой мыши
  2. Кнопка 2: Щелчок средней кнопкой мыши
  3. Кнопка 3: Щелкните правой кнопкой мыши
  4. Кнопка 4: Колесико мыши вверх
  5. Кнопка 5: Колесико мыши вниз
  6. Кнопка 6: Никто
  7. Кнопка 7: Никто
  8. Кнопка 8: Кнопка большого пальца №1
  9. Кнопка 9: Кнопка большого пальца №2
  10. Кнопка 10: Кнопка переключения задач
  11. Кнопка 11: Никто
  12. Кнопка 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, потому что это было первое, что я нашел в пользовательском интерфейсе — возможно, у него найдется более удачная замена, а может и нет).

Связанный контент