我在程序中使用C ++ 14和cmake。
我想知道如何知道Linux系统是否使用Wayland或X11作为窗口系统,以便能够在我的源代码中使用这两个API而不会发生冲突。 因此,当Wayland可用并以其他方式使用时,使用Wayland创建一个窗口 X11 API。
注意:我知道有XWayland,但是我想使用原生的X11和原生的Wayland而不喜欢XWayland。
编辑:澄清一些事情:我不想要在编译时检查X11或Wayland ,但而不是在运行时,因为那时我只需要编译一次代码,它不需要用户考虑使用哪个版本。
答案 0 :(得分:7)
X11使用DISPLAY
环境变量来查找X服务器。 Wayland使用WAYLAND_DISPLAY
。首先寻找Wayland变量。然后,如果您找不到它,或者您无法连接,请继续使用X11。
请勿跳过检查WAYLAND_DISPLAY
变量或假设Wayland正在" wayland-0"上运行。有些人想使用嵌套合成器,你可以绕过它们。其他人可能正在运行Wayland,但希望通过删除WAYLAND_DISPLAY变量来强制执行X11渲染。
答案 1 :(得分:4)
使用环境变量XDG_SESSION_TYPE
on x11
echo $XDG_SESSION_TYPE
x11
on wayland
$ echo $XDG_SESSION_TYPE
wayland
答案 2 :(得分:0)
我在运行级别3,但在图形外壳中,我的$ XDG_SESSION_TYPE是'tty'