From 1b98b622030280c94ebfdee5b4fb9bcc05e03464 Mon Sep 17 00:00:00 2001 From: Sergio Lopez Date: Mon, 2 Feb 2026 22:53:35 +0100 Subject: [PATCH] Support running games on Asahi Linux In Asahi Linux, since the host operates with 16K pages, x86_64 software needs to run in a 4K page microVM managed by muvm [1]. In practice, this means faugus-launcher can normally on the host, but faugus-run needs to run through muvm to ensure it operates in within the context of the microVM. This can be easily achieved by having faugus-run to re-exec itself under muvm when running under Asahi Linux. This doesn't have an impact on non-Asahi systems, other than the cost of checking the DT to identify the machine type which should be unnoticiable. [1] https://docs.fedoraproject.org/en-US/fedora-asahi-remix/x86-support/ Signed-off-by: Sergio Lopez --- faugus_run.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/faugus_run.py b/faugus_run.py index d31d0a2..59e6a7c 100644 --- a/faugus_run.py +++ b/faugus_run.py @@ -10,6 +10,7 @@ import time import shlex import gettext import signal +import shutil gi.require_version("Gtk", "3.0") @@ -798,7 +799,31 @@ def update_games_and_config(): if changed: config_path.write_text("\n".join(new_lines) + "\n", encoding="utf-8") +def is_apple_silicon(): + path = "/proc/device-tree/compatible" + + if not os.path.exists(path): + return False + + try: + with open(path, "rb") as f: + dtcompat = f.read().decode('utf-8', errors='ignore') + + if "apple,arm-platform" in dtcompat: + return True + else: + return False + except: + return False + def main(): + if is_apple_silicon() and 'FAUGUS_MUVM' not in os.environ: + muvm_path = shutil.which('muvm') + if muvm_path: + env = os.environ.copy() + args = [muvm_path, "-i", "-e", "FAUGUS_MUVM=1", sys.executable, os.path.abspath(__file__)] + os.execvpe(muvm_path, args + sys.argv[1:], env) + apply_dark_theme() update_games_and_config()