13

使用的语言

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

问题:

我想知道如何确定 Linux 系统是否使用 Wayland 或 X11 作为窗口系统,以便能够在我的源代码中使用这两个 API 而不会发生冲突。因此,当 Wayland 可用时使用 Wayland 创建一个窗口,否则使用 X11 API。

注意:我知道有 XWayland,但我想使用原生 X11 和原生 Wayland,而不使用 XWayland 之类的东西。

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

4

3 回答 3

14

X11 使用DISPLAY环境变量来查找 X 服务器。韦兰使用WAYLAND_DISPLAY. 首先查找 Wayland 变量。然后,如果您没有找到它或无法连接,请继续使用 X11。

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

于 2017-08-06T22:31:47.007 回答
10

使用环境变量XDG_SESSION_TYPE

在 x11 上

echo $XDG_SESSION_TYPE
x11

在韦兰

$ echo $XDG_SESSION_TYPE
wayland
于 2017-08-06T20:13:06.550 回答
-2

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

于 2019-06-22T18:20:37.497 回答