Spec-Zone.ru › Qt

Qt Wayland Композитор

Qt Wayland Композитор — модуль, предоставляющий удобные и мощные API QML и C++ для разработки пользовательских серверов отображения, основанных на протоколе Wayland. Сервер отображения, часто называемый композитором, отображает содержимое от клиентских приложений, поддерживающих протокол Wayland.

Философия проектирования Wayland заключается в том, чтобы поддерживать основной протокол простым и минимальным. Разработчики затем могут расширить этот основной протокол с помощью расширений, специфичных для конкретных случаев использования. Qt Wayland Композитор по умолчанию поддерживает многие распространённые расширения и также имеет API для создания новых пользовательских расширений.

Обычно композитор, написанный с помощью Qt Wayland Композитора, становится подсистемой внутри процесса более крупного менеджера приложений. Qt Wayland Композитор предоставляет API для взаимодействия с клиентами и отображения их содержимого на экране. API QML содержат высокоуровневые API, которые легко интегрируются с остальной частью Qt, что позволяет удобно использовать анимации, эффекты и пользовательский интерфейс через Qt Quick. Также доступны API C++ — если вам нужен более низкий уровень доступа.

Менеджер приложений обычно реализует дополнительные функции, такие как жизненный цикл приложения, ввод виртуальной клавиатуры, безопасность и межпроцессное взаимодействие (IPC). Qt предоставляет API, которые можно использовать для разработки оставшихся частей менеджера приложения в других модулях. Qt Automotive Suite предоставляет Qt Application Manager, который является полным менеджером приложений, включающим композитор, разработанный с использованием Qt Wayland Композитора.

Для получения дополнительной информации о Wayland см. Wayland и Qt.

Особенности Qt Wayland Композитора

Qt Wayland Композитор включает функции, необходимые для создания композитора:

  • API QML для отображения и управления содержимым клиентов, полностью интегрированный со всеми функциями Qt Quick.
  • API C++ для доступа и управления на низком уровне.
  • Поддержка распространённых расширений, включая XDG Shell и IVI Application.
  • API для лёгкого расширения поддержки пользовательских расширений.

Переменные окружения и аргументы командной строки

Qt Wayland Композитор распознаёт следующие переменные окружения и аргументы командной строки:

  • Переменные окружения:
    • QT_WAYLAND_HARDWARE_INTEGRATION Выбирает плагин интеграции оборудования для использования.
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Выбирает плагин интеграции буфера клиента для использования.
    • QT_WAYLAND_SERVER_BUFFER_INTEGRATION Выбирает плагин интеграции сервера для использования.
  • Аргументы командной строки:
    • --wayland-socket-name Переопределяет имя сокета по умолчанию, используемое для связи с клиентами.

Запуск Wayland композитора

Поскольку он не зависит от каких-либо недоступных платформенно-специфических функций, композитор легко можно протестировать на системе с рабочим столом на базе X11. Это может быть полезно во время разработки, как для упрощённой отладки, так и для эффективного тестирования новых функций.

Qt Wayland поддерживает несколько бэкендов для обмена графическими буферами между клиентами и сервером. Основной из них:

  • wayland-egl: Это бэкенд по умолчанию и его следует предпочитать, когда это возможно. Для его работы требуется поддержка OpenGL в драйвере OpenGL на системе.

Другие бэкенды могут быть выбраны путём установки переменной окружения QT_WAYLAND_CLIENT_BUFFER_INTEGRATION.

Примечание: Если Qt Wayland Композитор не может инициализировать бэкенд буфера клиента, то он переключится на использование бэкенда "общая память" (основанного на wl_shm) как резервного варианта. Этот бэкенд будет использовать оперативную память для обмена графическими буферами и копировать данные туда и обратно по мере необходимости. Это имеет последствия для производительности, особенно на экранах с высокой плотностью пикселей и ограниченном графическом оборудовании. При исследовании проблем с производительностью Qt Wayland Композитора, начните с проверки того, используется ли правильная интеграция буфера клиента.

