diff --git a/scripts/snap-wrapper.sh b/scripts/snap-wrapper.sh index 7524225..60877db 100755 --- a/scripts/snap-wrapper.sh +++ b/scripts/snap-wrapper.sh @@ -33,4 +33,8 @@ if [ -e "$SNAP_COMMON"/.enable_debug ]; then export ANBOX_LOG_LEVEL=debug fi +if [ "$(snapctl get software-rendering.enable)" = true ]; then + export ANBOX_FORCE_SOFTWARE_RENDERING=true +fi + exec $SNAP/usr/bin/anbox $@ diff --git a/src/anbox/cmds/launch.cpp b/src/anbox/cmds/launch.cpp index c6c9e2b..a8de408 100644 --- a/src/anbox/cmds/launch.cpp +++ b/src/anbox/cmds/launch.cpp @@ -57,6 +57,10 @@ static int redirect_to_null(int flags, int fd) { bool anbox::cmds::Launch::launch_session_manager() { std::vector args = {"session-manager"}; + const auto should_force_software_rendering = utils::get_env_value("ANBOX_FORCE_SOFTWARE_RENDERING", "false"); + if (should_force_software_rendering == "true") + args.push_back("--software-rendering"); + std::map env; core::posix::this_process::env::for_each([&](const std::string &name, const std::string &value) { env.insert({name, value}); diff --git a/src/anbox/cmds/session_manager.cpp b/src/anbox/cmds/session_manager.cpp index 4518382..5ea1cc0 100644 --- a/src/anbox/cmds/session_manager.cpp +++ b/src/anbox/cmds/session_manager.cpp @@ -172,8 +172,9 @@ anbox::cmds::SessionManager::SessionManager() using_single_window = true; } + const auto should_force_software_rendering = utils::get_env_value("ANBOX_FORCE_SOFTWARE_RENDERING", "false"); auto gl_driver = graphics::GLRendererServer::Config::Driver::Host; - if (use_software_rendering_) + if (should_force_software_rendering == "true" || use_software_rendering_) gl_driver = graphics::GLRendererServer::Config::Driver::Software; graphics::GLRendererServer::Config renderer_config {