У меня есть приложение на QT5, которое не работает должным образом в Wayland. Как я могу заставить его использовать xwayland?

Вопрос или проблема

Я использую LMMS, который построен с использованием QT5, и у него есть несколько проблем с Wayland. Графика в порядке, но несколько жестов мыши не работают, и окна-в-окнах работают неправильно.

например

Wayland не поддерживает QWindow::requestActivate()

QtWaylandClient::QWaylandXdgSurface(0x64bdca7175b0), который не соответствует текущему верхнему удерживающему всплывающему окну

Есть ли способ сообщить LMMS использовать X и xwayland вместо прямого wayland? Я готов скомпилировать код, чтобы решить эту проблему, у меня в любом случае есть свой форк.

Я полагаю, что проблемы с Wayland являются, хм, “проблемами безопасности”, то есть нерешаемыми.

LMMS работал раньше, но я обновил до версии 24.04 и сожалею об этом.

Ответ или решение

Чтобы заставить ваше приложение QT5 работать через XWayland вместо Wayland, вам нужно предпринять несколько шагов. Давайте разберем их подробно.

Понимание проблемы

Wayland — это современный дисплейный сервер для Linux, который повышает безопасность и производительность. Однако некоторые приложения, особенно те, что используют QT5, могут испытывать проблемы совместимости, как, например, в вашем случае с LMMS. Например, проблемы с обработкой мышиных жестов и элементов интерфейса могут возникать из-за особенностей Wayland в управлении окнами и событиями ввода.

Решение проблемы

1. Установите XWayland

XWayland — это совместимый слой, который позволяет приложениям, предназначенным для X11, работать в окружении Wayland. В большинстве дистрибутивов Linux он установлен по умолчанию, но убедитесь, что у вас стоит последняя версия.

sudo apt update
sudo apt install xwayland

2. Запуск QT5 приложения через XWayland

Вы можете настроить ваше QT5 приложение, такое как LMMS, для работы через XWayland, используя несколько методов:

  • Переменная окружения
    Переменная окружения QT_QPA_PLATFORM управляет тем, какую платформу будет использовать ваше QT приложение. Установите её на xcb, чтобы принудительно использовать XWayland.

    QT_QPA_PLATFORM=xcb lmms

    Вы можете добавить эту строку в ваш файл .bashrc или .profile, чтобы она применялась автоматически при каждом запуске.

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

3. Перекомпиляция LMMS с поддержкой X11

Поскольку у вас есть собственный форк LMMS, вы можете пересобрать приложение с поддержкой X11:

  • Убедитесь, что у вас установлены все необходимые зависимости для сборки QT с поддержкой X11.
  • Настройте CMake или другой используемый инструмент сборки для включения поддержки X11.
cmake -DQT_QPA_PLATFORM=xcb ..
make
  • Тестируйте работоспособность после сборки.

Заключение

Использование XWayland — это временное решение, и в долгосрочной перспективе оптимально исправить саму проблему совместимости с Wayland, будь то в LMMS или Qt библиотеках. Однако описанные методы позволят вам быстро восстановить работоспособность приложения. Работая над своим форком, вы также можете вносить патчи, чтобы улучшить поддержку Wayland в будущем.

Оцените материал
Добавить комментарий

Капча загружается...