webstation-broker
Configuration

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 varDefaultPurpose
XDOTOOL_BINxdotoolThe xdotool used to send hotkeys and window commands to Dolphin, PPSSPP, Flycast, RPCS3 and ScummVM.
XDG_RUNTIME_DIR/config/.XDGWhere PCSX2's PINE socket (pcsx2.sock) is looked for.
DESKTOP_BINselkies-desktopWhat the desktop type launches.
DESKTOP_STOP_WAIT15SIGTERM 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 varDefaultPurpose
PCSX2_BINpcsx2-qtPCSX2 binary.
PCSX2_STATE_SLOT10The slot PCSX2 works in; 10 is its own autosave slot, which the per-emulator broker also used.
PCSX2_SLOT1_CARDromm-slot1Name of the Slot 1 folder memory card the broker owns (a directory, no .ps2 extension).
PCSX2_LOG_PATH/config/pcsx2-qt.logWhere PCSX2's stdout/stderr is captured.
PCSX2_PATCHES_FETCHtrueFetch PCSX2's game-patch bundle (patches.zip) from PCSX2/pcsx2_patches before a launch. Set false with no route to GitHub.
PINE_WAIT20.0How long a save state has to land on disk after the PINE save command.
RESUME_LOAD_WAIT90.0How long a resume load waits for PCSX2 to report a running game.
RESUME_LOAD_SETTLE3.0How long the game has to be running before the resume load fires.
PCSX2_RESUME_STATE_WAIT60.0How 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 varDefaultPurpose
DUCKSTATION_BIN/opt/duckstation/AppRunDuckStation binary.
DUCKSTATION_LOG_PATH/config/duckstation.logWhere DuckStation's stdout/stderr is captured.
DUCKSTATION_STOP_WAIT30SIGTERM 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 varDefaultPurpose
DOLPHIN_BINdolphin-emuDolphin binary.
DOLPHIN_LOG_PATH/config/dolphin.logWhere Dolphin's stdout/stderr is captured.
DOLPHIN_STATE_SLOT1The slot Dolphin works in (Shift+Fn saves it, Fn loads it).
DOLPHIN_STATE_WAIT20.0How long a save state has to land on disk after the save hotkey.
DOLPHIN_RESUME_LOAD_WAIT90.0How long a resume load waits for the render window.
DOLPHIN_RESUME_LOAD_SETTLE5.0How long the window has to be up before the load hotkey is sent.
DOLPHIN_LOAD_WAIT20.0How long Dolphin has to read the state back after the load hotkey.
DOLPHIN_LOAD_SETTLE2.0How 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_NAMEXbox 360 ControllerThe 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 varDefaultPurpose
CEMU_BINCemuCemu binary.
CEMU_MLC_DIR$XDG_DATA_HOME/Cemu/mlc01The mlc01 tree saves are dumped from, passed to Cemu as -m on every launch.
CEMU_LOG_PATH/config/cemu.logWhere Cemu's stdout/stderr is captured.
CEMU_PAD_NAMEMicrosoft X-Box 360 padThe selkies virtual pad's name as the kernel xpad driver presents it, used to derive the SDL GUIDs the controller profile binds.
CEMU_PAD_UUIDSunsetComma separated <index>_<guid> list to bind instead of the derived ones.
CEMU_STOP_WAIT5SIGTERM 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 varDefaultPurpose
AZAHAR_BIN/opt/azahar/AppRunAzahar binary.
AZAHAR_LOG_PATH/config/azahar.logWhere Azahar's stdout/stderr is captured.
AZAHAR_STOP_WAIT5SIGTERM 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 varDefaultPurpose
EDEN_BINedenEden binary.
EDEN_LOG_PATH/config/eden.logWhere Eden's stdout/stderr is captured.
EDEN_STOP_WAIT15SIGTERM 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 varDefaultPurpose
SHADPS4_BINunsetExplicit shadPS4 binary; skips the version search.
SHADPS4_VERSIONS_DIR/config/.local/share/shadPS4QtLauncher/versionsWhere the Qt launcher downloads builds, one folder per release; Pre-release/ trumps the newest semver folder.
SHADPS4_BIN_NAMEShadps4-sdl.AppImageThe binary looked for inside each version folder.
SHADPS4_LOG_PATH/config/shadps4.logWhere shadPS4's stdout/stderr is captured.
SHADPS4_STOP_WAIT20How long the IPC STOP gets to finish before SIGTERM.
SHADPS4_PKG_EXTRACTOR_BINpkg_extractorThe 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_TIMEOUT1800Seconds a pkg_extractor (or archive extraction) run gets before it is considered hung.
SHADPS4_CACHE_ENABLEDfalseWhether .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/extractedWhere 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_GB30Ceiling 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_FACTOR1.1Assumed 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_FACTOR2.2Assumed 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_WAIT120How long a launch waits for another extraction to release the cache before giving up.
SHADPS4_GPU_IDautoWhich 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_BINvulkaninfoThe 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 varDefaultPurpose
RETROARCH_BINretroarchRetroArch binary.
RETROARCH_CONFIG_DIRRetroArch's own search order: $XDG_CONFIG_HOME/retroarch, else $HOME/.config/retroarch, else the legacy $HOME/.retroarch.cfgWhere the user's retroarch.cfg lives. Passed to RetroArch as --config on every launch, so moving it moves the file both read.
RETROARCH_CORES_DIRlibretro_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_DIRsystem_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_URLhttps://buildbot.libretro.com/nightly/linux/x86_64/latestWhere missing cores are downloaded from.
RETROARCH_CORE_URL_<CORE>unsetPins one core's download URL without editing retroarch_platforms.json.
GITHUB_API_BASEhttps://api.github.comAPI base for cores whose platform entry names a GitHub release source.
GITHUB_TOKENunsetBearer token for those GitHub release lookups.
RETROARCH_CORE_DOWNLOAD_TIMEOUT180Timeout on a core download.
RETROARCH_EXPERIMENTAL_CORESfalseContainer-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_REFRESHfalseKeep 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_URLhttps://buildbot.libretro.com/assets/frontend/info.zipWhere a refresh downloads the core-info zip from.
RETROARCH_CORE_INDEX_URLhttps://buildbot.libretro.com/nightly/linux/x86_64/latest/.indexWhere a refresh downloads the x86_64 build index from.
RETROARCH_DATA_DIR/config/.retroarchBroker-managed states/, saves/ and the broker.cfg layered on with --appendconfig.
RETROARCH_MSU1_CACHE_ENABLEDtrueWhether 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/msu1Where a kept MSU-1 extraction is cached. Broker-owned scratch, outside the save archive.
RETROARCH_MSU1_CACHE_MAX_GB20Ceiling 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.logWhere RetroArch's stdout/stderr is captured.
RETROARCH_JOYPAD_DRIVERlinuxrawJoypad 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_SLOT0The 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_DELAY0.1Pause between slot presses while parking the slot.
RETROARCH_MENU_SETTLE0.5Pause 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_COMBO2RetroArch'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_STEPS24Slot-down presses to reach the -1 floor from anywhere the player could have cycled to.
RETROARCH_STATE_CONFIRM_WAIT10.0How long a save state has to land on disk after SAVE_STATE.
RETROARCH_LOAD_ACK_WAIT10.0How long LOAD_STATE_SLOT has to be acknowledged.
RETROARCH_LOAD_CONFIRM_WAIT10.0How long RetroArch gets to actually read the state file after acknowledging the load. The acknowledgement only means the command was parsed.
RETROARCH_LOAD_LOCK_WAIT30.0How long a manual load waits for an in-flight resume load or disc swap to finish.
RETROARCH_LOAD_TAINT_RETRY_LIMIT2Extra attempts a load gets when another read of the state file landed during its read check and made that check unreliable.
RETROARCH_STATE_HANDOUT_GRACE2.0How 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_WAIT30.0How long a save waits for an in-flight resume load or disc swap, rather than writing the pre-resume state.
RETROARCH_EXIT_SAVE_LOCK_WAIT3.0The same wait for the save at exit, kept short because exit holds the session lock the whole time.
RETROARCH_FIRST_SAVE_SETTLE3.0How 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_WAIT20.0How long that first save waits to see the game start running at all.
RETROARCH_RESUME_WAIT90.0How long a resume load waits for the core to report a running game.
RETROARCH_RESUME_SETTLE3.0How long the game has to be running before the resume load fires.
RETROARCH_RESUME_RETRY_GAP2.0Pause between resume load attempts when the core acknowledged a load but never read the state.
RETROARCH_RESUME_LOCK_WAIT15.0How long one resume load attempt waits for an in-flight save or disc swap.
RETROARCH_SAVE_FILES_WAIT10.0How long SAVE_FILES (flush SRAM to disk) has to answer at exit.
RETROARCH_QUIT_WAIT10.0How long QUIT gets to finish before SIGTERM.
RETROARCH_QUIT_CONFIRM_GAP0.1Gap before the second QUIT, for configs that ask for confirmation.
RETROARCH_DISC_TRAY_SETTLE1.5Pause after opening the tray before changing the disc index; an index change during the open is silently dropped.
RETROARCH_DISC_STEP_DELAY0.1Pause between disc index presses.
RETROARCH_DISC_SWAP_WAIT90.0How long a swap waits for the core to report a running game.
RETROARCH_OBSERVE_WINDOW_BEFORE_SLACK2.0Seconds 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_SLACK30.0Seconds 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_WAIT15SIGTERM grace before SIGKILL once QUIT has been tried.

