Как я могу узнать, использует ли система Linux Wayland или X11?

язык

Я использую C++14 с cmake для моей программы.

:

Я хотел бы знать, как я могу узнать, использует ли система Linux Wayland или X11 в качестве оконной системы, чтобы иметь возможность использовать оба API в моем исходном коде без конфликта. Таким образом, создание окна с Wayland, когда Wayland доступен и в противном случае использовать Х11 API-интерфейс.

примечание: Я знаю, что есть XWayland, но я хочу использовать родной X11 и родной Wayland без что-то вроде XWayland.

EDIT: чтобы прояснить некоторые вещи: я не хотите проверить X11 или Wayland во время компиляции, а вместо этого во время выполнения, потому что тогда мне просто нужно скомпилировать код один раз, и это не требует от пользователя думать о том, какую версию использовать.

2 ответов


X11 использует DISPLAY переменная среды для поиска X-сервера. Wayland использует WAYLAND_DISPLAY. Сначала найдите переменную Wayland. Затем, если вы не найдете его или не можете подключиться, перейдите к использованию X11.

не пропустите проверку WAYLAND_DISPLAY переменная или предположим, что Wayland работает на "wayland-0". Некоторые люди хотят использовать вложенные композиторы, которые вы бы обошли. Другие люди могут запускать Wayland, но хотят принудительно выполнить рендеринг X11, удалив переменную WAYLAND_DISPLAY.


используйте переменную окружения XDG_SESSION_TYPE

на x11

echo $XDG_SESSION_TYPE
x11

на Вэйланд

$ echo $XDG_SESSION_TYPE
wayland