
Я создал пользовательскую клавиатуру с трекболом под большим пальцем и хочу сопоставить поведение прокрутки таким образом, чтобы при нажатии сочетания клавиш (например, левого alt) и вращении шарика он вел себя как прокрутка. Я использую Xorg, но мне было бы очень интересно увидеть решения как для X, так и для Wayland (если решение будет включать сервер отображения).
решение1
Эмулируйте вертикальную и горизонтальную прокрутку с помощьюlibinput
Водитель evdev
изdirkt'sответ поддерживает только эмуляцию вертикальной прокрутки. Если вы (как и я) также хотите прокручивать горизонтально, драйвер libinput
может быть использован для этого:
Подробная информация находится на странице руководства
libinput(4)
:Опция "ScrollButton" "int"
Обозначает кнопку как кнопку прокрутки. ЕслиМетод прокруткиявляетсякнопкаи кнопка логически удерживается, движение по осям x/y преобразуется в события прокрутки.
Опция "ScrollMethod" "строка"
Включает метод прокрутки. Допустимые значения:нет, два пальца, край, кнопка. Не все устройства поддерживают все параметры, если параметр не поддерживается, используется параметр прокрутки по умолчанию для этого устройства.
Например:
Section "InputClass" Identifier "Some Trackball" # ... Stuff to match your trackball, see xorg.conf(5) Driver "libinput" Option "ScrollMethod" "button" Option "ScrollButton" "4" # Or whatever button suits your needs EndSection
решение2
Имитация колеса мыши с помощью трекбола
Вы можете либо использовать существующие параметры конфигурации драйверов, которые делают что-то похожее на то, что вам нужно, либо написать свой собственный драйвер.
TheЛогитек М570беспроводной трекбол с USB-приемником. Это значит, что он будет отображаться как СПРЯТАННЫЙустройства и события мыши будут доступны черезвходуровень в ядре и может считывать данные с соответствующего /dev/event
устройства.
Драйвер X, в свою очередь, использует evdev
драйвер для чтения событий из этого слоя и превращает их в события X. Я не знаком с Wayland, но предполагаю, что там это будет работать аналогично.
1) evdev
Драйвер уже содержит опции для эмуляции колесика мыши на трекболе, см. man evdev
. Наиболее важными из них являются
Опция "EmulateWheel" "логическое"
Включить/выключить эмуляцию "колеса". Эмуляция колеса означает эмуляцию событий нажатия/отпускания кнопки при перемещении мыши с нажатой определенной реальной кнопкой. События кнопок колеса (обычно кнопки 4 и 5) обычно используются для прокрутки. Эмуляция колеса полезна для получения поведения, похожего на поведение колеса, с трекболами.
Опция "EmulateWheelButton" "целое число"
Указывает, какую кнопку необходимо удерживать для включения режима эмуляции колеса. Пока эта кнопка нажата, перемещение указателя X и/или Y будет генерировать события нажатия/отпускания кнопки, как указано в настройках XAxisMapping и YAxisMapping. Если кнопка имеет значение 0 и EmulateWheel включен, любое движение устройства преобразуется в события колеса. По умолчанию: 4.
Таким образом, это работает с использованием кнопки трекбола вместо сочетания клавиш на клавиатуре (потому что драйвер видит только события от мыши, а не от клавиатуры) и преобразуетдвижениев события колеса, а невращение.
2) Напишите свой драйвер, изменив несколько существующих. Вам нужно будет объединить драйверы для клавиатуры и мыши, чтобы эмуляция колеса могла запускаться нажатием клавиш.
Исходный код дляуровень ввода ядранаходится drivers/input
в дереве ядра.
Исходный код дляевдевX-драйвер находится вxorg/driver/xf86-input-evdev/tree/src/evdev.c.
Драйвер клавиатуры зависит от типа используемой вами клавиатуры.