RPCS3

Env varDefaultPurpose
RPCS3_BIN/opt/rpcs3/AppRunRPCS3 binary.
RPCS3_LOG_PATH/config/rpcs3.logWhere RPCS3's stdout/stderr is captured.
RPCS3_INSTALL_TIMEOUT1800How long a PKG install may run; decryption of a multi-GB package takes minutes.
RPCS3_BOOT_WAIT90.0How long the boot watchdog waits for PINE to report a running game before the launch is flagged boot_failed.
RPCS3_STATE_WAIT60.0How 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_KEYctrl+alt+1The 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_ENABLEDfalseWhether .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/extractedWhere 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_GB30Ceiling 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_EXPANSION4.0Assumed unpacked-to-archive size ratio, used by the free-space check only when the archive's file listing can't be read.
RPCS3_STOP_WAIT2SIGTERM 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 varDefaultPurpose
XEMU_BIN/opt/xemu/AppRunxemu binary.
XEMU_TOML/config/.local/share/xemu/xemu/xemu.tomlxemu'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.qcow2HDD image used only when xemu.toml has no usable hdd_path.
XEMU_RENDEREROPENGLRenderer pinned in xemu.toml before each launch; VULKAN where the driver is known good, KEEP to leave the file alone.
XEMU_SOFTWARE_GLunsetTruthy renders xemu on the CPU (LIBGL_ALWAYS_SOFTWARE for xemu only); slow, for hosts where both GPU paths abort.
XEMU_LOG_PATH/config/xemu.logWhere xemu's stdout/stderr is captured.
XEMU_STOP_WAIT15SIGTERM grace before SIGKILL; QEMU's clean shutdown flushes the HDD image the save extraction reads.
XEMU_STRAY_TERM_WAIT5Grace a leftover xemu process from an earlier session gets to exit cleanly (flushing the HDD image) before SIGKILL.

