Files
steam_linux_launch_args/options.md
T
2026-08-05 20:27:01 +01:00

411 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Steam Launch Options — Full Reference
Compiled reference for every tool this project assembles into Steam launch
commands: gamescope, Proton (GE/CachyOS), MangoHud, obs-gamecapture, GameMode,
and Mesa Vulkan layers. Sources: ValveSoftware/gamescope (README + `main.cpp`
usage), flightlessmango/MangoHud (`data/MangoHud.conf`), nowrep/obs-vkcapture,
FeralInteractive/gamemode, Mesa docs, and the project's own
`launch_args_env_vars.md` / `steam-tinker-launcher.md`.
## The reference config this file started from
```
LD_PRELOAD="" PROTON_USE_NTSYNC=1 PROTON_ENABLE_WAYLAND=1 ENABLE_LAYER_MESA_ANTI_LAG=1
MANGOHUD=1 gamemoderun obs-gamecapture gamescope --fullscreen -w 1920 -W 1920 -h 1080
-H 1080 -r 165 --immediate-flips --nested-unfocused-refresh 30 --sharpness 20
--force-grab-cursor --backend wayland -- env LD_PRELOAD="$LD_PRELOAD" %command%
```
Annotated: envs → `gamemoderun` (outermost) → `obs-gamecapture``gamescope`
(inner wrapper, its own `--` separator) → `env LD_PRELOAD=... %command%`.
Everything before the first `--` applies to gamescope itself; `%command%` is the
game.
---
## 1. gamescope
Usage: `gamescope [options...] -- [command...]`. Options before `--` configure
the compositor; everything after runs inside it.
### General
| Option | Meaning |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `-W, --output-width`, `-H, --output-height` | Resolution gamescope outputs at (default 1280×720). Ignored in embedded mode. |
| `-w, --nested-width`, `-h, --nested-height` | Resolution the game renders at (defaults to `-W`/`-H`). |
| `-r, --nested-refresh` | Frame-rate limit for the game (e.g. `-r 165`). |
| `-m, --max-scale` | Maximum scale factor. |
| `-S, --scaler` | Upscaler type: `auto`, `integer`, `fit`, `fill`, `stretch`. |
| `-F, --filter` | Upscale filter: `linear`, `nearest`, `fsr` (FSR 1.0), `nis` (NIS 1.0.3), `pixel`. |
| `--sharpness, --fsr-sharpness` | Upscaler sharpness **0 (max) to 20 (min)**. Affects FSR/NIS. |
| `--expose-wayland` | Accept Wayland clients (xdg-shell). |
| `-s, --mouse-sensitivity` | Multiply mouse movement by a decimal (e.g. `-s 1.0`). |
| `--backend` | Rendering backend: `auto` (default), `drm` (standalone session), `sdl`, `openvr`, `headless`, `wayland`. |
| `--mangoapp` | Launch the MangoHud `mangoapp` overlay inside gamescope (prefer over mangohud on the game). |
| `--adaptive-sync` | Enable adaptive sync / VRR if available. |
### Nested mode
| Option | Meaning |
| -------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `-o, --nested-unfocused-refresh` | Game refresh rate when the window is unfocused (e.g. `30`). Note: does not work on the Wayland backend. |
| `-b, --borderless` | Borderless window. |
| `-f, --fullscreen` | Fullscreen window. |
| `-g, --grab` | Grab the keyboard. |
| `--force-grab-cursor` | Always use relative mouse mode regardless of cursor visibility. |
| `--display-index` | Force a specific display in nested mode. |
### Embedded mode
| Option | Meaning |
| ---------------------- | ------------------------------------------------------------------------ |
| `-O, --prefer-output` | Connectors in preference order (e.g. `DP-1,DP-2,HDMI-A-1`). |
| `--default-touch-mode` | Touch mode: `0` hover, `1` left, `2` right, `3` middle, `4` passthrough. |
| `--generate-drm-mode` | DRM mode generation algorithm: `cvt`, `fixed`. |
| `--immediate-flips` | Immediate flips (may tear). |
| `--framerate-limit` | Hard FPS limit for the embedded session (steamcompmgr-style). |
### HDR
| Option | Meaning |
| --------------------------------------------- | -------------------------------------------------- |
| `--hdr-enabled` | Enable HDR output. |
| `--hdr-wide-gammut-for-sdr` | Wide gamut for SDR content. |
| `--hdr-sdr-content-nits` | Assumed SDR content brightness (e.g. `400`). |
| `--hdr-itm-enable` | Inverse tone mapping for SDR content. |
| `--hdr-itm-sdr-nits`, `--hdr-itm-target-nits` | ITM input/output brightness (e.g. `100` / `1000`). |
### VR (OpenVR backend)
| Option | Meaning |
| ---------------------------------------------------------- | --------------------------------------- |
| `--openvr` | Run as an OpenVR session. |
| `--vr-overlay-show-immediately` | Show overlay immediately. |
| `--vr-overlay-enable-control-bar` / `-keyboard` / `-close` | Control bar + keyboard/close shortcuts. |
| `--vr-overlay-modal` | Modal overlay. |
| `--vr-scrolls-speed` | Scroll speed (e.g. `8.0`). |
| `--vr-overlay-key`, `--vr-app-overlay-key` | Overlay key / per-app key. |
| `--vr-overlay-explicit-name`, `--vr-overlay-default-name` | Overlay names. |
| `--vr-overlay-icon` | Overlay icon path. |
### Debug / misc
| Option | Meaning |
| ------------------------------------ | ------------------------------------------------------- |
| `--debug-hud` | Show gamescope's internal debug HUD. |
| `--force-composition` | Always composite (disable direct flips). |
| `--rt` | Realtime scheduling. |
| `--headless` | Headless backend. |
| `--prefer-vk-device` | Prefer a specific Vulkan device (e.g. `%{VK_DEVICE}%`). |
| `--disable-layers`, `--debug-layers` | Disable / debug Vulkan layers. |
| `--allow-deferred-backend` | Allow the backend to start deferred. |
| `--keep-alive` | Keep the session alive after the app exits. |
| `--expose-wayland` | (see General) |
Also: `GAMESCOPE_*` env vars exist for embedded-session behavior; the
STL doc `steam-tinker-launcher.md` §3.13.6 has the full catalog incl. legacy
flags (`-i`, `-n`, `-U`, `-Y` = older GameScope filter flags, deprecated).
---
## 2. Proton (GE / CachyOS)
Run with `binary=proton suffix=waitforexecandrun` — all toggles are env vars.
Full per-variant tables in `launch_args_env_vars.md`; highlights:
| Env var | Meaning |
| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `PROTON_LOG=1` | Write a debug log to `steam-<appid>.log`. |
| `PROTON_USE_NTSYNC=1` / `PROTON_NO_NTSYNC=1` | Force / disable ntsync. |
| `PROTON_USE_WINED3D=1` | OpenGL backend instead of DXVK. |
| `PROTON_NO_D3D12/11/10/9=1` | Disable a D3D version. |
| `PROTON_NO_ESYNC=1`, `PROTON_NO_FSYNC=1` | Disable esync / fsync. |
| `PROTON_ENABLE_WAYLAND=1` | Use the Wayland driver (no XWayland). |
| `PROTON_ENABLE_NVAPI=1` / `PROTON_DISABLE_NVAPI=1` | NVIDIA API support (GE / CachyOS). |
| `PROTON_FSR4_UPGRADE=1`, `PROTON_DLSS_UPGRADE=1`, `PROTON_XESS_UPGRADE=1` | FSR4 / DLSS / XESS frame-gen upgrades (FSR4 = AMD 7xxx+). |
| `PROTON_FSR3_UPGRADE=1`, `PROTON_MLFG_UPGRADE=1`, `PROTON_FFX3_UPGRADE=1`, `PROTON_FFX4_UPGRADE=1` | Other upscale upgrades (CachyOS). |
| `WINE_FULLSCREEN_FSR=1` (+ `WINE_FULLSCREEN_FSR_STRENGTH=2`) | Wine fullscreen FSR. |
| `WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER=1` | Fix miscolored video. |
| `PROTON_USE_SECCOMP=1`, `PROTON_NO_WRITE_WATCH=1`, `PROTON_HEAP_DELAY_FREE=1` | Compatibility shims. |
| `PROTON_USE_WOW64=1` | New WoW64 prefix mode. |
| `PROTON_ENABLE_MEDIACONV=1`, `PROTON_MEDIA_FORCE_GST=1` | Media Foundation via GStreamer. |
| `PROTON_USE_XALIA=1/0` | Enable/disable the Xalia gamepad→keyboard bridge. |
| `PROTON_USE_SDL=1` / `PROTON_PREFER_SDL=1` | SDL input path. |
| `DXVK_HDR=1` / `DXVK_NO_HDR=1` | HDR on/off (CachyOS). |
| `DXVK_NVAPI_VKREFLEX=1`, `LOW_LATENCY_LAYER=1` | NVIDIA Reflex / low-latency layer (CachyOS). |
| `PROTON_NVIDIA_LIBS=1` (+ `_NO_32BIT`, `NVCUDA`, `NVENC`, `NVML`, `NVOPTIX`) | NVIDIA library set (CachyOS). |
| `PROTON_USE_D9VK=1`, `PROTON_DXVK_SAREK=1`, `PROTON_DXVK_LOWLATENCY=1`, `PROTON_D7VK_DDRAW=1` | Alternative D3D translation (CachyOS). |
| `PROTON_DISCORD_BRIDGE=1` | Discord Rich Presence bridge (CachyOS). |
The app exposes these as checkbox toggles under the Proton tabs (categories:
Debug / Performance / Graphics / Compatibility / NVIDIA / Upscaling / Input /
Display / Audio / HDR / Media / Integration).
---
## 3. MangoHud
Enable with `MANGOHUD=1` (Vulkan/OpenGL) or by wrapping the command with
`mangohud <cmd>` (GL). Config lives in `~/.config/MangoHud/MangoHud.conf`;
everything below is also settable via `MANGOHUD_CONFIG` (comma-separated, e.g.
`MANGOHUD_CONFIG=fps_limit=60,fps,gpu_stats`).
| Config param | Meaning |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fps_limit=N` | Limit FPS (comma list e.g. `0,30,60`; `0` = unlimited). |
| `fps_limit_method=` | `early` (wait before present) / `late` (wait after). |
| `vulkan_present_mode=` | Override present mode: `immediate`, `mailbox`, `fifo`, `fifo_relaxed`, `shared_demand_refresh`, `shared_continuous_refresh`, `fifo_latest_ready`. |
| `vsync=N` | Force vsync on/off. |
| `fps`, `gpu_stats`, `gpu_temp`, `gpu_core_clock`, `gpu_mem_clock`, `gpu_mem_temp`, `gpu_power`, `gpu_load_change`, `gpu_fan`, `gpu_voltage` | GPU readouts (misc info). |
| `cpu_stats`, `cpu_temp`, `cpu_power`, `ram`, `vram`, `io_stats`, `frametime` | CPU/memory/IO stats. |
| `frame_timing`, `frame_timing_detailed`, `dynamic_frame_timing`, `histogram` | Frametime graphs. |
| `gamemode` | Show GameMode active status. |
| `fsr` / `hide_fsr_sharpness` | Show FSR status (gamescope only). |
| `debug` | Gamescope app frametime/latency graph. |
| `show_fps_limit`, `resolution`, `display_server`, `engine_version`, `wine`, `winesync`, `arch` | Misc display toggles. |
| `custom_text=`, `exec=` | Custom text / shell-command output column. |
| `media_player` | Spotify/media metadata. |
| `toggle_hud=`, `toggle_hud_position=`, `toggle_preset=`, `toggle_fps_limit=`, `toggle_logging=`, `reload_cfg=`, `upload_log=` | Keybinds (e.g. `Shift_R+F12`). |
| `autostart_log=`, `log_duration=`, `log_interval=`, `log_upload=`, `log_sync=` | Benchmark logging. |
| `graphs=` | Which graphs to show (`gpu_load,cpu_load,gpu_core_clock,gpu_mem_clock,vram,ram,cpu_temp,gpu_temp`). |
Env vars: `MANGOHUD_CONFIG`, `MANGOHUD_CONFIGFILE`, `MANGOHUD_PRESETSFILE`.
`mangoapp` = standalone overlay for Steam/gamescope sessions.
The app exposes: `MANGOHUD=1` (Enable overlay), `fps_limit=60`, `fps`.
---
## 4. obs-gamecapture
Binary wrapper from obs-vkcapture. Enables OBS "Game Capture" sources to see
the game.
| Option / env | Meaning |
| ------------------------------------------------------ | ---------------------------------------------------------- |
| `--width W`, `--height H` | Capture resolution. |
| `--rate N` | Capture frame rate. |
| `--no-sound` | Disable audio capture. |
| `OBS_FORCE_GAMECAPTURE=1` | Force game-capture path. |
| `OBS_NO_GAMECAPTURE=1` | Disable game-capture detection. |
| `OBS_NO_XLIB=1`, `OBS_NO_XSHM=1`, `OBS_NO_VKCAPTURE=1` | Disable specific capture paths. |
| `OBS_VKCAPTURE=1` | Enable the Vulkan capture layer (native games). |
| `OBS_VKCAPTURE_NAME=` | Override the app name reported to OBS for window matching. |
OBS-side (Game Capture source): window matching (any / specific app / any
except), cursor capture (X11 + Wayland), transparency.
---
## 5. GameMode
`gamemoderun %command%` (or `gamemoderun ./game`) requests the gamemoded daemon
switch to the performance profile for the process tree. Legacy pre-1.3 form:
`LD_PRELOAD="$LD_PRELOAD:/usr/$LIB/libgamemodeauto.so.0" %command%`.
| Env / config | Meaning |
| ------------------------------------ | ---------------------------------------------------------------------------------------------- |
| `GAMEMODERUNEXEC="cmd"` | Extra command gamemoderun executes. |
| `~/.config/gamemode.ini` `[general]` | `desired_gov` (governor override), `reaper_freq`, `defaultgov`. |
| `[gpu]` | `apply_gpu_optimisations`, `gpu_device`, `amd_performance_level=high`, `nv_powermizer_mode=1`. |
| `[cpufreq]` | `min_freq`, `max_freq`, `governor=performance`. |
| `[core]` | `park_cores=no`. |
| `[custom]` | `start=`, `end=` commands run on mode start/stop. |
---
## 6. Mesa Vulkan layers (AMD)
Layers shipped with Mesa (`-D vulkan-layers=...` build option); enable with
env vars. Some distros (e.g. CachyOS, mesa-git) ship extra ones as
`mesa-vulkan-layers`.
| Env var | Layer | Meaning |
| ----------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ENABLE_LAYER_MESA_ANTI_LAG=1` | anti-lag (`VK_AMD_anti_lag`, Mesa 25.3+) | AMD CPU-side latency pacing (Anti-Lag-style). Vulkan 1.3.281+. AMD GPUs only. |
| `VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay` (or `VK_INSTANCE_LAYERS=VK_LAYER_MESA_overlay`) | overlay | Built-in Vulkan HUD: fps, frametimes, GPU/CPU stats. |
| `VK_LAYER_MESA_OVERLAY_CONFIG=position=top-left,submit,draw,...` | overlay | Overlay content config: `fps`, `frametime`, `submit`, `draw`, `pipeline_graphics`, `pipeline_compute`, `queue_ops`, `position=...` (run with `help` for the list). |
| `MESA_VK_DEVICE_SELECT=list` / `vid:did` | device-select | Pick the Vulkan device (e.g. `MESA_VK_DEVICE_SELECT=1002:747e`); append `!` to force. |
| `ENABLE_LAYER_MESA_FPS_MONITOR=1` | fps-monitor | Vsync/FPS rate limiting layer (CachyOS mesa-git). |
Notes: anti-lag needs the layer present in the runtime (Flatpak Mesa misses it);
it only applies to AMD RADV and requires `VK_AMD_anti_lag` support in the game
or translation layer. `MESA_VK_DEVICE_SELECT` is the stable way to pin a GPU for
multi-GPU setups.
---
## 7. DXVK (D3D9/10/11 → Vulkan)
Translation layer inside Proton. Env vars set per-launch; the config-file
options (`dxvk.conf` / `DXVK_CONFIG=...`) are its “args”. `dxvk.conf` is read
from the game's working directory; `DXVK_CONFIG_FILE` overrides the path.
### Env vars
| Env var | Meaning |
| ------------------------------------------------ | ----------------------------------------------------------------------------- |
| `DXVK_HUD=...` | HUD elements, comma-separated (see below). `1` = `devinfo,fps`; `full` = all. |
| `DXVK_LOG_LEVEL=none\|error\|warn\|info\|debug` | Log verbosity (stderr). |
| `DXVK_LOG_PATH=dir` | Write `app_d3d11.log` etc. to a directory; `none` disables files. |
| `DXVK_SHADER_CACHE=0` | Disable the internal shader cache. |
| `DXVK_SHADER_CACHE_PATH=dir` | Shader cache location (default `%LOCALAPPDATA%/dxvk` / `$XDG_CACHE_HOME`). |
| `DXVK_FILTER_DEVICE_NAME="Name"` | Pick GPU by Vulkan device name substring (e.g. `VEGA`). |
| `DXVK_FILTER_DEVICE_UUID=32-hex` | Pick GPU by device UUID (vulkaninfo). |
| `DXVK_CONFIG_FILE=path` | Point at an explicit `dxvk.conf`. |
| `DXVK_CONFIG="opt = val; opt2 = val"` | Set config options inline (`;` separates). |
| `DXVK_DEBUG=capture\|hang\|markers\|validation` | Debug modes (hang = GPU-hang detection, markers = debug utils, …). |
| `DXVK_WSI_DRIVER=SDL3\|SDL2\|GLFW` | Backend selector for DXVK Native builds. |
| `VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation` | Vulkan validation layers (debugging). |
`DXVK_HUD` elements: `devinfo`, `fps`, `frametimes`, `submissions`,
`drawcalls`, `pipelines`, `compiler`, `samplers` (D3D9), `swvp` (D3D9),
`scale=x` (e.g. `1.5`), `opacity=y` (e.g. `0.5`).
### Config options (the “args”)
| Option | Meaning |
| ------------------------------------------- | ----------------------------------------------------------------------------- |
| `dxvk.hud = ...` | Same as `DXVK_HUD` (ignored when the env var is set). |
| `dxvk.numCompilerThreads = N` | Pipeline-compiler threads; `0` = use all CPU cores. |
| `dxvk.enableAsync = True` | Asynchronous pipeline compilation (reduces stutter in shader-heavy games). |
| `dxvk.useRawSsbo = True` | Raw SSBOs for buffer views (default on supported hardware). |
| `dxvk.enableGraphicsPipelineLibrary = True` | GPL shader pre-compilation (drivers with `VK_EXT_graphics_pipeline_library`). |
| `dxvk.enableMemoryDefrag = True` | Defragment VRAM. |
| `dxvk.enableDescriptorHeap = True` | Split descriptor heaps (newer path). |
| `dxvk.enableDebugUtils = True` | Debug-utils integration. |
| `dxgi.syncInterval = 0` | Disable vsync (D3D11 present). |
| `dxgi.hideAmdGpu = True` | Hide the AMD GPU from the app (multi-GPU). |
Full option list: <https://github.com/doitsujin/dxvk/wiki/Configuration>
---
## 8. vkd3d-proton (D3D12 → Vulkan)
Env vars only (no CLI); debug-oriented, may change between versions.
| Env var | Meaning |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------- |
| `VKD3D_CONFIG=...` | Comma/semicolon-separated behavior flags (see below). |
| `VKD3D_LOG_LEVEL=none\|error\|warn\|info\|trace` | Log verbosity. |
| `VKD3D_FRAME_RATE=N` | Frame-rate limit; `0` uncaps. |
| `VKD3D_SWAPCHAIN_PRESENT_MODE=MODE` | Force present mode: `IMMEDIATE`, `MAILBOX`, `FIFO`, `FIFO_RELAXED`, `FIFO_LATEST_READY`. |
| `VKD3D_SHADER_CACHE_PATH=dir` | DXBC/DXIL→SPIR-V shader cache location; `0` disables. |
| `VKD3D_PROFILE_PATH=path` | CPU profiling output (profiled builds only). |
`VKD3D_CONFIG` flags: `vk_debug` (validation layer), `nodxr` (disable DXR),
`dxr` (force DXR even when unsafe), `dxr12` (experimental DXR 1.2),
`force_static_cbv` (NVIDIA speed hack), `single_queue` (no async queues),
`no_upload_hvv` (block host-visible VRAM for uploads), `pipeline_library_app_cache`,
`skip_application_workarounds`, `breadcrumbs`, `descriptor_qa_checks` (debug).
---
## 9. Wine core env vars (also work under Proton)
Proton ships Wine; these env vars apply to the whole prefix.
| Env var | Meaning |
| -------------------------------- | --------------------------------------------------------------------------------------------- |
| `WINEPREFIX=path` | Wine prefix directory (default `~/.wine`); all Wine processes of a prefix share `wineserver`. |
| `WINEDLLOVERRIDES="dll=n,b;..."` | DLL load order: `n` native, `b` builtin (e.g. `dxgi=n`, `dinput8=n,b`). |
| `WINEDEBUG=...` | Debug channel control (e.g. `-all`, `+d3d`). |
| `WINE_CPU_TOPOLOGY=N:list` | Expose N physical cores to the game (e.g. `8:0,1,2,3,4,5,6,7` — Steam Deck uses this). |
Note: esync/fsync are built into Proton (toggled via `PROTON_NO_ESYNC` /
`PROTON_NO_FSYNC`); upstream Wine also accepts `WINEESYNC=1` / `WINEFSYNC=1`.
---
## 10. NVIDIA PRIME render offload (hybrid laptops)
Forcing the discrete NVIDIA GPU. Env vars only — no args; the `prime-run`
wrapper command sets all three. Needs driver 435.17+.
| Env var | Meaning |
| ----------------------------------- | ------------------------------------ |
| `__NV_PRIME_RENDER_OFFLOAD=1` | Offload rendering to the PRIME GPU. |
| `__GLX_VENDOR_LIBRARY_NAME=nvidia` | OpenGL path (GLX). |
| `__VK_LAYER_NV_optimus=NVIDIA_only` | Vulkan path (via the Optimus layer). |
Usage: `prime-run %command%` or inline:
`__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only %command%`.
Combined with gamemode: `gamemoderun prime-run %command%`.
---
## 11. gamescope — SteamOS session env vars + extra CLI
### Env vars (Steam/SteamOS session integration)
From the Steam Deck `gamescope-session` script (HoloISO/SteamOS); these tell
Steam/gamescope which session capabilities exist or control the session:
| Env var | Meaning |
| ----------------------------------------------------- | ----------------------------------------------------------- |
| `STEAM_GAMESCOPE_VRR_SUPPORTED=1` | Advertise VRR controls in Steam. |
| `STEAM_GAMESCOPE_TEARING_SUPPORTED=1` | Enable tearing controls in Steam. |
| `STEAM_GAMESCOPE_HAS_TEARING_SUPPORT=1` | Gamescope tearing via `GAMESCOPE_ALLOW_TEARING`. |
| `STEAM_GAMESCOPE_DYNAMIC_FPSLIMITER=1` | Mesa fifo-based dynamic FPS limiter. |
| `STEAM_GAMESCOPE_COLOR_TOYS=1` | Gamma/degamma exponent support in Steam. |
| `STEAM_GAMESCOPE_NIS_SUPPORTED=1` | Advertise NIS upscaling. |
| `STEAM_GAMESCOPE_DYNAMIC_REFRESH_IN_STEAM_SUPPORTED` | Dynamic refresh toggle in the steamui. |
| `STEAM_DISPLAY_REFRESH_LIMITS=40,60` | Refresh-rate range + switching (e.g. Deck 40 Hz mode). |
| `STEAM_USE_DYNAMIC_VRS=1` | Dynamic VRS (with `RADV_FORCE_VRS_CONFIG_FILE`). |
| `STEAM_MULTIPLE_XWAYLANDS=1` | Per-game XWayland isolation. |
| `STEAM_USE_MANGOAPP=1` | mangoapp overlay in session. |
| `STEAM_MANGOAPP_HORIZONTAL_SUPPORTED=1` | Horizontal mangoapp bar. |
| `GAMESCOPE_MODE_SAVE_FILE=path` | Mode-save file (res/refresh modes). |
| `GAMESCOPE_NV12_COLORSPACE=...` | NV12 colorspace for RPT (e.g. `k_EStreamColorspace_BT601`). |
| `GAMESCOPE_LIMITER_FILE=path` | Callback-based FPS limiter file. |
| `GAMESCOPE_STATS=path` / `GAMESCOPE_WAYLAND_DISPLAY=` | Session stats pipe / Wayland display set by gamescope. |
### Extra CLI flags (beyond §1)
| Option | Meaning |
| ------------------------------------ | ---------------------------------------------------------------- |
| `--xwayland-count N` | Number of XWayland servers (e.g. `2` on Deck). |
| `--hide-cursor-delay ms` | Hide the cursor after N ms of inactivity (e.g. `3000`). |
| `--fade-out-duration ms` | Fade-to-black duration on startup (e.g. `200`). |
| `--force-orientation VALUE` | Panel orientation: `left`, `right`, `upside_down`. |
| `--cursor PATH --cursor-hotspot x,y` | Custom cursor image + hotspot (per-user path — skip in presets). |
| `-R socket` / `-T stats-pipe` | Session startup socket / stats pipe (used by SteamOS session). |
Keyboard shortcuts (nested session): `Super+F` fullscreen, `Super+N`
nearest-neighbour, `Super+U` FSR, `Super+Y` NIS, `Super+I`/`Super+O` FSR
sharpness ±1, `Super+S` screenshot, `Super+G` keyboard grab.
---
## 12. Steam launch-option syntax
- Steam runs the launch options with `/bin/sh`; `%command%` is substituted
with the actual game command (must appear exactly once, at the end).
- Env assignments prefix the command: `VAR=1 VAR2=x gamescope ... -- %command%`.
- Wrappers chain left → right, outermost first: `gamemoderun prime-run
gamescope -r 60 -- %command%` (gamemode outermost, gamescope innermost).
- `--` separates the wrapper's own args from the wrapped command (gamescope,
obs-gamecapture). Without a wrapper, `%command%` alone is valid.
- Example: `gamescope -h 720 -H 1440 -S integer -- %command%` (720p→1440p
integer scale); `gamescope -r 30 -- %command%` (FPS limit).
- Linux-only env vars (DXVK/vkd3d/Proton) have no effect on Windows builds of
the same game.
---
## Sources
- <https://github.com/ValveSoftware/gamescope> (`main.cpp` usage string, README)
- <https://github.com/flightlessmango/MangoHud> (`data/MangoHud.conf`)
- <https://deepwiki.com/nowrep/obs-vkcapture/4.1-configuration-options>
- <https://github.com/FeralInteractive/gamemode> (+ `gamemoderun(1)`)
- <https://docs.mesa3d.org/envvars> · Phoronix "Mesa 25.3 Merges Vulkan AMD Anti-Lag Support"
- <https://github.com/doitsujin/dxvk> (README + Configuration wiki)
- <https://github.com/HansKristian-Work/vkd3d-proton> (README)
- <https://wiki.archlinux.org/title/PRIME> · <https://download.nvidia.com/XFree86/Linux-x86_64/595.91.07/README/primerenderoffload.html>
- <https://wiki.archlinux.org/title/Launch_option> · <https://man.archlinux.org/man/wine.1.en>
- <https://github.com/HoloISO/gamescope-steamos-pkgbuild> (`gamescope-session` script)
- Project-internal: `launch_args_env_vars.md`, `steam-tinker-launcher.md`