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 launcher reads its own variables at import time. Paths default to where the emulator itself keeps its data inside the container (HOME is /config, and XDG_CONFIG_HOME / XDG_DATA_HOME are honoured where the emulator honours them), so none of these need setting unless the image layout changes. Timings are in seconds.

Shared

Env varDefaultPurpose
XDOTOOL_BINxdotoolThe xdotool used to send save/load hotkeys to Dolphin and PPSSPP.
XDG_RUNTIME_DIR/config/.XDGWhere PCSX2's PINE socket (pcsx2.sock) is looked for.
DESKTOP_BINselkies-desktopWhat the desktop type launches.

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.
SSTATE_DIR/config/.config/PCSX2/sstatesWhere PCSX2 writes save states.
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.

DuckStation

Env varDefaultPurpose
DUCKSTATION_BIN/opt/duckstation/AppRunDuckStation binary.
DUCKSTATION_DATA_DIR/config/.local/share/duckstationDuckStation's data root (settings.ini, savestates/, memory cards); $XDG_CONFIG_HOME/duckstation when that is set.
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.

Dolphin

Env varDefaultPurpose
DOLPHIN_BINdolphin-emuDolphin binary.
DOLPHIN_USER_DIR/config/.local/share/dolphin-emuDolphin's user directory (Config/, StateSaves/, GC/, Wii/).
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_VIDEO_BACKENDOGLVideo backend pinned at launch; OGL over Vulkan because RADV on the integrated AMD parts has been the less reliable one.

Cemu

Env varDefaultPurpose
CEMU_BINCemuCemu binary.
CEMU_CONFIG_DIR/config/.config/CemuCemu's config directory (settings.xml, controllerProfiles/).
CEMU_DATA_DIR/config/.local/share/CemuCemu's data directory.
CEMU_MLC_DIR<CEMU_DATA_DIR>/mlc01The mlc01 tree saves are dumped from; only passed to Cemu as -m when set explicitly.
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).

Azahar

Env varDefaultPurpose
AZAHAR_BIN/opt/azahar/AppRunAzahar binary.
AZAHAR_USER_DIR/config/.local/share/azahar-emuAzahar's user data directory (sdmc/, nand/).
AZAHAR_CONFIG_DIR/config/.config/azahar-emuAzahar's config directory (qt-config.ini).
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).

Eden

Env varDefaultPurpose
EDEN_BINedenEden binary.
EDEN_CONFIG_DIR/config/.config/edenEden's config directory (qt-config.ini).
EDEN_DATA_DIR/config/.local/share/edenEden's data directory (nand/, sdmc/).
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.

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_DATA_DIR/config/.local/share/shadPS4shadPS4's data directory (home/1000/savedata/ is the save subtree).
SHADPS4_LOG_PATH/config/shadps4.logWhere shadPS4's stdout/stderr is captured.
SHADPS4_STOP_WAIT20How long the IPC STOP gets to finish before SIGTERM.

RetroArch

Env varDefaultPurpose
RETROARCH_BINretroarchRetroArch binary.
RETROARCH_CONFIG_DIR/config/.config/retroarchWhere the user's retroarch.cfg lives.
RETROARCH_CORES_DIRlibretro_directory from retroarch.cfg, else /config/.local/share/RetroArch/coresWhere cores are loaded from and downloaded into.
RETROARCH_SYSTEM_DIRsystem_directory from retroarch.cfg, else /config/.local/share/RetroArch/systemWhere cores look for BIOS files and firmware.
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_DATA_DIR/config/.retroarchBroker-managed states/, saves/ and the broker.cfg layered on with --appendconfig.
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.
RETROARCH_SLOT_STEP_DELAY0.1Pause between slot presses while parking the slot.
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_SLOT.
RETROARCH_LOAD_ACK_WAIT10.0How long LOAD_STATE_SLOT has to be acknowledged.
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_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_STOP_WAIT15SIGTERM grace before SIGKILL once QUIT has been tried.

RPCS3

Env varDefaultPurpose
RPCS3_BIN/opt/rpcs3/AppRunRPCS3 binary.
RPCS3_DATA_DIR/config/.config/rpcs3RPCS3's data root (config.yml, dev_hdd0/).
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_STOP_WAIT2SIGTERM grace before SIGKILL (no SIGTERM handler, covers the AppImage wrapper teardown).

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.
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.

PPSSPP

Env varDefaultPurpose
PPSSPP_BINPPSSPPQtPPSSPP binary.
PPSSPP_CONFIG_DIR/config/.config/ppssppPPSSPP's config root; PSP/ under it holds SYSTEM/ppsspp.ini, SAVEDATA/ and PPSSPP_STATE/.
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_SETTLE5.0How long the window has to be up before the load hotkey is sent.

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.

On this page