我怎么知道Linux系统是否使用Wayland或X11?

Sha*_*gon 6 c++ linux x11 wayland c++14

用过的语言

我正在使用C++ 14和cmake来完成我的程序.

问题:

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

注意:我知道有XWayland,但是我想使用原生的X11和原生的Wayland而不喜欢XWayland.

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

skr*_*skr 8

使用环境变量 XDG_SESSION_TYPE

在 x11

echo $XDG_SESSION_TYPE
x11
Run Code Online (Sandbox Code Playgroud)

在路上

$ echo $XDG_SESSION_TYPE
wayland
Run Code Online (Sandbox Code Playgroud)

  • 这不是我所说的可靠。 (4认同)
  • 这不起作用,有时你会得到“tty”,这没有帮助。 (3认同)
  • 例如,我在 Windows 上使用 PuTTY 登录到我的 Linux 系统,并且我的 X11 `DISPLAY` 设置为 `localhost:10.0`。它在 XMing 运行时工作得很好。但是`XDG_SESSION_TYPE` 没有设置为任何东西。我没有任何类型的 XDG 变量集。 (2认同)
  • 不正确!如果您不使用显示管理器,那么使用其中任何一个时您都会得到“tty”。 (2认同)

Zan*_*ynx 7

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

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

  • @ShadowDragon:未设置 XDG 变量,因为我不在桌面会话中。我将使用 SSH 隧道进行远程访问。SSH 可以提供 X11 代理,它将代理地址放在“localhost:10.0” (2认同)