Spec-Zone.ru › Qt 5.15

Вводные устройства на устройстве с встраиваемой Linux-системой

На вашем устройстве с встраиваемой Linux-системой, когда нет системного окна, ввод с мыши, клавиатуры и сенсорного экрана считывается непосредственно через evdev или с помощью вспомогательных библиотек, таких как libinput или tslib. Однако, это поведение требует, чтобы узлы устройств /dev/input/event* были доступны для чтения пользователем. eglfs и linuxfb имеют весь код обработки ввода в компилированном виде.

Использование libinput

libinput — это библиотека для обработки устройств ввода, которая предлагает альтернативу собственному механизму обработки ввода Qt. Для включения использования libinput, при конфигурировании и сборке Qt, убедитесь, что доступны файлы разработки для libudev и libinput. Если требуется поддержка клавиатуры, то также необходимо xkbcommon. С eglfs и linuxfb, дополнительных действий не требуется, поскольку эти плагины по умолчанию используют libinput. Если поддержка libinput недоступна или переменная окружения QT_QPA_EGLFS_NO_LIBINPUT установлена, вместо этого используются собственные обработчики Qt evdev.

Ввод на eglfs и linuxfb без libinput

Параметры, такие как имя узла устройства, могут быть установлены в переменных окружения QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS и QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS; отделяйте записи двоеточием. Эти параметры являются альтернативой передаче настроек в аргументе командной строки -plugin, и в некоторых бэкендах они являются необходимыми. Однако, eglfs и linuxfb используют встроенные обработчики ввода, поэтому отдельного аргумента -plugin нет.

Кроме того, встроенные обработчики ввода могут быть отключены, установив QT_QPA_EGLFS_DISABLE_INPUT (для eglfs) или QT_QPA_FB_DISABLE_INPUT (для linuxfb) в 1.

Мышь

Курсор мыши появляется всякий раз, когда QT_QPA_EGLFS_HIDECURSOR (для eglfs) или QT_QPA_FB_HIDECURSOR (для linuxfb) не установлены, и Qt's libudev-базированное обнаружение устройств сообщает, что доступна хотя бы одна мышь. Если поддержка libudev отсутствует, курсор мыши всегда отображается; если он не отключен явно с помощью переменной окружения.

Если Qt был сконфигурирован с поддержкой libudev, подключение или отключение устройства ввода во время работы приложения (горячая подключаемость) поддерживается. Тогда заголовки разработки libudev присутствуют в sysroot во время конфигурирования.

Обработчик мыши evdev поддерживает следующие дополнительные параметры:

Параметр Описание
/dev/input/... Указывает имя устройства ввода. Если не указано, Qt ищет подходящее устройство либо через libudev, либо проходя по доступным узлам.
nocompress По умолчанию события ввода, которые не приводят к изменению позиции по сравнению с последним событием мыши Qt, сжимаются. Новое событие мыши Qt отправляется только после изменения позиции или состояния кнопки. Чтобы отключить это поведение, установите параметр nocompress.
dejitter Указывает предел джиттера; по умолчанию отключено.
grab При установке в 1, Qt захватывает устройство для эксклюзивного использования.
abs Некоторые сенсорные экраны сообщают абсолютные координаты и не могут быть отличимы от сенсорных панелей. В этом случае передайте abs, чтобы указать, что устройство использует абсолютные события.

Клавиатура

Обработчик клавиатуры evdev поддерживает следующие дополнительные параметры:

Параметр Описание
/dev/input/... Указывает имя устройства ввода. Если не указано, Qt ищет подходящее устройство либо через libudev, либо проходя по доступным узлам.
grab Включает захват устройства ввода.
keymap Указывает имя файла пользовательской карты клавиатуры.
enable-compose Включает композитинг.
repeat-delay Устанавливает пользовательскую задержку повтора клавиш.
repeat-rate Устанавливает пользовательскую частоту повтора клавиш.

В системах с встраиваемой Linux, где сеансы терминала не отключены, поведение при нажатии клавиши может быть запутанным, так как событие ввода обрабатывается приложением Qt и tty. Для решения этой проблемы доступны следующие варианты:

  • При запуске приложения EGLFS и LinuxFB пытаются отключить клавиатуру терминала, установив режим клавиатуры tty в K_OFF. Это предотвращает отправку нажатий клавиш в терминал. Если нужно стандартное поведение, установите переменную окружения QT_QPA_ENABLE_TERMINAL_KEYBOARD в 1. Обратите внимание, что это работает только в том случае, если приложение запущено из удаленного консольного терминала, например, через ssh, и ввод с клавиатуры терминала остается включенным.
  • Альтернативный подход — использовать параметр grab обработчика клавиатуры evdev, передав grab=1 в QT_QPA_EVDEV_KEYBOARD_PARAMETERS. Это приводит к попытке захвата устройства ввода. Если захват grab успешен, никакие другие компоненты системы не получат события от него, пока запущено приложение Qt. Этот подход более подходит для приложений, запускаемых удаленно, поскольку не требует доступа к устройству tty.
  • Наконец, во многих специализированных образах Embedded Linux нет смысла иметь включенные стандартные сеансы терминала. Подробную информацию об отключении этих сеансов терминала см. в документации вашей среды сборки. Например, при создании образов с использованием Yocto Project, сброс переменной SYSVINIT_ENABLED_GETTYS приводит к отсутствию процесса getty, что означает отсутствие ввода с любого из виртуальных терминалов.

