I am using C++14 with cmake for my program.
I would like to know how I can find out if a Linux system uses Wayland or X11 as a window system to be able to use both APIs in my source code without conflict. Thus creating a window with Wayland when Wayland is available and otherwise use the X11 API.
Note: I know there is XWayland, but I want to use native X11 and native Wayland without something like XWayland.
EDIT: To clarify some things: I don't want to check for X11 or Wayland at compile-time, but instead at runtime, because then I just have to compile the code once and it doesn't require the user to think about which version to use.
X11 uses the DISPLAY
environment variable to find the X server. Wayland uses WAYLAND_DISPLAY
. Look for the Wayland variable first. Then if you don't find it or you can't connect go on to using X11.
Do not skip checking the WAYLAND_DISPLAY
variable or assume Wayland is running on "wayland-0". Some people want to use nested compositors, which you would bypass. Other people may be running Wayland but want to force X11 rendering by deleting the WAYLAND_DISPLAY variable.