01No root, no bootloader change
PRoot userspace only. The Android system partition is never modified; guest root inside PRoot is not a security boundary.
Linux workspace · Android hardware
Ternux installs a Debian ARM64 userspace, an Xfce4 desktop, Termux:X11 display, audio, and an explicit graphics route — Zink/Turnip on supported Adreno devices, VirGL everywhere else. One command, auditable Bash, no bootloader change.
Ternux composes a userspace Linux environment around Android services — it never replaces Android. Every layer is explicit and reviewable.
| Layer | Component | Purpose |
|---|---|---|
| Android app | Termux:X11 | Displays the Linux X11 desktop on Android |
| Termux host | termux-x11, PulseAudio, PRoot Distro | Display socket, Android audio, container lifecycle |
| Linux guest | Debian ARM64 | Standard apt-managed GNU/Linux userspace |
| Desktop | Xfce4 | Lightweight desktop, terminal, file manager |
| Adreno graphics | Mesa Zink → Turnip → KGSL | OpenGL translated to Vulkan, sent to the Qualcomm GPU |
| Fallback graphics | VirGL | Portable virtual OpenGL route for other devices |
| Control plane | ternux CLI + ~/x.sh | Install, launch, stop, verify, diagnose, repair, benchmark |
PRoot userspace only. The Android system partition is never modified; guest root inside PRoot is not a security boundary.
Zink/Turnip where the Adreno driver path is supported; VirGL as the public compatibility route. A working desktop alone is never presented as proof of hardware rendering.
Plain Bash you can read before running: clone-first review path, syntax checks, and a full installer log in ternux.log.
Xfce Terminal, VLC, Mesa and Vulkan utilities included; development tools, llama.cpp, media tools and Blender opt-in.
Android → Linux → Debian → Xfce4 → GPU. Each hop is a real, named component.
Renderer proof is a string, not a screenshot: zink Vulkan 1.4(Adreno (TM) 825 (MESA_TURNIP)) in glmark2 and Blender confirms the OpenGL applications reached the Zink/Turnip path instead of llvmpipe software rasterization.
The one-command path is convenient; the clone-first and manual paths expose every module and every guest command before you run them. Install the Termux and Termux:X11 apps from F-Droid first.
Use the hosted entry point, let ternux detect the supported route, and follow the printed Termux:X11 handoff.
Quick start →Pin the repository state, syntax-check the shell files, inspect the installer and libraries, then run locally.
Review-first guide →Perform the host, guest, desktop, audio, graphics, launcher, and verification steps command by command.
Manual installation →# one command — host installer
curl -fsSL https://soobujmiah.github.io/ternux/install.sh | bash
# afterwards, in Termux ternux start # launch the desktop session
ternux verify # inspect the graphics route
ternux doctor # structured diagnostics
Two explicit routes. Which one you get depends on your GPU — ternux detects, reports, and never hides the choice.
On supported Adreno devices, OpenGL is translated to Vulkan and sent straight to the Qualcomm driver (KGSL). This is the measured path: glmark2 OpenGL 4.6 compatibility profile, OpenGL ES 3.2, and the same renderer string observed in Blender's viewport.
For devices without the Adreno path, VirGL provides a portable virtual OpenGL route. A working desktop on VirGL is reported as exactly that — never as hardware acceleration.
The published snapshot comes from one Redmi Turbo 4 Pro (Snapdragon 8s Gen 4 / Adreno 825, August 2026). It shows this route worked there; it does not promise the same result on every phone.
140 score · 800×600 windowed · 45–164 FPS across 33 scenes. A suite aggregate, not constant desktop FPS.
364 score · ES 3.2 · 53–465 FPS across 33 scenes. Different API and mode from the OpenGL row — never compare them directly.
Reported the same Zink/Turnip renderer for its OpenGL viewport (4.6 core profile). Cycles GPU rendering is not established by that evidence.
Documented Vulkan build paths exist in the docs. No performance result is claimed — those workloads remain untested here.
Shared evidence vocabulary — Verified · Measured · Observed · Experimental · Not yet tested · Not supported:
VerifiedMeasuredObservedExperimentalNot yet testedNot supported
The Linux desktop layer: no-root Debian + Xfce4 on Android via PRoot and Termux:X11, with measured GPU acceleration on supported Adreno devices.
Native ARM64 Android SDK build-tools, platform-tools, signing and ADB workflows — built from AOSP source for Linux ARM64, verified end-to-end on a real device. If you develop Android apps on this kind of hardware, ADT is the companion project.
ADT website →Development and execution occur on the same physical Android hardware: Ternux builds the artifact in Debian userspace, while ADT installs and debugs it directly on the host device via ADB without external emulators.
Both projects are verified separately on the same Termux + PRoot Debian foundation (Redmi Turbo 4 Pro). Cross-project workflows and closed-loop agent automation coexist architecturally but remain experimental until formally measured.
One system, a path for every depth — guided routes first, task-focused operation guides next, then architecture, evidence and exact CLI behaviour.
Documentation overview · Quick start · Installation · Manual installation.
Open docs →Daily usage · Configuration · Troubleshooting · CLI reference.
Open guides →Architecture · Evidence & benchmarks · FAQ · Contributing.
Open reference →No Android root, no hidden boundary: ternux never modifies the Android system partition. Guest root exists inside PRoot and is not a security boundary — shared storage and services you expose remain your responsibility.