Вопрос или проблема
См. ниже, почему это не является дубликатом: речь идет о верхней кнопке, которая недостаточно указана командой 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
-
Установите evtest: Это утилита, которая может помочь вам просматривать события устройств ввода.
sudo apt-get install evtest
-
Запустите evtest: Для вашего устройства, чтобы получить подробную информацию о событиях ввода.
sudo evtest
Вы увидите список доступных устройств. Выберите свое сенсорное устройство (например, SynPS/2 Synaptics TouchPad).
-
Проанализируйте результаты: Нажимайте различные кнопки и наблюдайте за выводимыми событиями. Это поможет выяснить, каким кодом представлена каждая из кнопок.
Применение
-
Переназначение кнопок через xinput или xmodmap: После того как вы определили, каким кодам соответствуют кнопки, измените карту кнопок. Если evtest показывает разные коды для верхних и нижних кнопок, попробуйте настроить их через xmodmap.
xmodmap -e "pointer = 1 3 2 4 5 6 7 8 9"
Эта строка указывает на изменение порядка картирования.
-
Предварительные изменения конфигурации: Возможно, потребуется внести изменения в файл конфигурации 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
-
Создание пользовательского правила 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
для применения изменений.
Этот комплексный подход должен помочь в решении вашей задачи, предоставив возможность явно различать и конфигурировать верхние и нижние кнопки сенсорной панели для достижения необходимого поведения.