Также имейте в виду, что если на вашей системе уже запущен Wayland композитор, вам может потребоваться установить XDG_RUNTIME_DIR для указания другого расположения. В этом случае при запуске композитора будут отображаться предупреждения. XDG_RUNTIME_DIR может указывать на любое доступное расположение, которое не используется.

Например, если вы хотите запустить пример pure-qml с бэкендом wayland-egl, вы можете использовать следующую команду:

% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl ./pure-qml

Клиент можно затем запустить на композиторе, установив ту же переменную XDG_RUNTIME_DIR и передав "-platform wayland" в качестве аргумента командной строки. Переменную окружения QT_QPA_PLATFORM также можно использовать для выбора плагина Wayland QPA на стороне клиента.

Примечание: В большинстве случаев клиент адаптируется к тому же OpenGL, что и сервер, при подключении. Однако при запуске с бэкендом EGL на некоторых конкретных драйверах требуется, чтобы инициализация произошла ранее. Если вы столкнулись с этой проблемой, вы можете передать "-platform wayland-egl", чтобы предварительно инициализировать клиент с EGL.

Устранение неполадок

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

Установка переменной окружения WAYLAND_DEBUG в значение "1" включит вывод журнала для самой библиотеки Wayland. Это может быть очень полезно, например, при отладке пользовательских расширений протокола Wayland. Это покажет вам, какие события и запросы передаются между клиентом и сервером, а также временные метки для этих событий.

Кроме того, Qt имеет категории ведения журнала qt.waylandcompositor.* и qt.qpa.wayland.*, чтобы включить дополнительное ведение журнала. Последняя должна быть установлена на стороне клиента, так как она включает ведение журнала из плагина Wayland QPA.

Примеры

Ознакомьтесь с примерами Qt Wayland Композитор, чтобы узнать, как можно использовать эти API для написания пользовательских композиторов.

Справочник по API

Qt Wayland Композитор можно использовать из C++ или QML:

  • Типы QML Qt Wayland Композитор
  • Классы C++ Qt Wayland Композитор

Эволюция модуля

Миграция на Qt 6 — Qt Wayland Композитор перечисляет важные изменения в API и функциональности модуля, выполненные для серии Qt 6.

Лицензии и примечания

Qt Wayland Композитор и плагин интеграции Qt Wayland доступны по коммерческим лицензиям от The Qt Company.

Кроме того, Qt Wayland Композитор доступен по GNU General Public License, версия 3, а плагин интеграции Qt Wayland доступен по GNU General Public License, версия 3 или GNU General Public License, версия 2.

См. Лицензирование Qt для получения дополнительной информации.

Qt Wayland Композитор и плагин интеграции Qt Wayland используют определения протокола по следующим разрешительным лицензиям:

Протокол Wayland EGLStream Controller, версия 1.1.1

Лицензия MIT

Протокол Wayland Fullscreen Shell, версия unstable v1

Лицензия MIT

Протокол Wayland IVI Extension, версия 1.9.1

Лицензия MIT

Протокол Wayland Linux Dmabuf Unstable V1, версия unstable v1, версия 3

Лицензия MIT

Протокол Wayland Pointer Gestures, версия unstable v1, версия 2

Лицензия MIT

Протокол Wayland Primary Selection, версия 1

Лицензия MIT

Протокол Wayland, версия 1.16.0

Лицензия MIT

Протокол Wayland Scaler, версия 2

Лицензия MIT

Протокол Wayland Tablet, версия unstable v2, версия 1

Лицензия MIT

Протокол Wayland Text Input, версия unstable v2

Лицензия HPND

Протокол Wayland Viewporter, версия 1

Лицензия MIT

Протокол Wayland XDG Output, версия unstable v1, версия 3

Лицензия MIT

Протокол Wayland XDG Shell, версия 1.18

Лицензия MIT

Протокол Wayland xdg-decoration, версия unstable v1, версия 1

Лицензия MIT

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtwaylandcompositor-index.html

Spec-Zone.ru

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