Эмулируйте вертикальную и горизонтальную прокрутку с помощьюlibinput

Эмулируйте вертикальную и горизонтальную прокрутку с помощьюlibinput

Я создал пользовательскую клавиатуру с трекболом под большим пальцем и хочу сопоставить поведение прокрутки таким образом, чтобы при нажатии сочетания клавиш (например, левого alt) и вращении шарика он вел себя как прокрутка. Я использую Xorg, но мне было бы очень интересно увидеть решения как для X, так и для Wayland (если решение будет включать сервер отображения).

решение1

Эмулируйте вертикальную и горизонтальную прокрутку с помощьюlibinput

Водитель evdevизdirkt'sответ поддерживает только эмуляцию вертикальной прокрутки. Если вы (как и я) также хотите прокручивать горизонтально, драйвер libinputможет быть использован для этого:

  1. Подробная информация находится на странице руководства libinput(4):

    Опция "ScrollButton" "int"

    Обозначает кнопку как кнопку прокрутки. ЕслиМетод прокруткиявляетсякнопкаи кнопка логически удерживается, движение по осям x/y преобразуется в события прокрутки.

    Опция "ScrollMethod" "строка"

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

  2. Например:

    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.

Драйвер клавиатуры зависит от типа используемой вами клавиатуры.

Связанный контент