Wayland и X11: выбор и диагностика
Точные настройки и CLI, fallback, фактический бэкенд, HDR и libdecor.
Display server отвечает за окна и ввод. Renderer отвечает за построение изображения, а rendering driver — за графический API. Например, wayland, forward_plus и vulkan обозначают три разных выбора.
Xwayland позволяет X11-приложению работать внутри Wayland-сеанса. Поэтому Wayland-сеанс не доказывает, что игра использует нативный Wayland-бэкенд. Механизм описан в официальной документации Xwayland.
Настройка проекта и редактора
В Project Settings включите Advanced Settings и задайте display/display_server/driver.linuxbsd:
default— стандартный порядок бэкендов данной сборки;x11— запрос X11;wayland— запрос Wayland;headless— работа без графического окна, не тест Wayland/X11.
В текущих исходниках Linux регистрирует X11 раньше Wayland, если включены оба. Не считайте порядок обещанием для любой пользовательской сборки: бэкенд может быть исключён при компиляции. Перезапустите приложение и проверьте фактический выбор.
Для самого редактора есть отдельная настройка Editor Settings → Run → Platforms → LinuxBSD → Prefer Wayland (run/platforms/linuxbsd/prefer_wayland), по умолчанию false. Она требует перезапуска и учитывается при наличии WAYLAND_DISPLAY. Это не переименование графического драйвера Vulkan и не настройка HDR.
Временный выбор через CLI
Выполняйте в Linux из папки экспортированной игры. Сначала проверьте доступные варианты в справке именно этого исполняемого файла:
./MyGame.x86_64 --help
./MyGame.x86_64 --display-driver wayland
./MyGame.x86_64 --display-driver x11Последние две команды — отдельные запуски для сравнения. Правильное имя параметра — --display-driver. --display-server в текущем парсере отсутствует. Не путайте его с --rendering-driver, выбирающим графический API.
Если указанного CLI-бэкенда нет в сборке, парсер сообщает Unknown display driver и прекращает запуск: fallback на этой стадии не происходит. Если бэкенд зарегистрирован, но не смог инициализироваться, движок пробует другие зарегистрированные оконные бэкенды. Такой fallback не гарантирован: другой бэкенд также может отсутствовать или не подключиться. Автоматическая попытка fallback не выбирает headless вместо оконного режима.
Узнать фактический бэкенд
Сохраните класс в RuntimeDisplayInfo.cs. Из C#-скрипта внутри дерева вызовите ReckfellApi.Print(RuntimeDisplayInfo.Describe());:
using Reckfell;
public static class RuntimeDisplayInfo
{
public static string Describe() =>
$"display={DisplayServer.GetName()}; " +
$"renderer={RenderingServer.GetCurrentRenderingMethod()}; " +
$"driver={RenderingServer.GetCurrentRenderingDriverName()}";
}По текущим исходникам DisplayServer.GetName() возвращает Wayland или X11 для соответствующего Linux-бэкенда; это имена с заглавными буквами, в отличие от CLI-значений. Сравнивайте фактический результат и сообщение о fallback, а не только настройку проекта. Проверенный headless-запуск этого примера в Windows возвращает display=headless; это не подтверждение работы Linux-бэкенда.
HDR и ограничения окон
В текущем Wayland-бэкенде HDR-вывод требует поддержки renderer, графического драйвера, формата поверхности и подходящего диапазона яркости окна. X11-бэкенд не предоставляет этот HDR-путь, включая запуск X11-приложения через Xwayland. wayland само по себе не гарантирует HDR: проверяйте состояние конкретного окна по руководству HDR.
Текущая реализация Wayland не выполняет произвольный window_set_position для обычного top-level окна. Не рассчитывайте, что логика размещения окон X11 будет работать без изменений. Проверяйте позиционирование, несколько экранов, масштаб, ввод и дополнительные окна на целевом compositor; не пытайтесь исправить ограничения оконного протокола сменой PCK.
Временно исключить libdecor из диагностики
Если проблема связана с рамкой или заголовком Wayland-окна и сборка использует libdecor, можно проверить отдельный запуск:
RECKFELL_WAYLAND_DISABLE_LIBDECOR=1 ./MyGame.x86_64 --display-driver waylandПрефикс задаёт переменную только этому процессу. Он не переключает Wayland на X11 и не чинит все ошибки интерфейса; клиентские декорации могут исчезнуть. Включите verbose-лог при необходимости увидеть, пропущена ли проверка libdecor. Для обычного запуска уберите этот префикс.
Диагностика
| Симптом | Проверка |
|---|---|
Unknown display driver | Список в --help этой сборки, имя --display-driver и включённые бэкенды. |
| После запроса Wayland используется X11 | Лог инициализации/fallback и фактический DisplayServer.GetName(). |
| Оба оконных бэкенда не запускаются | Доступность сеанса и сокетов для процесса, состав сборки и ошибки графического драйвера. Headless — отдельный режим. |
| Не работает HDR | Нативный Wayland, renderer/поверхность/дисплей и состояние окна; сеанс Wayland недостаточен. |
| Не меняется позиция окна | Ограничение текущего top-level Wayland API; не результат неправильной архитектуры экспорта. |
Справка CLI и C#-пример проверены установленным Windows Runtime. Выбор Linux-бэкенда, fallback, HDR, libdecor и оконные ограничения сверены с исходниками; Linux-сеанс, команды shell и реальная работа окон этим прогоном не проверены. Для состава пакета см. экспорт для Linux.