Repository navigation
Releases: Scrumpper/Steam-ARM
Release list
Steam ARM 2.2
Steam ARM 2.2
Added support for Debian 13 and Raspberry Pi OS
sudo bash steam-arm-install.sh # settings menu: Install / Setup
sudo bash steam-arm-install.sh --defaults # recommended components, no questions
bash steam-arm-install.sh --detect # GPU family and defaults, installs nothing
Upgrades 2.1 and 2.0 in place: client, game library, sign-in, component choices and title
profiles are kept (sudo bash steam-arm-install.sh --keep repeats earlier choices).
Assets
| File | What it is |
|---|---|
Steam.ARM.2.2.zip |
Installer steam-arm-install.sh (settings menu steam-arm-config included) and documents |
Steam.ARM.2.2.zip.sha256 |
SHA-256 of zip |
README.md, CHANGELOG.md, COMPATIBILITY.md, GAMES.md |
Documents, also inside zip |
steam-arm-fex-mesa-26.1.8-x86_64-i386.tar.zst, .sha256 |
Driver archive for gpu-in-emulation, unchanged from 2.0, and its SHA-256 |
Installer downloads driver archive from 2.0 release
(steam-arm-fex-mesa-26.1.8-x86_64-i386.tar.zst);
when that address fails, it tries same file name under releases/latest/download, which
this release serves. Both copies have same SHA-256, which installer checks.
New in 2.2
- Debian 13 and Raspberry Pi OS. Outside Ubuntu family, setup writes FEX's PPA as apt
source/etc/apt/sources.list.d/steam-arm-fex.sourceswith Ubuntu series matching Debian
release (Debian 13: noble) and signing key/etc/apt/keyrings/steam-arm-fex.gpg, checked
against pinned fingerprint. Earlier FEX source naming Debian release is renamed to
.disabled.--removedeletes both files once no FEX build is installed. Ubuntu path
unchanged. - Host package check first. Before any package or package source change, setup reads
apt-cache policyand stops naming missing packages and minimum releases: Ubuntu 25.10,
Debian 13. Ubuntu 24.04, Debian 12 and older have no SDL3 packages. - FEX from other sources. With
FEXcommand not owned byfex-emupackage and its x86
binfmt entries registered, setup installs no FEX packages. Thunk folders come from FEX's
own prefix (/usror/usr/local); GL and Vulkan thunks turn off with warning when none
is complete. Close Steamin settings menu. Screens that need Steam closed (Install / Setup,
Components, Controllers, Update / Repair, Uninstall, Remote Play, Restore settings) offer
Close Steam, which runssteam-arm --shutdown; refused while game runs.- Tray menu. Open in Big Picture, Settings and View log entries. Stop runs
steam-arm --shutdown; Stop and entries that restart client are greyed while game runs.
Autostart entry names no desktops, so labwc (Raspberry Pi OS) and other desktops start
tray at login. - Menu entries. "Steam ARM Settings" opens settings menu in terminal.
.debpackage adds
"Steam ARM Setup"; package install over earlier setup names installed version and
sudo steam-arm-setup --keep, and never runs setup. - Check for new version. Maintenance > Check for new version and
steam-arm-config update-checkcompare newest GitHub release with installed version; by
hand only, nothing downloads. - Godot rules. Godot 3 Linux titles get GL 3.3 report (
MESA_GL_VERSION_OVERRIDE=3.3,
loggodot 3: GL 3.3 report); profilegodot=vulkanleaves them as is. Engine version is
also read from PCK embedded in executable and from.pckfiles in Godot's own order.
Godot rules apply to Linux builds only. Godot 3 rule not run on test device without
profile yet. - Download progress. Settings menu progress screen shows curl progress bar for client
package (about 110 MB) and driver archive (about 75 MB). - Launcher checks. Page size at each start: 16K or 64K page kernel stops start with fix;
STEAM_ARM_IGNORE_PAGESIZE=1skips check, and setup keeps it in
/etc/steam-arm/steam-arm.conf. Warning when no GPU render node is usable by account,
naming group to join.steam-arm.logover 1 MiB moves tosteam-arm.log.1. Warnings
that need action also show desktop notification on menu starts. - Mali families. Mali-G615/G715 (arch v11) get
mali-csf-v11(gpu-in-emulationand
glx-laxon, untested); Mali-G1 (arch v14) getsmali-csf-g1(Mali components off, needs
Mesa 26.2). - Hardware report. Adds last launcher log lines, start, update and error lines of
client's bootstrap log, closing block of newest setup log, and game account groups.
Fixed
- Ubuntu 24.04 and Debian 12: setup added FEX package source, then failed at host packages.
Host package check now stops setup before any change. - Host package check and FEX package choice read
apt-cache policyin C locale; under
translated locale every package counted as missing. - First start: client that exited before its files were complete made launcher exit with no
message. Launcher now says to start Steam ARM again, and starts client once more when
bootstrap exited after updating itself. - Settings menu and tray counted Steam client of any account as running; now only game
account's client counts. steam-arm --helpdid not list--bigpictureand--desktopand refused to run as root.- Tray kept generic icon after client's first start until next login.
- KDE Plasma 5 got no window rule; setup now writes and removes it with
kwriteconfig5. - Settings menu Games and Graphics showed hand-installed
GE-Proton*tools asLinux build;
tool names containingprotonnow count as Windows build. - View logs: empty game and setup logs said
launcher writes warnings only; logs not
readable by menu account, and setup logs ofsudo steam-arm-configruns, are now named. - Settings menu header on ARM systems without device tree (ACPI boards) printed
/proc/device-tree/modelerror. - Dialog sentences no longer break into one-word lines on built-in screens.
- Setup run from settings menu: closing summary no longer shows command line hints.
--removesummary nameslibgtk2.0-0andlibgtk2.0-0t64; PPA removal hint on Ubuntu
only, when FEX package is installed.- Documents: Apple GPU notes say 16K page kernel is not supported (no
muvmsetup); Remote
Play cause names ARM64 streaming client's V4L2 decoder path. .debpackage removal message: Steam ARM client and its files stay.
Known issues
- Java (LWJGL 2) titles on Valve FEX tool FEX-2607: about half of first-start map loads
fail (Java runtime crash, server thread stall or deadlock). Cause lies in FEX; Steam ARM
settings and FEX options do not lower rate. FEX-2609.1 beta: 2 of 10 failed. - 32-bit Source engine titles, native Linux build: loading screen draws, then title hangs.
Windows build through Proton reaches menu and plays on GPU; set it from
Graphics > Route per game > windows. - Armv8.0 CPUs without LSE atomics (Cortex-A53, A57, A72: Raspberry Pi 4, Pi 3): current
client builds crash there
(steam-for-linux #13288);
setup and launcher stop, as in 2.1. - Other 2.1 known issues still apply, except Debian FEX source step (fixed above).
Raspberry Pi
Raspberry Pi OS (Debian 13 base): setup writes FEX source as apt source file (New in 2.2);
tray autostart entry no longer excludes labwc. Both not yet run on Raspberry Pi hardware.
Page-size flow, Raspberry Pi graphics facts and performance tips: COMPATIBILITY.md.
Expectations per game type: GAMES.md.
Full list: CHANGELOG.md.
Test device: RK3588 board with Mali-G610 GPU.
This project is not affiliated with, endorsed by or sponsored by Valve Corporation. Steam,
Proton, Steam Deck and Steam Frame are trademarks of Valve Corporation.
Steam ARM 2.1
Steam ARM 2.1
Renderer check, FEX build per chip, display mode restore, MangoHud in x86 titles, first start progress, and other fixes.
added steam-arm --shutdown
sudo bash steam-arm-install.sh # settings menu: Install / Setup
sudo bash steam-arm-install.sh --defaults # recommended components, no questions
bash steam-arm-install.sh --detect # GPU family and defaults, installs nothing
Upgrades 2.0 in place: client, game library, sign-in, component choices and title profiles
are kept (sudo bash steam-arm-install.sh --keep repeats earlier choices).
Assets
| File | What it is |
|---|---|
Steam.ARM.2.1.zip |
Installer steam-arm-install.sh (settings menu steam-arm-config included) and documents |
Steam.ARM.2.1.zip.sha256 |
SHA-256 of zip |
README.md, CHANGELOG.md, COMPATIBILITY.md, GAMES.md |
Documents, also inside zip |
steam-arm-fex-mesa-26.1.8-x86_64-i386.tar.zst, .sha256 |
Driver archive for gpu-in-emulation, unchanged from 2.0, and its SHA-256 |
Installer downloads driver archive from 2.0 release
(steam-arm-fex-mesa-26.1.8-x86_64-i386.tar.zst);
when that address fails, it tries same file name under releases/latest/download, which
this release contains below. Both copies have same SHA-256, which installer checks.
You don't need to download them :-)
They are board specific.
New in 2.1
- Renderer check. Launch handler logs which device title draws on:
renderer: GPU (<driver> <node>), forwarding to host driver, or
renderer: warning: GPU forwarding not active: rendering on CPU (llvmpipe)with reason.
GPU counts once title allocates GPU memory on it; CPU verdict comes after 30 s. Hardware
report lists renderer lines of five newest starts.STEAM_ARM_RENDERER_CHECK=0turns it
off per title. - Page size up front. Settings menu title bar starts with page size state
(pages 4K ok,pages 4K (setup kernel switch),pages 16K: reboot for 4K,
pages 16K: needs 4K); setup and removal banners name page size and whatpage-size
component does about it. - FEX build matches CPU. Setup picks
fex-emu-armv8.0,fex-emu-armv8.2or
fex-emu-armv8.4from CPU features, same rule as FEX's own installer, and names chosen
build in setup log. - Display mode restore. X11 session: launcher saves mode and position of each output
when title starts and puts them back once no title runs, and when Steam closes.
STEAM_ARM_MODE_RESTORE=0turns it off. steam-arm --shutdown. Asks client to exit, sends SIGTERM after 20 s, never
SIGKILL.--desktopand--bigpictureswitch running client through it.
steam-arm --helpprints launcher usage.- MangoHud in x86 Linux titles.
mangohud %command%,MANGOHUD=1 %command%and
profilemangohud=ondraw HUD in 64-bit titles. kde-input-promptcomponent, off by default. KDE Plasma (Wayland): no "Remote
control requested" prompt when controller drives desktop. Trade-off: every X11 program
may then send input without asking. Turning it off or--removeputs earlier value back.- Profile key
multiblock=on|off. FEX Multiblock per title. Test device, one 32-bit
Unity title: 5 to 9 % higher frame rate, first frame 2 to 4 s later. - Log lines.
compat: warningwhen Steam's saved Proton choice and started build
differ;goldsrc:note on OpenGL or Software renderer in GoldSrc (Half-Life engine)
titles. - Information.
OpenGLline (host renderer and versions) andCPU governorline with
governor and max clock per CPU cluster. - Help page
Fixing a game. Entries "Game is slow (CPU-bound)" and "Proton version
keeps changing back". steam://links. Menu entry declaresx-scheme-handler/steam; links open in
Steam ARM.- Update / Repair asks first. Maintenance > Update / Repair shows
Run/Back
(Back by default) before setup runs. - First start progress. Desktop notification from first click until client opens:
download percentage of client files, then unpacking and installing; later starts show none.
Test device: first start took 102 s, previously with nothing on screen. - Icons before first start. Menu and desktop entries show plain disc icon until client
has downloaded its files, then client's own icon. - CPU check. Setup and launcher stop with clear message on Armv8.0 CPUs without LSE
atomics (Cortex-A53, A57, A72: Raspberry Pi 4, Pi 3): current client builds crash there
(steam-for-linux #13288).STEAM_ARM_ALLOW_ARMV80=1skips check.
Fixed
- CPUs without Armv8.2 features: setup stopped because
fex-emu-armv8.2has no install
candidate there. Setup now installsfex-emu-armv8.0. - Information showed FEX package string, not FEX version, with FEX 2608 and later.
- MangoHud never loaded in x86 titles: handler now loads root filesystem's MangoHud from
client folder. 32-bit titles get no MangoHud (root filesystem has no 32-bit build). - Launch option
mangohud %command%failed (no hostmangohudcommand); setup adds small host shim where MangoHud package is absent. - Title that switched refresh rate (for example 1080p at 24 Hz) left it switched after exit.
- Client that stopped acting on forwarded command lines kept running on
--desktopand
--bigpicture. - Settings restore: Proton/tool per game from backup replaced choice made since; choice
made now wins. - Settings menu: restore summary button read Back but led on to confirm screen (now Next);
Install / Setup Back from parts could skip Vulkan screen; Information showed governor of
first CPU only. - Included profile
248570 overlay=off(custom OpenGL engine title that stops when Steam
overlay attaches), absent since 1.2, restored. - Client in SteamOS mode switched host Bluetooth adapter off at every start. Launcher now
writes host adapter state toSystem/Bluetooth/Enabledinconfig.vdfbefore start,
and at exit powers adapter on again when client left it off. - Components checklist cut off
kde-input-promptlabel; label now fits. - Setup started from folder game user cannot enter (for example
/root) stopped with
"client program missing after unpacking"; steps that run as game user now start in that
user's home folder. - Maintenance > View logs: empty launcher log showed blank page; menu now says log is empty (launcher writes warnings only).
Known issues
- MangoHud draws no HUD in Unity titles on Vulkan renderer.
- Custom OpenGL engine title with included
overlay=offprofile (app 248570) stops about
20 s in when MangoHud is loaded; leave MangoHud off for it. steam://rungameid/<appid>for title not in library can leave install dialog over games
started later; restart Steam to clear it.powerprofilesctl launch -p performance -- %command%holds profile only when Steam was
started from desktop session (menu or autostart); started from other context, hold is
refused and title does not start.- Raspberry Pi OS and other Debian systems: setup adds FEX package source with
add-apt-repository ppa:fex-emu/fex, which works on Ubuntu only; on Debian, FEX step
fails. Fix planned for 2.2.
Raspberry Pi 5
Page-size flow, renderer line, Raspberry Pi graphics facts and performance tips:
COMPATIBILITY.md, sections Raspberry Pi and Raspberry Pi 5 performance tips. Expectations
per game type and community reports: GAMES.md, section Raspberry Pi 5. Read
renderer line in title's log first: CPU warning there means GPU forwarding is not active.
Full list: CHANGELOG.md.
Test device: RK3588 board with Mali-G610 GPU.
This project is not affiliated with, endorsed by or sponsored by Valve Corporation. Steam,
Proton, Steam Deck and Steam Frame are trademarks of Valve Corporation.
steam-arm-v2.0
Steam Frame's Client Installer for ARM64 Systems
New in v2.0 :
- GPU family detection
- settings menu
steam-arm-config - PhysX install step skip
- Full uninstaller
- Graphics route per game title with Mali* drivers inside emulation
*if applicable
sudo bash steam-arm-install.sh # settings menu: Install / Setup
sudo bash steam-arm-install.sh --defaults # recommended components, no questions
bash steam-arm-install.sh --detect # GPU family and defaults, installs nothing
Upgrades 1.2 in place: existing client, game library, sign-in, component choices and local
title profiles are kept.
Refreshed interface:
Assets
Tag steam-arm-v2.0. Installer downloads driver archive from this release; when that
address fails, it tries same file name under releases/latest/download.
| File | What it is |
|---|---|
Steam.ARM.2.0.zip |
Installer steam-arm-install.sh (settings menu steam-arm-config included) and documents |
README.md, HOW-IT-WORKS.md, CHANGELOG.md, FEATURES.md, COMPATIBILITY.md, GAMES.md, RESEARCH.md, COMPARISON.md, CREDITS.md |
Documents, also inside zip |
steam-arm-fex-mesa-26.1.8-x86_64-i386.tar.zst |
Driver archive for gpu-in-emulation component: Mesa 26.1.8 (Panfrost, PanVK) built for x86-64 and i386. Installer downloads it when component is selected (default on Mali GPUs) |
steam-arm-fex-mesa-26.1.8-x86_64-i386.tar.zst.sha256 |
SHA-256 of driver archive; installer checks same value |
Highlights
-
GPU family detection.
Example:
Installer reads kernel driver, Mali GPU id, device tree and PCI
vendor of each render node and picks one of 27 GPU families (Mali, Adreno, Apple,
Raspberry Pi, Vivante, PowerVR, AMD, NVIDIA, Intel, virtual GPU), ornoneorunknown.
Family sets default state ofvk-spoof,gpu-in-emulationandglx-lax: Mali
components on by default on Mali GPUs, off elsewhere.--detectprints family, drivers,
page size and defaults without installing;GPU_FAMILY=idsets family by hand. -
Settings menu
steam-arm-config. -
Ten sections: Information, Install / Setup,
Components, Graphics, Games, Controllers, Remote Play, Maintenance, Uninstall,
Help / About. Installer opens it when started in terminal with no options. Subcommands
for scripts:info,report,gfx,gfx-default,profile,compat,components,
help fixing. -
Graphics route per title.
-
Forwarding (OpenGL and Vulkan calls to system Mesa) for
most titles;
Example: Mali drivers inside emulation for Java titles, and for 32-bit titles started
with-vulkanor-force-vulkanon Mali-G610 class and Mali 5th gen. Profile key
gfx=aorgfx=boverrides per title;GFX_DEFAULT=auto|a|bsets default. -
Custom driver archive.
-
Opt-in for advanced users: own Mesa build for
gpu-in-emulationthroughSTEAM_ARM_PROVIDER_TARBALLandSTEAM_ARM_PROVIDER_SHA256.
GitHub source includes build recipetools/build-driver-archive.shand Actions workflow
"Build driver archive". Results depend on Mesa and kernel versions. -
Fixing a gamehelp page. In menu andsteam-arm-config help fixing: launch options
that work, what to avoid, what cannot be fixed, and how to read handler's log lines
(launch option kept,title setting kept). -
PhysX install step. Launcher marks legacy PhysX install step done in title's Proton
prefix; before prefix exists, PhysX installer running over 60 seconds gets SIGTERM(configurable). -
Uninstaller.
--removeremoves everything installer added and restores changed
system settings; installed games stay unless deletion is confirmed by typingDELETE.
--remove --purgealso deletes client folder and root filesystem setup downloaded. -
Controllers. Valve's
steam-devicesrules, plus 241 pads from kernelxpadtable
that Valve's list lacks; Sony and Nintendo pads matched by kernel pad driver.
Graphics route per title
gpu-in-emulation component, on by default on Mali GPUs, provides Mali drivers inside
emulation: x86-64 and i386 Mesa 26.1.8 in second copy of root filesystem, same layout
Valve uses on Steam Frame, about 330 MB extra disk. Root filesystem used for forwarding
stays unchanged. STEAM_ARM_PROVIDER_TARBALL=file points installer at downloaded archive
in place of its download; other steps still need network. When release file answers HTTP
404 at both addresses, setup stops with message naming that file and
STEAM_ARM_PROVIDER_TARBALL.
Custom driver archive, for advanced users: STEAM_ARM_PROVIDER_TARBALL=/path with
STEAM_ARM_PROVIDER_SHA256=<sha256>. Setup checks checksum and layout, prints warning,
and keeps archive across repair and update; --provider-default switches back. With it,
gfx=b and GFX_DEFAULT=b apply on any GPU; automatic rules stay Mali-only, and on
published archive gfx=b on non-Mali GPU means forwarding plus warning.
BYOD(build your own driver):
tools/build-driver-archive.sh (x86-64 Linux PC, about 25 GB disk, network, no root)
Other changes
- Settings menu: built-in full-screen screens with textured background and light dialog
box, falling back todialog,whiptailor plain prompts
(STEAM_ARM_DIALOG=builtin|dialog|whiptail|read); cursor returns to item chosen last;
setup summary leaves out download line when client is present. - Launcher starts client again when it exits after applying its own update, at most
twice. - Launch handler log names values in effect for Unity and Godot (renderer, GL version);
onlyFEX_APP_CONFIGlaunch option counts as user choice for Multiblock, so Steam's
per-title FEX setting does not stop Java 21+ rule. GPU_FAMILY=<unknown id> --detectwarns, lists valid ids and exits with status 0;
install still stops.page-sizecomponent listed only on Raspberry Pi 5 class boards, or on Pi with page
size other than 4K.- Unfinished x86 root filesystem extraction from stopped earlier run discarded, or
extracted again from downloaded.sqsh. --password-stdin: password of account setup creates, from standard input; never
printed or logged.- Package-install guard:
apt,apt-getanddpkginside x86 emulation refuse and
change nothing, since FEX writes reach host system; original kept as
<tool>.steam-arm-real. --removealso removes settings menu and installer copy, restores Valve's streaming
client and package tools of root filesystem, turns lingering off only when setup turned
it on, saves game profiles to/var/backups, and printssudo userdel -r <name>for
account setup created..debremoval prints how to remove installed client.- Security hardening: writes in game account's home done as that account, client folder
path validated, sudo rule checked withvisudo, Valve's files and settings edited
through new file renamed over old one, temporary files removed on exit, client package
and driver archive checked against checksums. --replace-otherretires other variant of this installer before setup: system files to
/var/backups/steam-arm-replaced-<date>.tar, files from its account's home to
steam-arm-replaced-<date>-<user>.tar, restored with
sudo -u <user> tar -xpf <archive> -C /.- Setup refuses to run twice at once, and install, repair and component changes refuse
while Steam ARM runs for game account (Steam is running for '<user>').steam-arm
refuses to run as root. --removedeletes client folder only when it holds marker.steam-arm-client, which
setup writes from 2.0 on, only into folder that was new, empty, already marked or
earlier Steam ARM client folder; folder withsteamappsorubuntu12_32at top level
is refused, older client folder without marker kept./dev/shmline goes out of
/etc/fstabonly when setup added it; kept line is reported.- GPU components follow GPU family change, except those set by hand.
steam-arm-compatmaprefuses while Steam runs and on bad input, and keeps first
original asconfig.vdf.bak-steam-arm.glx-laxrebuilds itself after every Mesa upgrade through apt hook.- FEX tool 2609 and later needs no
ThunksDB.jsonedit; FEX logging off. - First client download from Valve's stable ARM64 channel;
publicbetano longer written. - Fixed: GLX copy and Vulkan layer enabled when deselected; sudo rule written without
pad-xbox; account creation on systems withoutrendergroup; no notice when account
gained groups; Vulkan titles with Steam overlay hung at start when overlay layer was
registered twice;steam-armrun from account other than setup account, or before setup
finished, printed file errors instead of naming fix.
Known issues
- Direct3D 12, Unreal Engine 5, Unreal Engine 4 Direct3D 11 and Unity HDRP titles do not
run on Mali: PanVK lacks features they need. Details inCOMPATIBILITY.md. - 32-bit Linux title that includes DXVK Native: device on Mali, title then stops at loading
screen, as with its OpenGL renderer. - Godot 3 titles need profile
env=MESA_GL_VERSION_OVERRIDE=3.3;MESA_GLSL_VERSION_OVERRIDE=330. - Client can stay on "Starting launch" or black "Abort game" screen after title exits;
exiting client and starting it again clears it. - Proton ARM64 titles: MangoHud and Steam overlay each crash title at start.
- Remote Play: Shift+Tab goes to host PC; use controller Steam button.
Full list: CHANGELOG.md.
Test device: RK3588 board with Mali-G610 GPU.
This project is not affiliated with, endorsed by or sponsored by Valve Corporation. Steam,
Proton, Steam Deck and Steam Fr...
steam-arm v1.2
steam-arm 1.2
sudo bash steam-arm-install.sh
Upgrades 1.1 in place: existing client, game library, sign-in, component choices and local
title profiles are kept. Re-run of 1.1 over 1.2 goes back cleanly as well.
Memory leak fixed
Steam overlay leaves two 25 MB frame buffers in /dev/shm for every game session, and client's
web helper keeps them mapped until client restarts. Memory shrank with each game started, and
1.1 advised restarting client after long run of sessions. 1.2's launcher frees their pages
within about 2 minutes of last game ending (hole punched; files and mappings stay valid). Test:
/dev/shm back from 205 MB to 55 MB one minute after third session; client kept running and
next game started normally.
32-bit titles
- Handler removes
-vulkanand-force-vulkanfrom 32-bit titles. FEX forwards Vulkan for
64-bit code only, so these options put 32-bit title on CPU renderer. Profile keyvk32=keep
keeps them. - Titles started through start script (Source engine style) are detected by binary script starts,
so 32-bit, Unity and Godot rules apply to them. - New profile key
gl32=off: title not detected as 64-bit runs on x86 Mesa inside
emulation instead of forwarded host Mesa. Slower; for titles forwarding breaks. - New keys are documented in README and
RESEARCH.md; existing/etc/steam-arm/titles.conf
keeps its header, installer writes that file only when absent.
Other
- Profile
argscount for Unity and Godot renderer rules: profile's own-force-glcoreor
--rendering-driverwins, handler adds no second renderer option. - Source 2 titles get warning in log; launch unchanged.
- Installer started with no controlling terminal in desktop session shows component
checklist as dialog. RESEARCH.md: researched, untested settings per GPU family, engine and title, each with what
to change. Research AI-assisted; file says how it was done and what was tested.
Known issues
- Proton ARM64 titles: MangoHud and Steam overlay each crash title at start.
- 32-bit Source engine title, native Linux build: deadlocks at loading screen, all threads waiting.
Same withgl32=off, FEX Multiblock off,-nosoundand TSO forced on; GL forwarding is not
cause. Proton build runs, slowly. - Remote Play: Shift+Tab goes to host PC; use controller Steam button.
Full list: CHANGELOG.md.
This project is not affiliated with, endorsed by or sponsored by Valve Corporation. Steam,
Proton, Steam Deck and Steam Frame are trademarks of Valve Corporation.
steam-arm v1.1
sudo bash steam-arm-install.sh
Installer is now one script. Same options as v1.0
(--help, --list, --select, --skip); .deb still builds from source with build-deb.sh.
Upgrades 1.0 in place: existing client, game library, sign-in and component choices are kept.
1.0 package can stay, or sudo apt remove steam-arm-setup removes installer package only;
Steam client, games and settings stay.
Steam overlay and MangoHud in x86 titles
Valve's FEX compatibility tool removes LD_PRELOAD before every x86 title, which takes Steam
overlay and MangoHud with it. 1.1 replaces that step with launch handler that decides per title,
with no launch options:
- Steam overlay on for Linux x86 titles. OpenGL titles: Shift+Tab.
- Vulkan titles: title
profileoverlay=vulkanadds arm64 overlay layer; controller Steam button opens it. - MangoHud:
mangohud %command%orMANGOHUD=1 %command%, OpenGL and Vulkan. - Godot 4 titles run on OpenGL renderer; Vulkan renderer freezes on splash on PanVK.
- Unity titles: Vulkan renderer (
-force-vulkan) where player carries it, else GL 4.5 report, since Unity's OpenGL core context asks for more than Panfrost's 3.1; 32-bit Unity players with Steam overlay off, as title stops when overlay attaches. - Direct3D 8 titles under Proton run through DXVK's
d3d8; wined3d draws them wrong on Mali. - Title profiles in
/etc/steam-arm/titles.conf; if handler fails, Valve's behaviour applies.
Fixed
- Every title failed to start, with
Bus error, after many game sessions:/dev/shmfilled with
segments Steam overlay left behind. Launcher now clears unmapped ones at start and every minute;
segmentssteamwebhelperstill maps are reclaimed at next client start, so restart client
after long run of sessions. - Titles drew on CPU renderer after fresh install until next client start: GL and Vulkan
forwarding is now applied within one second of client downloading its FEX tool. - Steam overlay UI crashed on every start: launcher puts client's directory on library path.
- Desktop windows had no title bar until next login; menu icon missing on fresh install.
- Installer created account from saved setting naming account absent on system. Such setting now
gets ignored with warning, and installer picks desktop user.
Known issues
- Proton ARM64 titles: MangoHud and Steam overlay each crash title at start. Leave
MANGOHUD
unset for them. - 32-bit x86 titles get GPU through OpenGL only; Vulkan in 32-bit titles falls back to CPU
renderer, so avoid-vulkanlaunch option for them. - Half-Life: Source, native Linux build: stops on loading screen on Mali-G610 test board under
every OpenGL setting tried. Proton build runs, slowly. - Remote Play: Shift+Tab goes to host PC; use controller Steam button.
Page size
Emulation half needs 4K pages: x86 code assumes them, and emulator refuses to start on 16K or
64K kernel. 1.0 installed everything on such system and failed at first title. 1.1 checks
getconf PAGESIZE before it installs anything.
| System | Page size | 1.1 does |
|---|---|---|
| Most ARM64 boards | 4K | continues as before |
| Raspberry Pi 5 | 16K by default | page-size component selects firmware's 4K kernel, then asks for reboot and second run |
| Apple Silicon under Asahi | 16K | stops: kernel stays 16K there, x86 side needs 4K virtual machine such as muvm, which this installer does not set up |
| Servers such as Grace | 64K | stops: boot 4K page kernel from distribution first |
STEAM_ARM_IGNORE_PAGESIZE=1 skips check, for system that runs x86 side inside its own 4K
environment.
page-size component
On by default, no effect outside Raspberry Pi. On Pi with 16K page kernel it:
- stops if
config.txtalready setskernel=, or ifkernel8.imgis missing, and says what to change - keeps copy of
config.txtasconfig.txt.steam-arm.bak - adds
kernel=kernel8.imgunder[all], in block marked with comment - stops and asks for reboot; second run of installer installs
Deselecting page-size on later run removes block again. Pi path is written against Raspberry
Pi firmware layout and has not run on Pi hardware; check and file edit are tested with
simulated systems, and 4K path on RK3588 board.
Desktop interface
- Power menu's Switch to Desktop runs
steamos-session-select. 1.1 provides that command; it restarts client in desktop interface. - New
desktop-modecomponent: menu entry "Steam ARM (Desktop mode)", found by searching "desktop" or "sign in". Opening it while Big Picture runs restarts client in desktop interface. - Desktop icons and tray icon are components of their own:
icon-bigpicture,icon-desktop,tray. Pick either icon, both or none. - Main entry's right-click menu opens either interface.
Icons and tray
- 1.0 made menu icon by inverting x86 Steam icon from rootfs, which fresh rootfs does not carry, so fresh install had no icon. 1.1 draws them from client's own
steam_tray.icoduring first start, once client has downloaded it: dark, grainy green disc with small squares of vivid colour, chartreuse logo for Big Picture, bone logo for desktop mode. Nothing is bundled. - Tray icon starts with client, not only at next login.
- Desktop windows get window manager's title bar at once: setup tells KWin to reload its rules after writing frame rule. 1.0 left windows without frame until next login.
Other
- Component checklist shows all twelve components without scrolling.
- Installed games are kept: installing, re-running, changing components and upgrading leave game library, sign-in and settings untouched.
Full list: CHANGELOG.md.
This project is not affiliated with, endorsed by or sponsored by Valve Corporation. Steam,
Proton, Steam Deck and Steam Frame are trademarks of Valve Corporation.
steam-arm-v1
Steam-ARM · ARM64 Steam Client Installer
Feature list :
The Steam Frame's ARM64 (VR) client · runs on host GPU as ARM program · x86 titles through emulation with graphics forwarded to native drivers · Windows titles through ARM64 Proton · Remote Play with software decode · controller access rules
This is an ARM64 Steam client installer.
Provides:
| Component | Scope | Note |
|---|---|---|
glx-lax |
Mesa specific | Addresses Mesa client library limit with titles that bind one OpenGL context from several threads. |
vk-spoof |
Mali specific | Written for PanVK Vulkan driver on Mali; not needed on other Vulkan drivers. |
map-count |
Generic | Raises vm.max_map_count; applies to any Linux system running Proton. |
xpad-dedup |
Generic | Applies to any system where kernel exposes duplicate joystick node for pad. |
pad-hidraw |
Generic | Applies to any system using kernel xpad driver's device list. |
pad-xbox |
Generic | Applies to any XInput pad from maker other than Microsoft. |
desktop |
Generic | Application menu entry and desktop icon; no hardware dependency. |
Client
- Native ARM64 build of Steam client; Produced by Valve for the Steam Frame ARM based VR headset.
- Client package downloads from Valve on first start, then client restarts itself; sign in from Big Picture or click the power button in big picture mode and go to Desktop Mode.
- Installs into desktop user account, not root: first regular account on system (uid 1000) by default,
GAMEUSERto choose another; account is created only when none exists, with generated password printed once - Own home directory under game user's account (
.local/share/steam-armby default,ARMHOME_DIRin/etc/steam-arm/steam-arm.conf) and own library, so it coexists with x86 client from other routes; run one at time steam-armlaunches Deck interface;steam-arm --desktoplaunches desktop interface,--bigpictureforces Deck interface,STEAM_ARM_UI=desktopin/etc/steam-arm/steam-arm.confmakes desktop defaultsteam-arm-tray: Steam icon in panel tray with Open, Open in desktop mode, Stop and Quit, started with session through autostart entry; this client build registers no tray item of its own- Window rule for KDE: client draws its own frame and asks window manager for none, and this build does not move window when that frame is dragged; rule gives client's normal windows manager's frame so they move and resize like any other window; Big Picture is fullscreen and unaffected
Games
- x86 Linux titles run through emulation tool client downloads, against x86-64 Ubuntu 24.04 root filesystem installer prepares at
/opt/fex-rootfs - Windows titles run through ARM64 Proton build client downloads; Direct3D through DXVK
steam-arm-compatmap <appid> <tool>: pins title to compatibility tool in client's stored configuration, for title with Linux build on record but Windows files installed- Titles protected by anti-cheat do not run: anti-cheat and DRM components require system call filter emulator does not implement
Graphics
- OpenGL and Vulkan calls from emulated guest forwarded to host's native Mesa libraries through FEX thunks, not emulated; host thunks at
/usr/lib/aarch64-linux-gnu/fex-emu/HostThunks, guest thunks at/usr/share/fex-emu/GuestThunks, root filesystem linked as/usr/share/guestos/fex-mesa - FEX
Multiblockenabled in game user's FEX configuration glx-laxcomponent: private copy of Mesa GLX client library,libGLX_steamarmlax.so.0, with one check relaxed, for titles that bind single OpenGL context from more than one thread; rebuilt against system Mesa when that library changes, own library name throughpatchelfso system copy is untouchedvk-spoofcomponent: implicit Vulkan layerVK_LAYER_STEAM_ARM_feature_spoof, built from source at install, reports device features DXVK lists as mandatory and Mali driver does not expose, then removes them again from device creation; self-check throughvulkaninfowhen presentmap-countcomponent:vm.max_map_count = 2147483642in/etc/sysctl.d/zz-steam-arm.conf, value Proton expects;zz-name so it is read after/etc/sysctl.conf
Remote Play
- Streaming runs package's x86-64 streaming client under system emulator, with software decoding
steam-arm-remoteplaypins hardware decoding off and HEVC off in client's stored configuration, so host keeps to H.264 and software decoder; streaming client decodes through Vulkan Video, which Mali driver does not provide, and with hardware decoding advertised session can sit on launch screen and never finish negotiating- Launcher applies setting before every start, including first;
--checkreports without changing anything - Game window in background on host renders nothing new, so stream shows one frame and takes no input; keep game in foreground on host
Controllers
pad-hidrawcomponent:/etc/udev/rules.d/60-steam-arm-gamepad-hidraw.ruleshands pad's/dev/hidrawnode and/dev/uinputto logged-in user, so client reads pad directly for rumble and battery level; covers every pad kernelxpaddriver recognises, 243 devices, matched on vendor and product so keyboards and mice from same makers stay excludedxpad-dedupcomponent:/etc/udev/rules.d/71-steam-arm-xpad-dedup.rulesunbinds driver from headset interface some third-party Xbox 360 style pads expose, so one pad is one joystick and two-player game does not hand player 2 copy of player 1;steam-arm-xpad-dedupdoes same for pads already connectedpad-xboxcomponent, off by default:steam-arm-pad-xbox.servicepresents XInput pads from other makers as Xbox 360 pads throughuinput; off because client's own Steam Input re-identifies pads, and launcher pauses service while client runs in case another route enabled it
Emulation
- FEX-Emu installed from project's PPA:
fex-emu-armv8.2, 32-bit and 64-bit binfmt steam-arm-fex-binfmt.service: FEX owns x86 execution persistently; box64 and box32 binfmt registrations off while it runs- x86-64 root filesystem: Ubuntu 24.04, prepared by installer at
/opt/fex-rootfs/Ubuntu_24_04; about 2 GB - Client's runtime container built through
bubblewrap
Installer
- Package:
steam-arm-setup_1.0_arm64.deb, installs commandsteam-arm-setupand installer script; nothing downloads at package install sudo steam-arm-setupinstalls core (host packages, root filesystem and graphics provider, client package, launcher) and offers optional components:glx-lax,vk-spoof,map-count,xpad-dedup,pad-hidraw,pad-xbox,desktop- Component choice through keyboard checklist, or
--select a,b,--skip a,b,--defaults;--listprints components - Idempotent: re-running refreshes every file, and component deselected on re-run is removed again
desktopcomponent: application menu entry and desktop icon for account client installs into- Header names no board; same script runs on its own or from units, TTY gated,
NO_COLORhonoured - Removal: re-run with components deselected, or delete client's directory in account it installed into;
apt purge steam-arm-setupremoves package
Requirements
- ARM64 system with working Vulkan driver; Debian or Ubuntu family distribution, since installer uses
apt - Mesa graphics stack for
glx-lax;vk-spoofwritten for PanVK on Mali - Ubuntu family system for FEX PPA; other systems need FEX from another source
- No hardcoded GPU render node, card index or board detection
Compatibility
- Tested on one device: H96 Max V58, RK3588 board with Mali-G610 GPU
COMPATIBILITY.mdrecords what has and has not been tested, per device class and per driver
How routes compare
Legend: ✅ yes
| Route | Client itself is native ARM | Installs onto your system | Mali and PanVK | Adreno | Apple GPU | Remote Play handled |
|---|---|---|---|---|---|---|
| This package | ✅ | ✅ host, no sandbox | ✅ tested on one RK3588 board | vk-spoof |
✅ decode pinned before first start | |
| Canonical arm64 Steam snap | ❌ x86 client under FEX | ❌ open issue #471 since 2026-01-10 | ❓ | ❓ | ||
| Box86 and Box64 | ❌ x86 client under Box64 | ✅ host | ✅ long standing SBC route | ✅ | ❓ | ❓ |
| steamclienttermux, Android | ✅ | ❌ Adreno only | ✅ Turnip | ❌ | ❓ | |
| ROCKNIX and pocknix-os | ✅ | ❌ replaces OS | ❌ Snapdragon only | ✅ | ❌ | ❓ |
UbuntuAsahi steam-arm64 |
✅ | ✅ host, in microVM | ❌ | ❌ | ✅ Honeykrisp | ❓ |
| Windows on ARM, Prism | ❌ x86 under Prism | ✅ host | ❌ | ✅ Snapdragon X | ❌ | ✅ native to Windows |
| macOS on Apple Silicon | ✅ since 2025-06 beta | ✅ host | ❌ | ❌ | ✅ | ✅ |
Reading table: routes that run native client are this package, Android and
handheld projects, UbuntuAsahi, and macOS. Of those, everything except this one targets
Adreno or Apple GPUs. Routes that cover Mali at all run x86 client under
emulation, or fail on driver.
Not included
- Anti-cheat titles
- VR runtime; Steam Frame's runtime is not part of this package
- Steam client, emulation tool, root filesystem, Proton: all downloaded at run time from their own sources, none bundled
This project is not affiliated with, endorsed by or sponsored by Valve Corporation. Steam, Proton, Steam Deck an...