Переназначить верхнюю правую кнопку тачпада (на средний клик)

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

См. ниже, почему это не является дубликатом: речь идет о верхней кнопке, которая недостаточно указана командой xev -event button.

У меня есть тачпад с 4 кнопками, верхние выполняют то же, что и нижние.

Я хочу переназначить верхние (а именно правую верхнюю кнопку), чтобы она делала средний клик.

Я следовал этим решением:

~$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ATML1000:00 03EB:8A5C                     id=9    [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=11   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]

Затем:

xinput get-button-map 12
1 2 3 4 5 6 7

Используя xev -event button | grep button, я могу получить только то, что обе правые кнопки делают одно и то же (3) – а то, что мне нужно (средний клик), будет 2.

Проблема в том, что принятое решение там просто заменить 3 на 2 – но если я так сделаю, например, xinput set-button-map "SynPS/2 Synaptics TouchPad" 1 2 2 4 5 6 7, то только нижняя правая кнопка изменится: она станет “средним кликом”, в то время как верхняя останется обычным “правым кликом”. Я хочу, чтобы нижняя осталась по умолчанию (правый клик), а верхняя (правая) стала “средним кликом”.

Кажется, что верхние кнопки тачпада не указаны в xinput get-button-map 12 (замена 4, 5, 6 или 7 их тоже не затрагивает).

Таким образом, мой вопрос не просто в переназначении очевидной кнопки, как правый клик на средний клик (как здесь), а в разделении верхних кнопок от нижних.

Как я мог бы перечислить координаты верхней кнопки? – а затем изменить и сохранить их настройки? Я имею в виду не просто указать, что они делают, а их отличие от нижних кнопок, чтобы я мог применить опцию “средний клик” только к верхним.

Это на Kubuntu 24.04.

Ответ или решение

Проблема, с которой вы столкнулись, состоит в том, чтобы переназначить верхнюю правую кнопку на сенсорной панели, чтобы она выполняла действие средней кнопки мыши. Это особенно актуально в вашем случае, поскольку как верхний, так и нижний ряды кнопок выполняют одинаковые действия, а вам нужно дифференцировать их функциональность. Давайте с этим разберемся.

Теория

Архитектура входных устройств

Xinput является инструментом X Window System для настройки параметров устройств ввода, таких как мыши, клавиатуры и сенсорные панели. Без поддержки на уровне драйвера, Xinput может не полностью идентифицировать все кнопки устройства и не описать их уникально. Это может быть причиной проблемы: Xinput видит как верхние, так и нижние кнопки как идентичные, поскольку они подписаны под те же коды.

Стандарты и протоколы

X Window System использует номерные идентификаторы для кнопок мыши, где обычно:

  • 1 – Левый клик;
  • 2 – Средний клик;
  • 3 – Правый клик.

Но если расположение кнопок сенсорной панели не соответствует базовой интерактивной модели, дополнительный уровень конфигурации может потребоваться, чтобы разобраться в этой взаимосвязи.

Пример

Установив, что команда xinput get-button-map не распознает кнопки правильно, мы должны опробовать альтернативные подходы. На Linux-системах для работы с низкоуровневыми особенностями устройств ввода полезным может оказаться evdev. Драйвер evdev предоставляет русского рода инструмент для работы с событиями ввода, его также можно использовать для более точного определения различий между кнопками.

Как использовать evtest

  1. Установите evtest: Это утилита, которая может помочь вам просматривать события устройств ввода.

    sudo apt-get install evtest
  2. Запустите evtest: Для вашего устройства, чтобы получить подробную информацию о событиях ввода.

    sudo evtest

    Вы увидите список доступных устройств. Выберите свое сенсорное устройство (например, SynPS/2 Synaptics TouchPad).

  3. Проанализируйте результаты: Нажимайте различные кнопки и наблюдайте за выводимыми событиями. Это поможет выяснить, каким кодом представлена каждая из кнопок.

Применение

  1. Переназначение кнопок через xinput или xmodmap: После того как вы определили, каким кодам соответствуют кнопки, измените карту кнопок. Если evtest показывает разные коды для верхних и нижних кнопок, попробуйте настроить их через xmodmap.

    xmodmap -e "pointer = 1 3 2 4 5 6 7 8 9"

    Эта строка указывает на изменение порядка картирования.

  2. Предварительные изменения конфигурации: Возможно, потребуется внести изменения в файл конфигурации Xorg для конкретного устройства. Для этого введите sudo nano /usr/share/X11/xorg.conf.d/40-libinput.conf и добавьте:

    Section "InputClass"
       Identifier "touchpad catchall"
       MatchIsTouchpad "on"
       Driver "libinput"
       Option "ButtonMapping" "1 2 3 4 5 6 7 8 9"
    EndSection
  3. Создание пользовательского правила udev: Если вышеуказанные методы не помогают, вы можете создать персональное правило udev. Найдите идентификатор продукта и производителя командой lsusb, затем создайте правило в /etc/udev/rules.d/99-touchpad-buttons.rules.

    ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", ENV{LIBINPUT_CUSTOM_OPTIONS}="ButtonMapping=1 3 2 4 5 6 7"

Завершив все эти шаги, вы можете перезагрузить систему или выполнить sudo udevadm control --reload-rules && sudo udevadm trigger для применения изменений.

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

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

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