# Bannerlator 3.1.3
Run Windows apps and games on Android โ no PC and no root required.
**3.1.3 runs Valve's real Steam client inside Bannerlator.** Valve makes a native ARM64 Linux version of Steam, and Bannerlator can now run it as an optional extra, the **Steam (Linux)** entry: sign in, browse, download and play your library in Big Picture or the desktop UI, with the overlay, friends and cloud saves, and games running through Valve's own ARM64 Proton. You can drive it with a controller or with your fingers on the touch screen. A new **Components** tab lets you swap FEX, DXVK and VKD3D per Proton. Proton is ready the first time you sign in, and the games from your Games tab show up in Steam with shared saves. For everyone else, 3.1.3 fixes the crash when adding an .exe to Shortcuts.
> ๐งช **The Linux Steam client is EXPERIMENTAL and optional. Please read this before you download it.**
>
> - **Nothing changes unless you turn it on.** It is a separate download (**Contents โ Linux Runtime**, about 755 MB). Your Wine containers, games and shortcuts work exactly as before, whether you get it or not.
> - **Adreno (Snapdragon) only.** It draws with Turnip. On Mali, Xclipse and PowerVR phones you get sound over a black screen. **Contents โ Linux Runtime** warns you before the download.
> - **Turn on "Disable child process restrictions"** in Android's Developer options first. The Steam client runs dozens of processes. Without that switch, Android kills them at random and the session just dies. The Linux Runtime tab tells you when it is still on. Some phones don't have the switch at all, and on those the client won't stay up yet.
> - **Don't run the same game in the app and in the Steam client at the same time.** With shared saves, both would write to the same folders.
> - **It was proven on one device**, an AYANEO Pocket FIT. Reports from other phones, with the session folder from `Download/Bannerlator-LinuxSteam/`, help most.
> ๐ **New to LSFG Native? Read the plain-language guide: [LSFG Native Made Simple](https://the412banner.github.io/Bannerlator/lsfg-native-guide.html)** โ why Max FPS ร multiplier has to fit your screen's refresh rate, why a steady base matters, a live checker, a cheat sheet and real-world fixes. The same rule applies to **Win-FG Native**, which always runs at 2ร.
๐ Setting up the Linux Steam client โ new install, or upgrading (tap to expand)
### ๐ First time
1. **Install this APK** over 3.1.2 (your data is kept) or fresh. Take **standard** unless you already use the pubg or ludashi build.
2. **Android Settings โ Developer options โ Disable child process restrictions โ on.** No Developer options? Go to **Settings โ About phone** and tap **Build number** seven times.
3. **In the app: Contents โ Linux Runtime โ Download.** One download, about 755 MB. When it finishes, a **Steam (Linux)** entry appears in your games list.
4. **Tap Steam (Linux).** The first start takes a few minutes. A loading screen first downloads **Proton Experimental (ARM64)** (about 400 MB), then lets Steam download and update itself. There's a clock on screen so you know it's still working.
5. **Sign in.** A password or the QR code with the Steam mobile app both work.
6. **Install a game and play.** There's nothing to pick and no restart to wait for, because Proton is already there.
If the Proton download on the loading screen fails, the app skips it and Steam fetches Proton itself instead, the way the pre-releases did. In that case, watch for the **Proton Experimental (ARM64)** install box, let the client **restart itself once**, and only then install a game. A game installed before that restart fails to launch.
### โฌ๏ธ Upgrading
- **From 3.1.2:** install over. Nothing else changes until you download the Linux Runtime.
- **From a 3.1.3 pre-release:** install over. You stay signed in, and your games, Proton and settings are kept.
- **From the September 21 test build:** install over, then open **Contents โ Linux Runtime** once. That moves the Steam (Linux) entry out of its old Wine container and carries your settings over. **Don't remove or re-download the runtime.**
### โ๏ธ Worth knowing
The โ๏ธ next to **Steam (Linux)** holds its settings: resolution (720p by default, because Steam's own interface is the most expensive thing it draws), drivers, cores, audio, frame generation, the HUD, **Touch**, **Components**, **Your games in Steam** and the Steam client update channel. **GE-Proton** and **proton-cachyos** (ARM64 builds) can be downloaded in **Contents โ Linux Runtime** and picked per game on Steam's own *Compatibility* page.
# What's New โ everything since 3.1.2
## ๐ง The real Steam client, on your phone
Bannerlator now runs Valve's own **native ARM64 Linux Steam client**. It runs inside a small Arch Linux ARM system under Valve's **gamescope**, drawn through the Wayland compositor that 3.1.2 introduced.
- โ **It's the real client:** sign-in (password, QR, Steam Guard), the library, the store, downloads with Steam's own resume and verify, cloud saves, the overlay, friends and chat, Big Picture and the desktop UI, controller setup and the shader pre-cache.
- โ **Games run through Valve's ARM64 Proton.** Wine, DXVK, VKD3D and FEX are Valve's own and matched to each other; only the Turnip driver is ours. Your owned games and the BattlEye / EAC anti-cheat runtimes are set to it automatically.
- โ **No Wine container.** Steam (Linux) is its own entry with its own settings, and it never touches your containers.
- โ **One set of game folders.** The app's game folders (phone and SD card) are Steam's library folders. A game the app installed shows as installed in Steam, a game Steam installs lands where the app would put it, and nothing is copied twice. Uninstalling in Steam frees the game in the app too.
- โ **Games seen running on the Pocket FIT:** the Source games, GTA V (Legacy), NFS Most Wanted and Payback, FlatOut 1 and 2, Brawlhalla, DiRT Showdown, Titanfall 2 and DOOM I Enhanced.
- โ **Steam updates no longer fail with "Missing file privileges"** when Steam left some of its own files read-only. Proven by updating Proton over 2,471 locked files: it finished with no error.
- โ **Steam's interface draws on the GPU.** A library call that can't work on Android was quietly crashing the interface's GPU process, so Steam fell back to drawing on the CPU. With that fixed, scrolling the Big Picture library went from about 44 fps to 85 on a OnePlus 15, and reads 117โ138 fps on the Pocket FIT. (Found by maxjivi05 in WinNative.)
## ๐งญ Ready to play at first sign-in
- โ **Proton is ready before you sign in.** On the first session the app downloads and places **Proton Experimental (ARM64)** (about 400 MB) on the loading screen. There's no install box, no storage question and no client restart. Steam keeps it updated afterwards. This also closes the old first-run trap, where a game installed too early pulled in about 1.7 GB of tools it couldn't use.
- โ **A loading screen** stays up until Steam draws its first frame. It shows what's happening, the download progress, a clock and a hint.
- โ **Warnings before the 755 MB download:** the Linux Runtime tab tells you if your GPU isn't an Adreno, or if Android's child-process limit is still on (with a button to Developer options where Android has one).
- โ **A fresh install starts on Turnip.** It used to start on a driver that shows a black screen. Opening the Steam (Linux) settings on a fresh install no longer crashes.
- โ **No more instant death when the runtime's proot is missing.** In that case the app falls back to the proot copy in the APK, but it was giving that copy an option it doesn't understand, so the session died with nothing on screen. That's fixed.
## ๐ Real touch in Big Picture
The Steam (Linux) settings have a new **Touch** setting in the Steam client block, and the same setting is live in the in-game drawer (**Graphics** tab, **Steam client** section):
- **App setting (the Touchscreen switch):** follows the app's usual touchscreen switch.
- **Touchscreen:** your fingers go straight to Steam, so you drag lists and tap buttons like on any touch app. It works with the on-screen controls showing too.
- **Touchpad:** the screen works like a laptop touchpad. A finger moves the pointer and a tap clicks. The drawer's **Cursor to Touch** now works in this mode and puts the pointer under your finger.
It uses a patched gamescope (3.16.29-p3, with DroidDeck's touch patches).
> โ **Device-tested** on the Pocket FIT: dragging and tapping through Big Picture's menus.
## ๐งฉ Components: swap FEX, DXVK and VKD3D per Proton
A new **Components** tab in the Steam (Linux) settings, plus a **Components** section in the in-game drawer (only in a Steam (Linux) session):
- Pick a **FEX**, **DXVK** or **VKD3D-Proton** for each Linux Proton: **Proton Experimental (ARM64)**, **GE-Proton (aarch64)** or **proton-cachyos (arm64)**. Only Protons a game can actually be set to are listed.
- Get them from the **Nightlies** (**Check the Nightlies**) or **Import a .wcpโฆ** you already have.
- Each Proton's own files are kept as its **Original**, so you can always put them back.
- Your choices are re-applied every time a game starts, so they stick even after Steam updates Proton. A swap made while a game is running on that Proton waits until the game closes.
> โ **Device-tested** with FlatOut on GE-Proton, with FEX 2609 and DXVK 2.4.1 gplasync swapped in. Both were confirmed loaded in the game.
## ๐ฎ Your Games-tab games inside Steam
The games you added in the app's **Games** tab show up in Steam's library under **Non-Steam**, with artwork, and you can start them from Big Picture, the desktop UI or a controller.
- โ **Shared saves.** A game's **Documents**, **AppData** and **Saved Games** folders are shared with its container, so progress carries over both ways. **Titanfall 2 loaded a save made in the app.** A folder that already had something in it is renamed and kept, never deleted.
- โ ๏ธ **They run with Valve's Proton, not the app's own Wine, FEX settings and preset**, so not every game runs. DOOM I Enhanced and Titanfall 2 do. Insane 2 crashes, and DiRT Showdown and DiRT Rally 2.0 stop at their splash screen. All of them still run in the app as before.
- โ ๏ธ Saves kept in the Windows registry aren't shared. Extra games folders are built but haven't been tried on a device.
- On by default: **Steam (Linux) settings โ Your games in Steam**, with **Share saves with the app** under it.
## ๐ Sound: DirectAudio, and a microphone
- โ **Games use DirectAudio**, the same low-latency path Wine games use, with **PulseAudio as a safety net**. If a game can't load DirectAudio, it gets PulseAudio instead of no sound at all. (The first two pre-releases only *said* games used DirectAudio. A broken registry key meant they never did, and that's fixed now.) On GE-Proton, DirectAudio loads and Titanfall 2 plays with sound. On Proton Experimental, Titanfall 2 now starts with sound instead of crashing.
- โ **Steam's own sounds** (menus, the startup chime, Big Picture clicks) go through DirectAudio when it's chosen. They're clean on the Pocket FIT.
- โ **A microphone for Steam** (**DirectAudioMic**) with a working voice slider, proven in Steam's own voice tester.
- โ ๏ธ A game's very first start uses PulseAudio. Voice chat with real people hasn't been tested yet.
## ๐ฎ Controllers
- โ Steam sees a **real Xbox 360 controller**, including the **Steam button**, so Big Picture, the overlay and Steam Input work like on a PC. The on-screen pad appears when no controller is connected.
- โ **Only the controllers you actually have are listed.** It's one per connected pad plus one for the on-screen controls, and a pad plugged in mid-session still shows up.
- โ Steam gets its own input handling instead of sharing Wine's.
## ๐น๏ธ Steam buttons and switches in the in-game drawer
The drawer's **Graphics** tab has a new **Steam client** section at the top. It saves to the same settings as the Steam (Linux) entry and applies live where it can:
- **Steam menu** and **Quick Access** buttons, **On-screen Steam and Quick Access buttons** in the corners (on by default), and **Double Back opens Quick Access** (on by default; a single Back still opens the drawer).
- **Stretch games to fill the screen** (on), the likely fix for FlatOut shrinking into a corner.
- **Quake-engine games windowed** (on).
- **HDR output** is now actually handed to gamescope and DXVK. Before, the switch did nothing.
- Troubleshooting switches: **Xalia off**, **proot without seccomp** (slower; for devices whose seccomp misbehaves) and **Turnip sysmem** (automatic for imported 710/720/722 drivers).
> โ ๏ธ **Built, but not device-tested yet.** The HDR part needs an HDR screen, and the Pocket FIT doesn't have one.
## ๐ฅ๏ธ Display, drivers and speed
- โ **A patched gamescope** (3.16.29) is carried in the APK. Night mode and the colour-temperature slider work, and the cursor follows the controller when a pad drives it. In this release it's the **-p3** build with the touch patches above.
- โ **Scaling mode** (Auto, Integer, Fit, Fill, Stretch) and **scaling filter** (Linear, Nearest, Pixel, FSR, NIS, **SGSR**, Qualcomm's own upscaler for Adreno) in the Steam (Linux) settings.
- โ **Two driver rows:** the **draw driver** (the Turnip that draws Steam and its games) and the **display driver** (the one that puts frames on your screen). **Contents โ Drivers โ import** sends each Turnip zip to the list that can use it, including the new `-Linux` builds from [Banners-Turnip](https://github.com/The412Banner/Banners-Turnip).
- โ Steam gets **all eight cores**, games get their own core list, sessions run at the **screen's highest refresh rate**, and the default resolution is **720p**.
- โ ๏ธ Three experimental rendering switches (**Threaded GL**, **Lazy descriptors**, **Skip GL error checks**) are on by default but not measured yet.
## ๐๏ธ Steam Deck mode โ still experimental, still off
A **Steam Deck mode** switch runs the client the way it runs on a Deck, with Steam's **Quick Access Menu**.
- โ No more Steam update that can't install: Deck mode uses the Steam Deck beta channel, where the ARM64 client exists. The **battery** shows in Steam's top bar, and there's a **Steam client update channel** setting.
- โ ๏ธ **It still breaks game controllers.** Steam's menus work, but games get no pad. It stays off by default and only turns on through a warning. Valve's performance overlay and NIS in Deck mode are built but haven't been tried on a device.
## ๐งน Clean sessions and safe-to-share logs
- โ **Ending a session cleans up properly.** Processes that proot lost track of could keep running and burn CPU in the background. They're now stopped when the session ends.
- โ **One log folder per session** in `Download/Bannerlator-LinuxSteam/`, with the session log, a device and network report, controller and audio logs, and Steam's own logs.
- โ **Logs are private, so they're safe to post.** Session tokens, Steam IDs and login files were already masked or left out. Now your **public IP address**, your **Steam account and profile names** and **the device's own IP addresses** are hidden too, in both Linux session logs and SteamLite logs.
- โ ๏ธ The session log is now capped at **256 MB**, so a runaway log can't fill your storage. The cap is in place but hasn't been stress-tested.
- โ ๏ธ If the last session was killed rather than closed, Steam's leftover crash marker and lock files are cleared before the next start. This is built but hasn't been seen on a device.
## ๐ฉน Fixes for everyone
- โ **Adding an .exe to Shortcuts no longer crashes the app.** Two parts of the app could reload the shortcut list at the same moment, and when the cover art arrived just as the screen came back, the app crashed. Reported on Discord for 3.1.3-pre3. **Confirmed fixed on device.**
- โ **Messages in the game screen are readable again.** Pop-up messages during a game used to show as an empty dark bar.
## ๐ง Smaller
- The in-game drawer and the HUD describe a Steam (Linux) session as what it is, instead of showing the container's leftover settings.
- The Steam (Linux) settings no longer offer Wine settings that don't apply to it, and each setting says who it affects.
- Steam (Linux) has its own tile and Steam's own art in the Games tab, and stays at the top of the list.
- **Contents โ Linux Runtime** lists GE-Proton and proton-cachyos (ARM64) as downloads and says which entries in Steam's own list actually work.
- A competing Steam client on the device is named and stopped before a session starts, because it would take over your account's session.
- Settings โ Internet in Steam works: a stand-in answers Steam's network questions.
- The Wayland soft keyboard now types capitals and symbols that need Shift.
- Wayland reports the screen's real refresh rate and colour information to gamescope. The colour fix is aimed at gamescope losing its connection on the Galaxy Z Fold 8. No device result for it has been recorded yet.
- The XMB view shows scraped cover art as a full portrait tile instead of a small icon.
- The APK's own proot copies memory in one go instead of eight bytes at a time (from maxjivi05's WinNative). This only matters when the runtime's own proot is missing.
- Nine proot speed-up patches from DroidDeck are now in the proot **build recipe**, but they're **not active yet**. The runtime still ships Termux's proot, so there's no speed change in this release.
- Compositor hardening against oversized cursors and malformed buffers.
# What it can and cannot do right now
**Can:**
- **Steam:** sign in, browse, install, update, verify, cloud-sync and play your library, with the overlay, Big Picture or the desktop UI, on a controller or the touch screen.
- **Components:** swap FEX, DXVK and VKD3D-Proton per Linux Proton, and put the originals back.
- **Your own games:** Games-tab games in Steam's library, with artwork and shared saves.
- **Sound:** DirectAudio for games (with PulseAudio as the fallback), DirectAudio for Steam's own sounds, and a microphone.
- **Also:** frame generation, screen effects and the HUD in Steam sessions, gamescope scaling with FSR, NIS and SGSR, the battery in Steam's UI, and log folders you can post.
**Cannot yet, or not proven:**
- **Mali, Xclipse and PowerVR:** nothing works. The runtime's driver is Turnip.
- **Phones without the "Disable child process restrictions" switch:** Android kills the session at random.
- **Steam Deck mode** breaks game controllers. **Steam Input's virtual controller** (per-game layouts, gyro) doesn't reach games yet. Games read your pad directly, which works.
- **Games-tab games that need the app's own Wine or FEX preset** may not run from Steam (Insane 2, DiRT Showdown, DiRT Rally 2.0).
- **DirectAudio for 64-bit games on Proton Experimental:** not yet, so they get PulseAudio. GE-Proton gets DirectAudio.
- **GTA V Enhanced** doesn't run, **Serious Sam Shatterverse** is killed by Android for memory, and **NFS Hot Pursuit Remastered** faults inside FEX.
- **Voice chat with people, Remote Play, streaming, family sharing, join-a-friend:** not tested.
- The **Linux Desktop** entry has had far less testing than Big Picture.
- Leaving the app pauses the session. Come back and it resumes. That's by design.
# Logs, if something goes wrong
- `Download/Bannerlator-LinuxSteam/session--