Переназначение кнопок мыши в Wayland

Вопрос или проблема

У меня есть две трекболы 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.

Шаги для перенастройки кнопок

  1. Проверьте информацию об устройстве: Сначала убедитесь, что вы правильно определили ваше устройство. Используйте команду:

    libinput list-devices

    Найдите ваше устройство в списке и запомните его параметры, такие как производитель и продукт (в вашем случае, это должно быть Logitech, с соответствующими идентификаторами).

  2. Создайте файл для локальных ошибок: Откройте терминал и создайте файл с локальными ошибками (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 должны соответствовать идентификаторам вашего устройства. Убедитесь, что вы правильно указали их.

  3. Перезагрузите ноутбук или службу libinput: После внесения изменений в файл локальных ошибок, перезагрузите систему или перезапустите услуги libinput, чтобы изменения вступили в силу. Чтобы перезапустить службу в случае использования systemd, выполните команду:

    sudo systemctl restart systemd-logind
  4. Проверьте наличие изменений: Для убедительности снова выполните команду

    libinput debug-events

    Нажмите на кнопку, которую вы перенастроили, и убедитесь, что теперь она отправляет событие BTN_MIDDLE с правильным кодом сканирования.

  5. Используйте evtest для дополнительной проверки: Также можно использовать evtest для детального анализа событий на уровне устройства. Запустите evtest и выберите ваше устройство, чтобы просмотреть, какие события отправляются при нажатии кнопки.

Дополнительные советы

  • Убедитесь, что используется актуальная версия драйвера libinput, так как более старые версии могут иметь ограниченную поддержку для особых устройств.
  • Если проблема не решена, проверьте также наличие возможных конфликтов с другими конфигурациями в вашей системе, связанными с мышью или с кнопками, а также обратитесь к документации libinput для поиска других возможных параметров.

Следуя этим шагам, вы должны смочь успешно перенастроить кнопки вашей Logitech Marble Mouse под Wayland.

Оцените материал
Добавить комментарий

Капча загружается...