Вопрос или проблема
У меня есть две трекболы Logitech: беспроводная TrackMan FX и Marble Mouse. Обе показывают один и тот же набор кнопок в evtest
: BTN_LEFT
, BTN_RIGHT
, BTN_MIDDLE
, BTN_SIDE
и BTN_EXTRA
, хотя у каждой из них всего четыре физических кнопки. TrackMan FX отправляет именно те события, которые мне нужны: левое, правое, среднее и боковое. Однако Marble Mouse отправляет BTN_EXTRA
вместо BTN_MIDDLE
, поэтому я хотел бы это перенастроить.
Этот ответ кажется, охватывает именно то, что мне нужно, и hwdb выглядит как правильное место для этого. Увы, это работает только наполовину, и я не понимаю, почему; я подозреваю, что это связано с двумя разными входными событиями, возникающими от одного клика. evtest
показывает корректный средний клик от FX следующим образом (опуская несущественные временные метки для ясности):
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Ненастроенный клик от MarbleMouse:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
type 1 (EV_KEY), code 276 (BTN_EXTRA), value 1
Итак, мой файл 99-marblebutton.hwdb
делает следующее:
evdev:input:b0003v046DpC408*
ID_INPUT_KEY=1
KEYBOARD_KEY_90005=btn_middle
И в результате входное событие модифицируется следующим образом:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Таким образом, я получаю событие BTN_MIDDLE
, но связанный MSC_SCAN
все еще имеет неправильное значение, и это, похоже, имеет значение, так как средний клик нигде не распознается. Фактически, он даже не кажется допустимым входным событием: используя libinput debug-events
, я могу видеть ненастроенное событие:
event7 POINTER_BUTTON +97.374s BTN_EXTRA (276) pressed, seat count: 1
С конфигурацией hwdb ничего не сообщается, когда я нажимаю ту же кнопку, и, следовательно, wev
тоже не видит события.
Другие вещи, которые я пробовал, включают перенастройку в swaywm, которая вроде как работает, но только в некоторых приложениях:
set $MOUSE "1133:50184:Logitech_USB_Trackball"
bindsym --input-device=$MOUSE --whole-window BTN_EXTRA seat - cursor press BTN_MIDDLE
bindsym --input-device=$MOUSE --whole-window --release BTN_EXTRA seat - cursor release BTN_MIDDLE
interception-tools позволяют мне написать фильтр, который может “исправить” как EV_KEY
, так и EV_MSC
событие, но эффект похож на hwdb: события отображаются корректно в evtest
, но libinput даже не видит их.
Solaar, похоже, не поддерживает ни одно из моих устройств, и я слишком глуп, чтобы заставить input-remapper сделать что-то полезное.
Я полагаю, это вызвано особенностью устройства, активной для этой конкретной мыши:
libinput quirks list /dev/input/event15
ModelTrackball=1
AttrEventCode=-BTN_MIDDLE;
Вы должны иметь возможность перезаписать это:
$ cat /etc/libinput/local-overrides.quirks
[Logitech Marble Mouse Trackballi Quirks]
MatchUdevType=mouse
MatchBus=usb
MatchVendor=0x46D
MatchProduct=0xC408
AttrEventCode=+BTN_MIDDLE;
Ответ или решение
Для того чтобы перенастроить кнопки мыши в системе Wayland, особенно когда дело касается ваших Logitech TrackMan FX и Marble Mouse, рекомендуется использовать файл конфигурации для ошибок (quirks) libinput. Это позволит вам скорректировать поведение, которое вы наблюдаете с кнопкой BTN_EXTRA.
Шаги для перенастройки кнопок
-
Проверьте информацию об устройстве: Сначала убедитесь, что вы правильно определили ваше устройство. Используйте команду:
libinput list-devices
Найдите ваше устройство в списке и запомните его параметры, такие как производитель и продукт (в вашем случае, это должно быть Logitech, с соответствующими идентификаторами).
-
Создайте файл для локальных ошибок: Откройте терминал и создайте файл с локальными ошибками (quirks), который будет использоваться для вашего устройства:
sudo nano /etc/libinput/local-overrides.quirks
В этом файле добавьте следующие строки:
[Logitech Marble Mouse Trackball] MatchUdevType=mouse MatchBus=usb MatchVendor=0x46D MatchProduct=0xC408 AttrEventCode=+BTN_MIDDLE;
Здесь
MatchVendor
иMatchProduct
должны соответствовать идентификаторам вашего устройства. Убедитесь, что вы правильно указали их. -
Перезагрузите ноутбук или службу libinput: После внесения изменений в файл локальных ошибок, перезагрузите систему или перезапустите услуги libinput, чтобы изменения вступили в силу. Чтобы перезапустить службу в случае использования systemd, выполните команду:
sudo systemctl restart systemd-logind
-
Проверьте наличие изменений: Для убедительности снова выполните команду
libinput debug-events
Нажмите на кнопку, которую вы перенастроили, и убедитесь, что теперь она отправляет событие BTN_MIDDLE с правильным кодом сканирования.
-
Используйте
evtest
для дополнительной проверки: Также можно использоватьevtest
для детального анализа событий на уровне устройства. Запуститеevtest
и выберите ваше устройство, чтобы просмотреть, какие события отправляются при нажатии кнопки.
Дополнительные советы
- Убедитесь, что используется актуальная версия драйвера libinput, так как более старые версии могут иметь ограниченную поддержку для особых устройств.
- Если проблема не решена, проверьте также наличие возможных конфликтов с другими конфигурациями в вашей системе, связанными с мышью или с кнопками, а также обратитесь к документации libinput для поиска других возможных параметров.
Следуя этим шагам, вы должны смочь успешно перенастроить кнопки вашей Logitech Marble Mouse под Wayland.