diff --git a/umu/umu_run.py b/umu/umu_run.py index fef85b070..be55df98a 100755 --- a/umu/umu_run.py +++ b/umu/umu_run.py @@ -225,7 +225,6 @@ def set_env( if is_createpfx: env["EXE"] = "" env["STEAM_COMPAT_INSTALL_PATH"] = "" - env["PROTON_VERB"] = "run" elif is_winetricks: # Make an absolute path to winetricks within GE-Proton or UMU-Proton. # The launcher will change to the winetricks parent directory before @@ -236,7 +235,6 @@ def set_env( env["EXE"] = str(exe) args = (env["EXE"], args[1]) # type: ignore env["STEAM_COMPAT_INSTALL_PATH"] = str(exe.parent) - env["PROTON_VERB"] = "run" elif is_cmd: try: # Ensure executable path is absolute, otherwise Proton will fail @@ -337,6 +335,7 @@ def build_command( opts: list[str] = [], ) -> tuple[Path | str, ...]: """Build the command to be executed.""" + shim: Path = local.joinpath("umu-shim") proton: Path = Path(env["PROTONPATH"], "proton") entry_point: Path = local.joinpath("umu") @@ -375,6 +374,7 @@ def build_command( "--verb", env["PROTON_VERB"], "--", + shim, proton, env["PROTON_VERB"], env["EXE"], diff --git a/umu/umu_runtime.py b/umu/umu_runtime.py index 556bd2b67..a67219e3e 100644 --- a/umu/umu_runtime.py +++ b/umu/umu_runtime.py @@ -33,6 +33,34 @@ has_data_filter: bool = False +def create_shim(file_path=None): + # Set the default path if none is provided + if file_path is None: + file_path = UMU_LOCAL.joinpath("umu-shim") + # Define the content of the shell script + script_content = """#!/bin/sh + +if [ "${XDG_CURRENT_DESKTOP}" = "gamescope" ] || [ "${XDG_SESSION_DESKTOP}" = "gamescope" ]; then + # Check if STEAM_MULTIPLE_XWAYLANDS is set to 1 + if [ "${STEAM_MULTIPLE_XWAYLANDS}" = "1" ]; then + # Check if DISPLAY is set, if not, set it to ":1" + if [ -z "${DISPLAY}" ]; then + export DISPLAY=":1" + fi + fi +fi + +# Execute the passed command +"$@" +""" + + # Write the script content to the specified file path + with open(file_path, 'w') as file: + file.write(script_content) + + # Make the script executable + os.chmod(file_path, 0o755) + def _install_umu( json: dict[str, Any], thread_pool: ThreadPoolExecutor, @@ -177,6 +205,7 @@ def _install_umu( # Rename _v2-entry-point log.debug("Renaming: _v2-entry-point -> umu") UMU_LOCAL.joinpath("_v2-entry-point").rename(UMU_LOCAL.joinpath("umu")) + create_shim() # Validate the runtime after moving the files check_runtime(UMU_LOCAL, json) @@ -368,6 +397,9 @@ def _update_umu( rmtree(str(runtime)) log.debug("Released file lock '%s'", lock.lock_file) + if not UMU_LOCAL.joinpath("umu-shim").exists(): + create_shim() + log.console("steamrt is up to date") @@ -474,6 +506,9 @@ def check_runtime(src: Path, json: dict[str, Any]) -> int: return ret log.console(f"{runtime.name}: mtree is OK") + if not UMU_LOCAL.joinpath("umu-shim").exists(): + create_shim() + return ret @@ -491,3 +526,6 @@ def _restore_umu( return _install_umu(json, thread_pool, client_session) log.debug("Released file lock '%s'", lock.lock_file) + + if not UMU_LOCAL.joinpath("umu-shim").exists(): + create_shim()