3

所以我做了一些谷歌搜索,这是一些知识很少的东西。什么是检测 X11 或 Wayland 是否正在使用的有效且万无一失的方法,最好是在编译时和使用 CMake?我需要将此应用于我的 C++ 项目。

4

1 回答 1

1

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

当前没有检测正在运行的显示服务器的默认方法。类似地,CMake 没有用于评估显示服务器的默认代码片段。只需选择一种方法来检测分别为您或您的环境手动工作的显示服务器。

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

例如loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type对我有用。生成的 CMake 检查是

execute_process(
    "loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -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()

可能你必须摆弄条件并检查Type=wayland或类似的东西才能让它在你的环境中正常工作。

您可以使用它display_server_x11并将其写入config.h文件以在 C++ 代码中使用它。

于 2017-07-17T21:26:13.610 回答