diff --git a/src/backend.cpp b/src/backend.cpp index a6deb0edda..98e7576561 100644 --- a/src/backend.cpp +++ b/src/backend.cpp @@ -15,6 +15,8 @@ extern bool g_bAllowDeferredBackend; namespace gamescope { + ConVar cv_backend( "backend", "auto", "Override the backend selection (auto-detected or specified on the command line)." ); + ConVar cv_backend_virtual_connector_strategy( "backend_virtual_connector_strategy", VirtualConnectorStrategies::SingleApplication ); ///////////// diff --git a/src/backend.h b/src/backend.h index a4b3926da9..880aa97240 100644 --- a/src/backend.h +++ b/src/backend.h @@ -31,6 +31,8 @@ namespace gamescope class BackendBlob; class INestedHints; + extern ConVar cv_backend; + namespace VirtualConnectorStrategies { enum VirtualConnectorStrategy : uint32_t @@ -504,4 +506,3 @@ inline gamescope::IBackend *GetBackend() { return gamescope::IBackend::Get(); } - diff --git a/src/main.cpp b/src/main.cpp index 441879410d..446dacb81b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -908,6 +908,14 @@ int main(int argc, char **argv) g_pOriginalDisplay = getenv("DISPLAY"); g_pOriginalWaylandDisplay = getenv("WAYLAND_DISPLAY"); + // Allow overriding the selected backend (even the backend + // requested on the command line) in a startup script. + auto backendOverride = parse_backend_name( gamescope::cv_backend.Get().c_str() ); + if ( backendOverride != gamescope::GamescopeBackend::Auto ) + { + eCurrentBackend = backendOverride; + } + if ( eCurrentBackend == gamescope::GamescopeBackend::Auto ) { if ( g_pOriginalWaylandDisplay != NULL )