Если стандартная встроенная карта клавиш недостаточна, вы можете указать другую либо через параметр keymap, либо через функцию loadKeymap() специфичную для eglfs. Последний вариант позволяет переключать карту клавиш во время выполнения. Однако, это поведение требует использования встроенного обработчика клавиатуры eglfs; оно не поддерживается, когда обработчик клавиатуры загружен через параметр командной строки -plugin.

Примечание: Специальные системные комбинации клавиш, такие как переключение консолей (Ctrl+Alt+Fx) или очистка (Ctrl+Alt+Backspace), в настоящее время не поддерживаются и игнорируются.

Для создания пользовательской карты клавиш используйте утилиту kmap2qmap, которая находится в модуле qttools. Исходные файлы должны быть в стандартном Linux формате kmap, который понимается командой ядра loadkeys Файлы qmap могут быть сгенерированы следующими способами:

  • Проект Linux Console Tools (LCT).
  • X.org X11 карты клавиш могут быть преобразованы в формат kmap с помощью утилиты ckbcomp.
  • Поскольку файлы kmap являются обычными текстовыми файлами, их также можно создать вручную.

kmap2qmap — это командная программа, которой нужны как минимум 2 файла в качестве параметров. Последний параметр — сгенерированный файл .qmap, в то время как все остальные анализируются как входные файлы .kmap Например:

kmap2qmap i386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.inc de-latin1-nodeadkeys.qmap

Примечание: kmap2qmap не поддерживает все (псевдо)символы, которые поддерживает ядро Linux. Следовательно, при преобразовании стандартной карты клавиш будет ряд предупреждений относительно Show_Registers, Hex_A и т. д.; эти сообщения можно игнорировать.

Сенсорный экран

Хотя это не обязательно для современных сенсорных экранов, для некоторых резистивных сенсорных экранов с одним касанием может потребоваться использование tslib вместо использования протокола Linux для множественного касания и устройств событий.

Чтобы включить поддержку tslib, установите переменную окружения QT_QPA_EGLFS_TSLIB (для eglfs) или QT_QPA_FB_TSLIB (для linuxfb) в 1. Чтобы изменить устройство, установите переменную окружения TSLIB_TSDEVICE или передайте имя устройства в командной строке. Обратите внимание, что обработчик ввода tslib генерирует события мыши и поддерживает только одно касание, в отличие от evdevtouch, который генерирует истинные многоточные события QTouchEvent также.

Обработчик сенсорного экрана evdev поддерживает следующие дополнительные параметры:

Параметр Описание
/dev/input/... Указывает имя устройства ввода. Если не указано, Qt ищет подходящее устройство либо через libudev, либо проходя по доступным узлам.
rotate На некоторых сенсорных экранах координаты должны быть повернуты, установив rotate в 90, 180 или 270.
invertx и inverty Указывает параметры для инвертирования координат X или Y в событиях ввода.

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

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180

Планшеты с ручками

Плагин evdevtablet предоставляет базовую поддержку Wacom и аналогичных планшетов с ручкой. Он генерирует только события QTabletEvent. Для включения передайте QT_QPA_GENERIC_PLUGINS=evdevtablet в переменную окружения или, альтернативно, параметр -plugin evdevtablet в командной строке.

Плагин может принимать параметр узла устройства, такой как QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1, если автоматическое обнаружение устройств Qt (основанное либо на libudev, либо проходя по /dev/input/event*) не работает или работает неправильно.

Отладка устройств ввода

Возможно вывести некоторую информацию в вывод отладки, включив правило ведения журнала qt.qpa.input, например, установив переменную окружения QT_LOGGING_RULES в значение qt.qpa.input=true. Это полезно для определения используемого устройства или для устранения неполадок с обнаружением устройств.

Использование пользовательских изображений курсора мыши

eglfs поставляется со своим набором изображений курсора мыши размером 32x32. Если их недостаточно, вы можете предоставить пользовательскую карту курсоров, установив переменную окружения QT_QPA_EGLFS_CURSOR в имя JSON-файла. Этот файл также можно встроить в приложение с помощью Системы ресурсов Qt.

Например, встроенную карту курсоров с 8 изображениями курсора в строке можно указать следующим образом:

{
  "image": ":/cursor-atlas.png",
  "cursorsPerRow": 8,
  "hotSpots": [
      [7, 2],
      [12, 3],
      [12, 12],
      ...
  ]
}

Обратите внимание, что изображения должны быть плотно упакованы в атласе; ширина и высота курсоров определяются на основе общего размера изображения и настройки cursorsPerRow. Атласы также должны предоставлять изображение для всех поддерживаемых курсоров.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/inputs-linux-device.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API