diff --git a/docs/api/environment-variables.md b/docs/api/environment-variables.md index ba3d5cf99e6d..fa6d1e13fcc4 100644 --- a/docs/api/environment-variables.md +++ b/docs/api/environment-variables.md @@ -111,6 +111,16 @@ Options: * `kioclient5` * `kioclient` +### `ELECTRON_OZONE_PLATFORM_HINT` _Linux_ + +Selects the preferred platform backend used on Linux. The default one is `x11`. `auto` selects Wayland if possible, X11 otherwise. + +Options: + +* `auto` +* `wayland` +* `x11` + ## Development Variables The following environment variables are intended primarily for development and diff --git a/shell/browser/electron_browser_main_parts_linux.cc b/shell/browser/electron_browser_main_parts_linux.cc index 2ad25d311651..49408910c880 100644 --- a/shell/browser/electron_browser_main_parts_linux.cc +++ b/shell/browser/electron_browser_main_parts_linux.cc @@ -15,6 +15,9 @@ #include "shell/common/thread_restrictions.h" #endif +constexpr base::StringPiece kElectronOzonePlatformHint( + "ELECTRON_OZONE_PLATFORM_HINT"); + #if BUILDFLAG(OZONE_PLATFORM_WAYLAND) constexpr char kPlatformWayland[] = "wayland"; @@ -115,17 +118,20 @@ std::string MaybeFixPlatformName(const std::string& ozone_platform_hint) { } // namespace void ElectronBrowserMainParts::DetectOzonePlatform() { + auto const env = base::Environment::Create(); auto* const command_line = base::CommandLine::ForCurrentProcess(); if (!command_line->HasSwitch(switches::kOzonePlatform)) { - const auto ozone_platform_hint = + auto ozone_platform_hint = command_line->GetSwitchValueASCII(switches::kOzonePlatformHint); + if (ozone_platform_hint.empty()) { + env->GetVar(kElectronOzonePlatformHint, &ozone_platform_hint); + } if (!ozone_platform_hint.empty()) { command_line->AppendSwitchASCII( switches::kOzonePlatform, MaybeFixPlatformName(ozone_platform_hint)); } } - auto env = base::Environment::Create(); std::string desktop_startup_id; if (env->GetVar("DESKTOP_STARTUP_ID", &desktop_startup_id)) command_line->AppendSwitchASCII("desktop-startup-id", desktop_startup_id);