Вопрос или проблема
Я использую Logitech Trackman Marble Trackball на Ubuntu 22.04, Gnome Shell 42, Wayland.
Я хочу имитировать нажатие средней кнопки мыши с помощью одной из дополнительных боковых кнопок, но, похоже, я могу синтезировать любой тип кнопки, кроме средней кнопки.
- Я создал файл в
/etc/udev/hwdb.d/71-logitech-trackman.hwdb
следующим образом:
evdev:name:Logitech USB Trackball:*
KEYBOARD_KEY_90004=btn_middle
Затем я выполняю:
sudo systemd-hwdb update
sudo udevadm trigger
И физически подключаю устройство заново.
- Выполнение
sudo udevadm info /dev/input/event8 | grep btn_middle
показывает, что сопоставление вступило в силу. - Выполнение
sudo evtest /dev/input/event8
выводит правильное сопоставление следующим образом:
Event: time 1689266776.764313, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1689266776.764313, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
- Однако выполнение
sudo libinput debug-events --device /dev/input/event8
не выводит никаких данных, когда я нажимаю переназначенную кнопку (хотя оно правильно выводит строки для всех других событий).
Странно, но libinput
выводит данные, если я выбираю любое другое целевое событие, такое как btn_left
, btn_right
или даже другие кнопки, которых у устройства нет, такие как btn_back
, и эти нажатия корректно отображаются в GUI. Похоже, что только средняя кнопка не может быть эмулирована.
Поведение остается таким же, если я пытаюсь переназначить любую из четырех физических кнопок.
Что может препятствовать работе сопоставления средней кнопки мыши?
У меня была похожая проблема, и я ее решил, попробуйте изменить ваш .hwdb файл:
evdev:input:*
KEYBOARD_KEY_90004=btn_middle
Я хотел сопоставить боковую кнопку с левой. Вот что я сделал.
Создал файл /etc/udev/hwdb.d/99-mouse.hwdb:
evdev:input:b*v062Ap4101*
KEYBOARD_KEY_90004=btn_left
Где v062Ap4101
— это ID USB устройства из команды lsusb
. Обратите внимание, что все шестнадцатеричные числа должны быть в верхнем регистре.
Настройки по умолчанию:
KEYBOARD_KEY_90001=btn_left
KEYBOARD_KEY_90002=btn_right
KEYBOARD_KEY_90003=btn_middle
KEYBOARD_KEY_90004=btn_side
KEYBOARD_KEY_90005=btn_extra
Затем:
$ sudo systemd-hwdb update
– для обновления базы данных$ sudo udevadm trigger /sys/class/input/event9
– для перезагрузки базы данных$ sudo udevadm test /sys/class/input/event9
– для проверки, что все работает
Для тестирования и отладки я использовал $ sudo libinput debug-events
. Здесь вы можете получить номер устройства событий и многое другое.
Надеюсь, это поможет.
Ответ или решение
Если вы столкнулись с проблемами при попытке переназначить боковую кнопку на среднюю кнопку мыши с использованием libinput
на Ubuntu 22.04 в окружении Gnome Shell 42 и Wayland, это может быть связано с рядом технических причин, требующих тщательного анализа и исправления. Рассмотрим пошаговое руководство и возможные решения данной проблемы.
Описание проблемы
Вы используете трекбол Logitech Trackman Marble и хотите симулировать нажатие средней кнопки мыши с помощью одной из боковых кнопок. Хотя вам удалось переназначить другие кнопки, именно средняя кнопка не работает должным образом, несмотря на то, что конфигурации, примененные через hwdb
, кажутся корректными при тестировании с evtest
.
Пошаговое руководство по решению проблемы
-
Проверка спецификации устройства: Убедитесь, что имя устройства и идентификатор USB корректно определены с помощью команды
lsusb
. Например, используйтеv062Ap4101
, как показано в примере, где идентификаторы должны быть в верхнем регистре. -
Корректировка файла конфигурации hwdb: Измените структуру вашего файла
/etc/udev/hwdb.d/71-logitech-trackman.hwdb
. Используйте более широкую маску для имени устройства, например:evdev:input:b*v046DpC408* KEYBOARD_KEY_90004=btn_middle
Здесь
v046DpC408
— это пример идентификатора устройства, который вы должны заменить на ваш актуальный. -
Обновление и применение конфигурации:
- Обновление базы данных udev:
sudo systemd-hwdb update
- Триггирование udev для применения изменений (замените
/sys/class/input/eventX
на актуальное значение вашего устройства):sudo udevadm trigger /sys/class/input/eventX
- Обновление базы данных udev:
-
Диагностика с использованием
libinput
и других утилит:- Проверьте активность устройства и корректность назначенных событий:
sudo udevadm test /sys/class/input/eventX
- Используйте
libinput
для мониторинга:sudo libinput debug-events --device /dev/input/eventX
Если
libinput
не распознаёт среднюю кнопку, но распознаёт другие кнопки, это может указывать на ограничение на уровне драйверов или конфигурации Wayland. - Проверьте активность устройства и корректность назначенных событий:
-
Обходные пути и дополнительная диагностика:
- Переход на X11: Если проблема сохраняется, попробуйте временно перейти на X11 и проверьте, исправляется ли данное поведение. Это поможет определить, связано ли оно с Wayland.
- Использование внешних инструментов: Существует возможность использовать другие инструменты, такие как
xinput
или создание собственных скриптов для имитации событий.
Заключение
Несмотря на современность Wayland, такие проблемы с назначениями кнопок могут возникать, и их решение требует тщательной диагностики. Эффективное использование ресурсов, таких как udev
и libinput
, часто позволяет выявить и исправить причину проблем. Обязательно проверяйте актуальные обновления системы и драйверов, так как исправления могут быть внедрены в новых релизах.