检测 X11 与 Wayland 的有效方法,最好使用 CMake

Effective way of detecting X11 vs Wayland, preferrably with CMake

因此,我进行了一些 Google 搜索,而这方面的知识很少。什么是检测是否正在使用 X11 或 Wayland 的有效且万无一失的方法,最好是在编译时使用 CMake?我需要将它应用到我的一个 C++ 项目中。

我假设您想在编译期间调用 CMake 时而不是每次编译时评估显示服务器。这就是 CMake 的工作方式,应该使用它。一个缺点是,您必须为每个更改的显示服务器重新运行 CMake。

目前没有检测 运行ning 显示服务器的默认方法。类似的,CMake 也没有默认的代码片段来评估显示服务器。只需选择分别为您或您的环境手动工作的 one way of detecting the display 服务器。

从 CMake 调用此代码并将结果存储在一个变量中,并将其用于您的 C++ 代码。

例如 loginctl show-session $(loginctl | grep $(whoami) | awk '{print }') -p Type 适合我。结果 CMake 检查是

execute_process(
    "loginctl show-session $(loginctl | grep $(whoami) | awk '{print }') -p Type"
    OUTPUT_VARIABLE result_display_server)
if ("${resulting_display_server}" EQUALS "Type=x11")
   set(display_server_x11 TRUE)
else()
   set(display_server_x11 FALSE)
endif()

可能您必须 fiddle 考虑条件并检查 Type=wayland 或类似的东西以使其在您的环境中正常工作。

您可以使用 display_server_x11 在 C++ 代码中使用它。