From 2b211e1ce6f449b770082765dfbd3d7b9ffd2bd9 Mon Sep 17 00:00:00 2001 From: Matija Kecman Date: Thu, 23 Apr 2026 08:02:05 -0700 Subject: [PATCH] Detect wayland sessions and report a clear error prompting users to switch to X11 or choose a different graphics mode PiperOrigin-RevId: 904460146 Change-Id: I9324f403cb09787833c06f863ac157059eea60e7 --- src/experimental/platform/hal/window.cc | 1 + src/experimental/studio/main.cc | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/experimental/platform/hal/window.cc b/src/experimental/platform/hal/window.cc index faf9a6d1..84941444 100644 --- a/src/experimental/platform/hal/window.cc +++ b/src/experimental/platform/hal/window.cc @@ -16,6 +16,7 @@ #include #include +#include #include #include #include diff --git a/src/experimental/studio/main.cc b/src/experimental/studio/main.cc index 9d48834f..ca84aa4f 100644 --- a/src/experimental/studio/main.cc +++ b/src/experimental/studio/main.cc @@ -75,7 +75,7 @@ class FileResource { int main(int argc, char** argv, char** envp) { absl::ParseCommandLine(argc, argv); - const char* home = getenv("HOME"); + const char* home = std::getenv("HOME"); const std::string ini_path = std::string(home ? home : ".") + "/.mujoco.ini"; mjpResourceProvider resource_provider; @@ -103,6 +103,20 @@ int main(int argc, char** argv, char** envp) { std::string gfx = absl::GetFlag(FLAGS_gfx); + const char* session_type = std::getenv("XDG_SESSION_TYPE"); + const char* wayland_display = std::getenv("WAYLAND_DISPLAY"); + if ((session_type && std::string_view(session_type) == "wayland") || + wayland_display) { + if (gfx.empty()) { + gfx = "opengl_headless"; + } else if (gfx == "classic" || gfx == "opengl") { + mju_error( + "Wayland does not support '%s' graphics mode. " + "Restart with a different graphics mode, or login using X11.", + gfx.c_str()); + } + } + mujoco::platform::GraphicsMode gfx_mode = mujoco::platform::GraphicsModeFromString( gfx, mujoco::platform::GraphicsMode::FilamentOpenGl);