Emulator settings
The environment variables each launcher reads, grouped by emulator. Paths default to where the emulator keeps its data inside the container.
Each emulator reads its settings once, when the broker starts up. Every path
below defaults to wherever that emulator normally keeps its own data inside
the container. HOME is set to /config, and the broker also sets
XDG_CONFIG_HOME and XDG_DATA_HOME (the standard Linux folders for an
app's settings and data) for the emulators that actually use them. That means
you shouldn't need to change any of these unless you've altered how the
container's folders are laid out. All the timing values in the tables below
are in seconds.
Shared
| Env var | Default | Purpose |
|---|---|---|
XDOTOOL_BIN | xdotool | The xdotool used to send hotkeys and window commands to Dolphin, PPSSPP, Flycast, RPCS3 and ScummVM. |
XDG_RUNTIME_DIR | /config/.XDG | Where PCSX2's PINE socket (pcsx2.sock) is looked for. |
DESKTOP_BIN | selkies-desktop | What the desktop type launches. |
DESKTOP_STOP_WAIT | 15 | SIGTERM grace before SIGKILL for the desktop session, and for every app left open on it. Longer than the base 5 s because it is mostly spent on those apps writing their config and save data on the way out. |
PCSX2
| Env var | Default | Purpose |
|---|---|---|
PCSX2_BIN | pcsx2-qt | PCSX2 binary. |
PCSX2_STATE_SLOT | 10 | The slot PCSX2 works in; 10 is its own autosave slot, which the per-emulator broker also used. |
PCSX2_SLOT1_CARD | romm-slot1 | Name of the Slot 1 folder memory card the broker owns (a directory, no .ps2 extension). |
PCSX2_LOG_PATH | /config/pcsx2-qt.log | Where PCSX2's stdout/stderr is captured. |
PCSX2_PATCHES_FETCH | true | Fetch PCSX2's game-patch bundle (patches.zip) from PCSX2/pcsx2_patches before a launch. Set false with no route to GitHub. |
PINE_WAIT | 20.0 | How long a save state has to land on disk after the PINE save command. |
RESUME_LOAD_WAIT | 90.0 | How long a resume load waits for PCSX2 to report a running game. |
RESUME_LOAD_SETTLE | 3.0 | How long the game has to be running before the resume load fires. |
PCSX2_RESUME_STATE_WAIT | 60.0 | How long a booted game waits for the resume state to arrive. RomM pushes it after activate returns, so this is its own budget rather than what's left of the boot wait. |
PCSX2's data folder isn't configurable here. Everything (inis/PCSX2.ini,
sstates/, memcards/) lives under /config/.config/PCSX2.
The Ubuntu PCSX2 package ships without patches.zip, the bundle of
widescreen and compatibility patches PCSX2 applies per game, and PCSX2 only
reads it from /usr/share/PCSX2/resources/. Before each launch the broker
downloads it from the latest release of PCSX2/pcsx2_patches when it is
missing, invalid, or older than a week, checks the download is a valid zip of
.pnach patches, and moves it into place with sudo. A missing or invalid
bundle is fetched before the game starts, which can hold a launch for up to
about a minute; a week-old one is refreshed in the background. A failed
fetch is logged and the game boots with whatever bundle is there, or none.
DuckStation
| Env var | Default | Purpose |
|---|---|---|
DUCKSTATION_BIN | /opt/duckstation/AppRun | DuckStation binary. |
DUCKSTATION_LOG_PATH | /config/duckstation.log | Where DuckStation's stdout/stderr is captured. |
DUCKSTATION_STOP_WAIT | 30 | SIGTERM grace before SIGKILL; the graceful shutdown serialises the resume state. |
DuckStation's data folder isn't configurable here either. Everything
(settings.ini, savestates/, the memory cards) lives under
/config/.local/share/duckstation.
Dolphin
| Env var | Default | Purpose |
|---|---|---|
DOLPHIN_BIN | dolphin-emu | Dolphin binary. |
DOLPHIN_LOG_PATH | /config/dolphin.log | Where Dolphin's stdout/stderr is captured. |
DOLPHIN_STATE_SLOT | 1 | The slot Dolphin works in (Shift+Fn saves it, Fn loads it). |
DOLPHIN_STATE_WAIT | 20.0 | How long a save state has to land on disk after the save hotkey. |
DOLPHIN_RESUME_LOAD_WAIT | 90.0 | How long a resume load waits for the render window. |
DOLPHIN_RESUME_LOAD_SETTLE | 5.0 | How long the window has to be up before the load hotkey is sent. |
DOLPHIN_LOAD_WAIT | 20.0 | How long Dolphin has to read the state back after the load hotkey. |
DOLPHIN_LOAD_SETTLE | 2.0 | How long a load gets to deserialize after the state file has been read. Nothing marks the end of the deserialize, so this is a bounded guess. |
DOLPHIN_PAD_NAME | Xbox 360 Controller | The selkies virtual pad's name as Dolphin's SDL backend presents it, used in the seeded GCPadNew.ini bindings. |
Dolphin's folders aren't configurable here either. Config (GCPadNew.ini and
the rest) lives under /config/.config/dolphin-emu, and save data
(StateSaves/, GC/, Wii/) lives under /config/.local/share/dolphin-emu.
A desktop session opens Dolphin using these same folders, so if you rebind a
controller there, that change also applies to broker-launched games.
Cemu
| Env var | Default | Purpose |
|---|---|---|
CEMU_BIN | Cemu | Cemu binary. |
CEMU_MLC_DIR | $XDG_DATA_HOME/Cemu/mlc01 | The mlc01 tree saves are dumped from, passed to Cemu as -m on every launch. |
CEMU_LOG_PATH | /config/cemu.log | Where Cemu's stdout/stderr is captured. |
CEMU_PAD_NAME | Microsoft X-Box 360 pad | The selkies virtual pad's name as the kernel xpad driver presents it, used to derive the SDL GUIDs the controller profile binds. |
CEMU_PAD_UUIDS | unset | Comma separated <index>_<guid> list to bind instead of the derived ones. |
CEMU_STOP_WAIT | 5 | SIGTERM grace before SIGKILL (Cemu has no SIGTERM handler, so this only covers process-group teardown). |
Cemu's config folder isn't configurable here. It's /config/.config/Cemu. If
you want to move Cemu's save data instead, use CEMU_MLC_DIR above: that one
does get passed to Cemu directly, so both sides actually use it.
Azahar
| Env var | Default | Purpose |
|---|---|---|
AZAHAR_BIN | /opt/azahar/AppRun | Azahar binary. |
AZAHAR_LOG_PATH | /config/azahar.log | Where Azahar's stdout/stderr is captured. |
AZAHAR_STOP_WAIT | 5 | SIGTERM grace before SIGKILL (no SIGTERM handler, process-group teardown only). |
Azahar's folders aren't configurable here either. Config (qt-config.ini)
lives under /config/.config/azahar-emu, and user data (sdmc/, nand/)
lives under /config/.local/share/azahar-emu.
Eden
| Env var | Default | Purpose |
|---|---|---|
EDEN_BIN | eden | Eden binary. |
EDEN_LOG_PATH | /config/eden.log | Where Eden's stdout/stderr is captured. |
EDEN_STOP_WAIT | 15 | SIGTERM grace before SIGKILL; a running game takes longer than the base 5 s to tear down. |
Eden's folders aren't configurable here either. Config (qt-config.ini)
lives under /config/.config/eden, and data (the virtual NAND, sdmc/)
lives under /config/.local/share/eden.
shadPS4
| Env var | Default | Purpose |
|---|---|---|
SHADPS4_BIN | unset | Explicit shadPS4 binary; skips the version search. |
SHADPS4_VERSIONS_DIR | /config/.local/share/shadPS4QtLauncher/versions | Where the Qt launcher downloads builds, one folder per release; Pre-release/ trumps the newest semver folder. |
SHADPS4_BIN_NAME | Shadps4-sdl.AppImage | The binary looked for inside each version folder. |
SHADPS4_LOG_PATH | /config/shadps4.log | Where shadPS4's stdout/stderr is captured. |
SHADPS4_STOP_WAIT | 20 | How long the IPC STOP gets to finish before SIGTERM. |
SHADPS4_PKG_EXTRACTOR_BIN | pkg_extractor | The standalone pkg_extractor binary a .pkg ROM (or a .7z/.zip/.rar archive holding one) is unpacked with; requires unrar and 7z on PATH too when the ROM is an archive. |
SHADPS4_PKG_EXTRACT_TIMEOUT | 1800 | Seconds a pkg_extractor (or archive extraction) run gets before it is considered hung. |
SHADPS4_CACHE_ENABLED | false | Whether .pkg and .7z/.zip/.rar ROMs boot at all. On, the first launch extracts one into SHADPS4_CACHE_DIR and every later launch reuses that extraction. Off, such a ROM is refused outright rather than re-extracted and thrown away on every launch; only natively bootable formats work. |
SHADPS4_CACHE_DIR | $XDG_DATA_HOME/shadPS4/extracted | Where a kept extraction is cached, when SHADPS4_CACHE_ENABLED is on. Broker-owned scratch, written and read by the broker alone, so moving it moves the whole of it. |
SHADPS4_CACHE_MAX_GB | 30 | Ceiling on the cache's total size; the oldest extraction is evicted first once a new one would exceed it. A ROM that still doesn't fit once there is nothing left to evict, or that exceeds the free space on the filesystem, is refused at activate rather than extracted until the disk fills. |
SHADPS4_PKG_EXPANSION_FACTOR | 1.1 | Assumed extracted-to-.pkg size ratio for the free-space check. A .pkg is already compressed per file, so its output lands close to its own size. |
SHADPS4_ARCHIVE_PEAK_FACTOR | 2.2 | Assumed peak disk use relative to an archived .pkg's size, since the unpacked .pkg and its extraction sit on disk at the same time. |
SHADPS4_CACHE_LOCK_WAIT | 120 | How long a launch waits for another extraction to release the cache before giving up. |
SHADPS4_GPU_ID | auto | Which Vulkan device shadPS4 renders on. shadPS4's own -1 auto-select can land on a software rasterizer, which renders a black screen while the game otherwise runs. auto detects the best real GPU; an integer pins that device index directly; -1 or KEEP leaves config.json alone. |
SHADPS4_VULKANINFO_BIN | vulkaninfo | The binary SHADPS4_GPU_ID=auto enumerates devices with. If it is missing or fails, no pin is written and shadPS4 keeps its own setting. |
shadPS4's data folder isn't configurable here. It's
/config/.local/share/shadPS4. config.json (where the GPU pin above gets
written) sits at the root of that folder, and saves live under
home/1000/savedata/ inside it.
RetroArch
| Env var | Default | Purpose |
|---|---|---|
RETROARCH_BIN | retroarch | RetroArch binary. |
RETROARCH_CONFIG_DIR | RetroArch's own search order: $XDG_CONFIG_HOME/retroarch, else $HOME/.config/retroarch, else the legacy $HOME/.retroarch.cfg | Where the user's retroarch.cfg lives. Passed to RetroArch as --config on every launch, so moving it moves the file both read. |
RETROARCH_CORES_DIR | libretro_directory from retroarch.cfg, else cores under RetroArch's own root (/config/.config/retroarch/cores) | Where cores are loaded from and downloaded into. The broker puts each core's .info file beside it and points RetroArch's libretro_directory and libretro_info_path here for the session, since a core loaded without its core info crashes RetroArch on a status check. |
RETROARCH_SYSTEM_DIR | system_directory from retroarch.cfg, else system under RetroArch's own root (/config/.config/retroarch/system) | Where cores look for BIOS files and firmware. Written into the broker.cfg overlay as system_directory on every launch, so moving it moves the directory both use. |
RETROARCH_CORES_BASE_URL | https://buildbot.libretro.com/nightly/linux/x86_64/latest | Where missing cores are downloaded from. |
RETROARCH_CORE_URL_<CORE> | unset | Pins one core's download URL without editing retroarch_platforms.json. |
GITHUB_API_BASE | https://api.github.com | API base for cores whose platform entry names a GitHub release source. |
GITHUB_TOKEN | unset | Bearer token for those GitHub release lookups. |
RETROARCH_CORE_DOWNLOAD_TIMEOUT | 180 | Timeout on a core download. |
RETROARCH_EXPERIMENTAL_CORES | false | Container-wide opt-in to launch a core the tier table lists as blocked; RomM's own experimental_cores: true lifts the same block. |
RETROARCH_CORE_INFO_REFRESH | false | Keep the bundled core-info catalog current with upstream in the background, at most every 7 days. A failed refresh is retried an hour later. |
RETROARCH_CORE_INFO_URL | https://buildbot.libretro.com/assets/frontend/info.zip | Where a refresh downloads the core-info zip from. |
RETROARCH_CORE_INDEX_URL | https://buildbot.libretro.com/nightly/linux/x86_64/latest/.index | Where a refresh downloads the x86_64 build index from. |
RETROARCH_DATA_DIR | /config/.retroarch | Broker-managed states/, saves/ and the broker.cfg layered on with --appendconfig. |
RETROARCH_MSU1_CACHE_ENABLED | true | Whether a zipped MSU-1 SNES or Super Famicom game is extracted before it boots. Snes9x reads a game's .msu data and -N.pcm audio tracks from beside the ROM on disk, so a zip handed to RetroArch boots without its MSU-1 music and video. The first launch extracts the archive into RETROARCH_MSU1_CACHE_DIR, renames the ROM and its tracks after the zip so saves and states keep their names, and every later launch reuses it. A zip with no .msu or .pcm member boots as before. Off, or when the extraction fails, the zip boots as is, without the MSU-1 data. |
RETROARCH_MSU1_CACHE_DIR | $RETROARCH_DATA_DIR/msu1 | Where a kept MSU-1 extraction is cached. Broker-owned scratch, outside the save archive. |
RETROARCH_MSU1_CACHE_MAX_GB | 20 | Ceiling on the cache's total size; the least recently booted game is evicted first once a new one would exceed it. A game that still doesn't fit, or exceeds the free space on the filesystem, boots from its zip instead. |
RETROARCH_LOG_PATH | /config/retroarch.log | Where RetroArch's stdout/stderr is captured. |
RETROARCH_JOYPAD_DRIVER | linuxraw | Joypad driver forced at launch; the udev driver sees the selkies pads as one device plugged eight times. Set empty to leave the user's own driver alone. |
RETROARCH_STATE_SLOT | 0 | The slot RetroArch works in; 0 is its default, so the player's own load hotkey reaches the same file. -1 works in the auto slot, <content>.state.auto, instead, and is the lowest value taken: the broker does not start on a lower one. |
RETROARCH_SLOT_STEP_DELAY | 0.1 | Pause between slot presses while parking the slot. |
RETROARCH_MENU_SETTLE | 0.5 | Pause after a MENU_TOGGLE the broker sends to close an open menu, before the retried save or a disc swap's check save. |
RETROARCH_MENU_COMBO | 2 | RetroArch's gamepad combo for opening the menu, as its index in RetroArch's list (2 is L3 + R3). Only written when retroarch.cfg sets no combo of its own (the key missing, or 0); 0 here writes none. RetroArch reads it from every player's gamepad, so any player can open the menu. |
RETROARCH_SLOT_HOME_STEPS | 24 | Slot-down presses to reach the -1 floor from anywhere the player could have cycled to. |
RETROARCH_STATE_CONFIRM_WAIT | 10.0 | How long a save state has to land on disk after SAVE_STATE. |
RETROARCH_LOAD_ACK_WAIT | 10.0 | How long LOAD_STATE_SLOT has to be acknowledged. |
RETROARCH_LOAD_CONFIRM_WAIT | 10.0 | How long RetroArch gets to actually read the state file after acknowledging the load. The acknowledgement only means the command was parsed. |
RETROARCH_LOAD_LOCK_WAIT | 30.0 | How long a manual load waits for an in-flight resume load or disc swap to finish. |
RETROARCH_LOAD_TAINT_RETRY_LIMIT | 2 | Extra attempts a load gets when another read of the state file landed during its read check and made that check unreliable. |
RETROARCH_STATE_HANDOUT_GRACE | 2.0 | How long after a state file is handed out (for example to the state-file GET route) a read of it is not trusted as the core's own. |
RETROARCH_SAVE_LOCK_WAIT | 30.0 | How long a save waits for an in-flight resume load or disc swap, rather than writing the pre-resume state. |
RETROARCH_EXIT_SAVE_LOCK_WAIT | 3.0 | The same wait for the save at exit, kept short because exit holds the session lock the whole time. |
RETROARCH_FIRST_SAVE_SETTLE | 3.0 | How long a session's first save waits after the game starts running, so a fast-booting core isn't saved mid boot logo. |
RETROARCH_FIRST_SAVE_SETTLE_WAIT | 20.0 | How long that first save waits to see the game start running at all. |
RETROARCH_RESUME_WAIT | 90.0 | How long a resume load waits for the core to report a running game. |
RETROARCH_RESUME_SETTLE | 3.0 | How long the game has to be running before the resume load fires. |
RETROARCH_RESUME_RETRY_GAP | 2.0 | Pause between resume load attempts when the core acknowledged a load but never read the state. |
RETROARCH_RESUME_LOCK_WAIT | 15.0 | How long one resume load attempt waits for an in-flight save or disc swap. |
RETROARCH_SAVE_FILES_WAIT | 10.0 | How long SAVE_FILES (flush SRAM to disk) has to answer at exit. |
RETROARCH_QUIT_WAIT | 10.0 | How long QUIT gets to finish before SIGTERM. |
RETROARCH_QUIT_CONFIRM_GAP | 0.1 | Gap before the second QUIT, for configs that ask for confirmation. |
RETROARCH_DISC_TRAY_SETTLE | 1.5 | Pause after opening the tray before changing the disc index; an index change during the open is silently dropped. |
RETROARCH_DISC_STEP_DELAY | 0.1 | Pause between disc index presses. |
RETROARCH_DISC_SWAP_WAIT | 90.0 | How long a swap waits for the core to report a running game. |
RETROARCH_OBSERVE_WINDOW_BEFORE_SLACK | 2.0 | Seconds before launch a save or state write still counts when the broker looks for the directory an untested core actually saves into. Covers mounts (SMB, FAT) that round a file's mtime to a coarse unit. |
RETROARCH_OBSERVE_WINDOW_AFTER_SLACK | 30.0 | Seconds past the broker's own clock a write's mtime may sit and still count for that same lookup, to absorb clock skew between the share and the broker. A file dated further ahead is ignored. |
RETROARCH_STOP_WAIT | 15 | SIGTERM grace before SIGKILL once QUIT has been tried. |
RPCS3
| Env var | Default | Purpose |
|---|---|---|
RPCS3_BIN | /opt/rpcs3/AppRun | RPCS3 binary. |
RPCS3_LOG_PATH | /config/rpcs3.log | Where RPCS3's stdout/stderr is captured. |
RPCS3_INSTALL_TIMEOUT | 1800 | How long a PKG install may run; decryption of a multi-GB package takes minutes. |
RPCS3_BOOT_WAIT | 90.0 | How long the boot watchdog waits for PINE to report a running game before the launch is flagged boot_failed. |
RPCS3_STATE_WAIT | 60.0 | How long the exit-time save-state hotkey has to finish writing before the broker gives up on it; a full state (compressed RAM and VRAM) is a heavier write than the other cores' states. |
RPCS3_SAVE_STATE_KEY | ctrl+alt+1 | The save-state hotkey sent to trigger an exit-time save. RPCS3's four save-state shortcuts are equivalent and this one is GUI-rebindable, hence configurable here too. |
RPCS3_CACHE_ENABLED | false | Whether .7z/.zip/.rar ROMs boot at all. On, the first launch extracts one into RPCS3_CACHE_DIR and every later launch reuses that extraction. Off, an archive ROM is refused outright rather than re-extracted and thrown away on every launch. .pkg is unaffected either way: it always installs through its own always-on installer. |
RPCS3_CACHE_DIR | $XDG_CONFIG_HOME/rpcs3/extracted | Where a kept extraction is cached, when RPCS3_CACHE_ENABLED is on. Broker-owned scratch, written and read by the broker alone, so moving it moves the whole of it. |
RPCS3_CACHE_MAX_GB | 30 | Ceiling on the cache's total size; the oldest extraction is evicted first once a new one would exceed it. An archive that still doesn't fit once there is nothing left to evict, or that exceeds the free space on the filesystem, is refused at activate rather than extracted until the disk fills. |
RPCS3_ARCHIVE_EXPANSION | 4.0 | Assumed unpacked-to-archive size ratio, used by the free-space check only when the archive's file listing can't be read. |
RPCS3_STOP_WAIT | 2 | SIGTERM grace before SIGKILL (no SIGTERM handler, covers the AppImage wrapper teardown). |
RPCS3's data folder isn't configurable here either. On Linux, everything
(config.yml, dev_flash/, dev_hdd0/ and the save states) lives under
/config/.config/rpcs3.
xemu
| Env var | Default | Purpose |
|---|---|---|
XEMU_BIN | /opt/xemu/AppRun | xemu binary. |
XEMU_TOML | /config/.local/share/xemu/xemu/xemu.toml | xemu's config, read for the HDD image path and pinned for the renderer. Passed to xemu as -config_path on every launch, so moving it moves the file both read. |
XEMU_HDD_IMAGE | /config/xemu/xbox_hdd.qcow2 | HDD image used only when xemu.toml has no usable hdd_path. |
XEMU_RENDERER | OPENGL | Renderer pinned in xemu.toml before each launch; VULKAN where the driver is known good, KEEP to leave the file alone. |
XEMU_SOFTWARE_GL | unset | Truthy renders xemu on the CPU (LIBGL_ALWAYS_SOFTWARE for xemu only); slow, for hosts where both GPU paths abort. |
XEMU_LOG_PATH | /config/xemu.log | Where xemu's stdout/stderr is captured. |
XEMU_STOP_WAIT | 15 | SIGTERM grace before SIGKILL; QEMU's clean shutdown flushes the HDD image the save extraction reads. |
XEMU_STRAY_TERM_WAIT | 5 | Grace a leftover xemu process from an earlier session gets to exit cleanly (flushing the HDD image) before SIGKILL. |
PPSSPP
| Env var | Default | Purpose |
|---|---|---|
PPSSPP_BIN | PPSSPPQt | PPSSPP binary. |
PPSSPP_LOG_PATH | /config/ppsspp.log | Where PPSSPP's stdout/stderr is captured. |
PPSSPP_STATE_SLOT | 1 | The slot PPSSPP works in. |
PPSSPP_STATE_WAIT | 20.0 | How long a save state has to land on disk after the save hotkey. |
PPSSPP_RESUME_LOAD_WAIT | 90.0 | How long a resume load waits for the game window. |
PPSSPP_RESUME_LOAD_SETTLE | 12.0 | How long the window has to be up before the load hotkey is sent. |
PPSSPP_STATE_STABLE | 1.5 | How long a state's size and mtime must both hold still before it counts as written. |
PPSSPP_LOAD_WAIT | 20.0 | How long PPSSPP has to read the state back after the load hotkey. |
PPSSPP_LOAD_SETTLE | 2.0 | How long a load gets to deserialize after the state file has been read. Nothing marks the end of the deserialize, so this is a bounded guess. |
PPSSPP_CACHE_ENABLED | false | Whether .7z/.zip/.rar ROMs boot. PPSSPP can't boot from inside an archive, so the first launch extracts one into PPSSPP_CACHE_DIR and every later launch reuses that extraction. Off, an archived ROM is refused. |
PPSSPP_CACHE_DIR | $XDG_DATA_HOME/ppsspp/extracted | Where a kept extraction is cached. Broker-owned scratch, written and read by the broker alone. |
PPSSPP_CACHE_MAX_GB | 20 | Ceiling on the cache's total size; the oldest extraction is evicted first once a new one would exceed it. An archive that still doesn't fit, or that exceeds the free space on the filesystem, is refused rather than extracted until the disk fills. |
PPSSPP's config folder isn't configurable here either. It's
/config/.config/ppsspp. PPSSPP's emulated memory stick lives inside it as
PSP/, holding SYSTEM/ppsspp.ini, SAVEDATA/, and PPSSPP_STATE/
together.
Xenia
| Env var | Default | Purpose |
|---|---|---|
XENIA_BIN | /opt/xenia/AppRun | Xenia Edge binary. |
XENIA_DATA_DIR | /config/xenia | Xenia's --storage_root: config, cache, the signed-in profile and the content/ tree the save archive ships. |
XENIA_LOG_PATH | /config/xenia.log | Where Xenia's stdout/stderr is captured. |
Flycast
| Env var | Default | Purpose |
|---|---|---|
FLYCAST_BIN | /opt/flycast/AppRun | Flycast binary. |
FLYCAST_LOG_PATH | /config/flycast.log | Where Flycast's stdout/stderr is captured. |
FLYCAST_STOP_WAIT | 20 | How long the Alt+F4 close request gets before escalating to a SIGTERM that Flycast has no handler for, and which skips the save entirely. |
FLYCAST_STATE_WAIT | 30.0 | How long the save state written at shutdown has to land on disk. |
FLYCAST_STATE_STABLE | 1.5 | How long a state's size and mtime must both hold still before it counts as written. |
Flycast's data folder isn't configurable here either. It's
/config/.local/share/flycast, flat, holding the VMU (memory card) saves
and the save state together at the top level.
ScummVM
| Env var | Default | Purpose |
|---|---|---|
SCUMMVM_BIN | probed | ScummVM binary; /usr/games/scummvm, /usr/bin/scummvm and /usr/local/bin/scummvm are tried in that order. |
SCUMMVM_CONFIG_DIR | /config/.config/scummvm | Holds scummvm.ini, which the broker pins its settings into and reads game targets back out of. Its scummvm.ini is passed as --config on every launch and on every --add, so moving it moves the file both read. |
SCUMMVM_DATA_DIR | /config/.local/share/scummvm | ScummVM's data directory; saves/ under it is the save subtree and the working slot alike. |
SCUMMVM_LOG_PATH | /config/scummvm.log | Where ScummVM's stdout/stderr is captured. |
SCUMMVM_STATE_SLOT | 1 | The slot the broker saves into. Kept low because the chooser is walked one Down per slot, and slot 0 is ScummVM's write-protected autosave. |
SCUMMVM_MENU_KEY | F11 | Key the broker binds to the global menu action in scummvm.ini, and opens the Global Main Menu with. ScummVM's own C+F5 loses its modifier on the way through Xwayland, and the unmodified F5 belongs to the engine keymap, which an engine may take for itself. |
SCUMMVM_STATE_WAIT | 10 | How long a save waits for the slot's file to change before reporting failure. The menu macro gives no acknowledgement of its own. |
SCUMMVM_STATE_STABLE | 1.0 | How long a save's size and mtime must both hold still before it counts as written. |
SCUMMVM_KEY_DELAY | 0.8 | Seconds between the macro's steps. The menu and its chooser animate in, and a keystroke sent into either transition is dropped. |
SCUMMVM_ADD_TIMEOUT | 120 | How long scummvm --add gets to scan a folder. Detection reads through every file in it. |
SCUMMVM_RESUME_LOAD_WAIT | 45 | How long a deferred resume waits for the parent to push its state. |
SCUMMVM_RESUME_LOAD_SETTLE | 8 | How long that resume then gives the game to reach a state where it answers the menu. |
SCUMMVM_FILL_SCREEN | true | Grow the game window to the display after launch, so a 640x480 game is not a postage stamp on a 1080p stream. Done through the window manager, not ScummVM's own fullscreen, which would make SDL grab and confine the pointer against a stack that feeds it absolutely. Best-effort: a failure leaves the game at its own size. |
SCUMMVM_CACHE_ENABLED | true | Whether a game stored as a .7z/.zip/.rar archive boots. A ScummVM game is a folder, so the first launch extracts the archive into SCUMMVM_CACHE_DIR and registers the extraction as its target; every later launch reuses both. Off, an archived game is refused. |
SCUMMVM_CACHE_DIR | $SCUMMVM_DATA_DIR/extracted | Where a kept extraction is cached. Broker-owned scratch, written and read by the broker alone. |
SCUMMVM_CACHE_MAX_GB | 10 | Ceiling on the cache's total size; the oldest extraction is evicted first once a new one would exceed it. An archive that still doesn't fit, or that exceeds the free space on the filesystem, is refused rather than extracted until the disk fills. |
SCUMMVM_FILL_SCREEN_WAIT | 10 | Seconds to wait for the game window to appear before giving up on growing it. |
SCUMMVM_FILL_SCREEN_POLL | 2 | Seconds between checks that the game window still matches the display, which changes size with whichever client is connected. |
SCUMMVM_STOP_WAIT | 10 | Seconds SIGTERM gets, which ScummVM spends flushing its config, before escalating to SIGKILL. |