如何确定 Linux 系统使用的是 Wayland 还是 X11?

How I can find out if a Linux system uses Wayland or X11?

使用的语言

我在我的程序中使用 C++14 和 cmake。

问题:

我想知道如何确定 Linux 系统是否使用 Wayland 或 X11 作为 window 系统以便能够在我的源代码中同时使用这两个 API没有冲突的代码。 因此,当 Wayland 可用时使用 Wayland 创建一个 window,否则使用 X11 API.

注意:我知道有 XWayland,但我想使用原生 X11 和原生 Wayland,而没有像 XWayland 这样的东西。

编辑:澄清一些事情:我不想在编译时检查 X11 或 Wayland -time,但而不是在运行时,因为这样我只需要编译一次代码,而不需要用户考虑使用哪个版本。

使用环境变量XDG_SESSION_TYPE

x11

echo $XDG_SESSION_TYPE
x11

在韦兰

$ echo $XDG_SESSION_TYPE
wayland

X11 使用 DISPLAY 环境变量来查找 X 服务器。韦兰使用 WAYLAND_DISPLAY。首先寻找 Wayland 变量。如果找不到或无法连接,请继续使用 X11。

不要跳过检查 WAYLAND_DISPLAY 变量或假设 Wayland 在 "wayland-0" 上是 运行。有些人想使用嵌套的合成器,你会绕过它。其他人可能是 运行 Wayland,但想通过删除 WAYLAND_DISPLAY 变量来强制 X11 渲染。

我在运行级别 3,但在图形中 shell,我的 $XDG_SESSION_TYPE 是 'tty'