PPSSPP

Env varDefaultPurpose
PPSSPP_BINPPSSPPQtPPSSPP binary.
PPSSPP_LOG_PATH/config/ppsspp.logWhere PPSSPP's stdout/stderr is captured.
PPSSPP_STATE_SLOT1The slot PPSSPP works in.
PPSSPP_STATE_WAIT20.0How long a save state has to land on disk after the save hotkey.
PPSSPP_RESUME_LOAD_WAIT90.0How long a resume load waits for the game window.
PPSSPP_RESUME_LOAD_SETTLE12.0How long the window has to be up before the load hotkey is sent.
PPSSPP_STATE_STABLE1.5How long a state's size and mtime must both hold still before it counts as written.
PPSSPP_LOAD_WAIT20.0How long PPSSPP has to read the state back after the load hotkey.
PPSSPP_LOAD_SETTLE2.0How 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_ENABLEDfalseWhether .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/extractedWhere a kept extraction is cached. Broker-owned scratch, written and read by the broker alone.
PPSSPP_CACHE_MAX_GB20Ceiling 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 varDefaultPurpose
XENIA_BIN/opt/xenia/AppRunXenia Edge binary.
XENIA_DATA_DIR/config/xeniaXenia's --storage_root: config, cache, the signed-in profile and the content/ tree the save archive ships.
XENIA_LOG_PATH/config/xenia.logWhere Xenia's stdout/stderr is captured.

Flycast

Env varDefaultPurpose
FLYCAST_BIN/opt/flycast/AppRunFlycast binary.
FLYCAST_LOG_PATH/config/flycast.logWhere Flycast's stdout/stderr is captured.
FLYCAST_STOP_WAIT20How 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_WAIT30.0How long the save state written at shutdown has to land on disk.
FLYCAST_STATE_STABLE1.5How 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 varDefaultPurpose
SCUMMVM_BINprobedScummVM binary; /usr/games/scummvm, /usr/bin/scummvm and /usr/local/bin/scummvm are tried in that order.
SCUMMVM_CONFIG_DIR/config/.config/scummvmHolds 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/scummvmScummVM's data directory; saves/ under it is the save subtree and the working slot alike.
SCUMMVM_LOG_PATH/config/scummvm.logWhere ScummVM's stdout/stderr is captured.
SCUMMVM_STATE_SLOT1The 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_KEYF11Key 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_WAIT10How 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_STABLE1.0How long a save's size and mtime must both hold still before it counts as written.
SCUMMVM_KEY_DELAY0.8Seconds between the macro's steps. The menu and its chooser animate in, and a keystroke sent into either transition is dropped.
SCUMMVM_ADD_TIMEOUT120How long scummvm --add gets to scan a folder. Detection reads through every file in it.
SCUMMVM_RESUME_LOAD_WAIT45How long a deferred resume waits for the parent to push its state.
SCUMMVM_RESUME_LOAD_SETTLE8How long that resume then gives the game to reach a state where it answers the menu.
SCUMMVM_FILL_SCREENtrueGrow 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_ENABLEDtrueWhether 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/extractedWhere a kept extraction is cached. Broker-owned scratch, written and read by the broker alone.
SCUMMVM_CACHE_MAX_GB10Ceiling 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_WAIT10Seconds to wait for the game window to appear before giving up on growing it.
SCUMMVM_FILL_SCREEN_POLL2Seconds between checks that the game window still matches the display, which changes size with whichever client is connected.
SCUMMVM_STOP_WAIT10Seconds SIGTERM gets, which ScummVM spends flushing its config, before escalating to SIGKILL.

On this page