Skip to content

steam-arm-v2.0

Choose a tag to compare

@Scrumpper Scrumpper released this 02 Oct 01:28
· 20 commits to main since this release
7e5e47d

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:

1 image 2

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), or none or unknown.
    Family sets default state of vk-spoof, gpu-in-emulation and glx-lax: Mali
    components on by default on Mali GPUs, off elsewhere. --detect prints family, drivers,
    page size and defaults without installing; GPU_FAMILY=id sets 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 -vulkan or -force-vulkan on Mali-G610 class and Mali 5th gen. Profile key
    gfx=a or gfx=b overrides per title; GFX_DEFAULT=auto|a|b sets default.

  • Custom driver archive.

  • Opt-in for advanced users: own Mesa build for
    gpu-in-emulation through STEAM_ARM_PROVIDER_TARBALL and STEAM_ARM_PROVIDER_SHA256.
    GitHub source includes build recipe tools/build-driver-archive.sh and Actions workflow
    "Build driver archive". Results depend on Mesa and kernel versions.

  • Fixing a game help page. In menu and steam-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. --remove removes everything installer added and restores changed
    system settings; installed games stay unless deletion is confirmed by typing DELETE.
    --remove --purge also deletes client folder and root filesystem setup downloaded.

  • Controllers. Valve's steam-devices rules, plus 241 pads from kernel xpad table
    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 to dialog, whiptail or 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);
    only FEX_APP_CONFIG launch option counts as user choice for Multiblock, so Steam's
    per-title FEX setting does not stop Java 21+ rule.
  • GPU_FAMILY=<unknown id> --detect warns, lists valid ids and exits with status 0;
    install still stops.
  • page-size component 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-get and dpkg inside x86 emulation refuse and
    change nothing, since FEX writes reach host system; original kept as
    <tool>.steam-arm-real.
  • --remove also 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 prints sudo userdel -r <name> for
    account setup created. .deb removal 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 with visudo, 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-other retires 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.
  • --remove deletes 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 with steamapps or ubuntu12_32 at top level
    is refused, older client folder without marker kept. /dev/shm line goes out of
    /etc/fstab only when setup added it; kept line is reported.
  • GPU components follow GPU family change, except those set by hand.
  • steam-arm-compatmap refuses while Steam runs and on bad input, and keeps first
    original as config.vdf.bak-steam-arm.
  • glx-lax rebuilds itself after every Mesa upgrade through apt hook.
  • FEX tool 2609 and later needs no ThunksDB.json edit; FEX logging off.
  • First client download from Valve's stable ARM64 channel; publicbeta no longer written.
  • Fixed: GLX copy and Vulkan layer enabled when deselected; sudo rule written without
    pad-xbox; account creation on systems without render group; no notice when account
    gained groups; Vulkan titles with Steam overlay hung at start when overlay layer was
    registered twice; steam-arm run 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 in COMPATIBILITY.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 Frame are trademarks of Valve Corporation.