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:
Эволюция модуля
Миграция на 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 используют определения протокола по следующим разрешительным лицензиям:
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия MIT |
|
Протокол Wayland Linux Dmabuf Unstable V1, версия unstable v1, версия 3 |
Лицензия MIT |
Протокол Wayland Pointer Gestures, версия unstable v1, версия 2 |
Лицензия MIT |
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия HPND |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия 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