Linux workspace · Android hardware

A real Linux desktop on Android. No root.

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.

  • platformAndroid 10+ · arm64
  • rootnone required
  • deviceRedmi Turbo 4 Pro evidence
  • licenseApache-2.0 · auditable Bash
140Measured glmark2 OpenGL score
364Measured OpenGL ES score
66 scenesCaptured FPS values
1 deviceEvidence, not a guarantee

01What is Ternux?

Ternux composes a userspace Linux environment around Android services — it never replaces Android. Every layer is explicit and reviewable.

LayerComponentPurpose
Android appTermux:X11Displays the Linux X11 desktop on Android
Termux hosttermux-x11, PulseAudio, PRoot DistroDisplay socket, Android audio, container lifecycle
Linux guestDebian ARM64Standard apt-managed GNU/Linux userspace
DesktopXfce4Lightweight desktop, terminal, file manager
Adreno graphicsMesa Zink → Turnip → KGSLOpenGL translated to Vulkan, sent to the Qualcomm GPU
Fallback graphicsVirGLPortable virtual OpenGL route for other devices
Control planeternux CLI + ~/x.shInstall, launch, stop, verify, diagnose, repair, benchmark

01No root, no bootloader change

PRoot userspace only. The Android system partition is never modified; guest root inside PRoot is not a security boundary.

02Explicit graphics routes

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.

03Auditable everything

Plain Bash you can read before running: clone-first review path, syntax checks, and a full installer log in ternux.log.

04Real applications

Xfce Terminal, VLC, Mesa and Vulkan utilities included; development tools, llama.cpp, media tools and Blender opt-in.

02How it works

Android → Linux → Debian → Xfce4 → GPU. Each hop is a real, named component.

Android
kernel · KGSL driver
Termux
host services · display socket
PRoot Debian
arm64 userspace
Mesa
zink · turnip · virgl
Xfce4
Termux:X11 desktop

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.

03Installation

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.

01Quick installation

Use the hosted entry point, let ternux detect the supported route, and follow the printed Termux:X11 handoff.

Quick start →

02Clone and review

Pin the repository state, syntax-check the shell files, inspect the installer and libraries, then run locally.

Review-first guide →

03Manual setup

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

04GPU acceleration

Two explicit routes. Which one you get depends on your GPU — ternux detects, reports, and never hides the choice.

Adreno route — Zink over Turnip

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.

zink Vulkan 1.4(Adreno (TM) 825 (MESA_TURNIP))
Measured

VirGL route — the compatibility fallback

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.

Observed

05Evidence — measured, never blended

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.

glmark2 — OpenGL

140 score · 800×600 windowed · 45–164 FPS across 33 scenes. A suite aggregate, not constant desktop FPS.

Measured

glmark2-es2 — OpenGL ES

364 score · ES 3.2 · 53–465 FPS across 33 scenes. Different API and mode from the OpenGL row — never compare them directly.

Measured

Blender 4.3.2

Reported the same Zink/Turnip renderer for its OpenGL viewport (4.6 core profile). Cycles GPU rendering is not established by that evidence.

Observed

llama.cpp · stable-diffusion.cpp

Documented Vulkan build paths exist in the docs. No performance result is claimed — those workloads remain untested here.

Not yet tested

Shared evidence vocabulary — Verified · Measured · Observed · Experimental · Not yet tested · Not supported:

VerifiedMeasuredObservedExperimentalNot yet testedNot supported

Measured upstream projects Blender llama.cpp stable-diffusion.cpp glmark2

06Ternux and ADT — two layers of one ARM64 story

Ternux — this project

The Linux desktop layer: no-root Debian + Xfce4 on Android via PRoot and Termux:X11, with measured GPU acceleration on supported Adreno devices.

ADT — the toolchain layer

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 →

Host-device workflow

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.

Verified vs experimental

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.

07Documentation

One system, a path for every depth — guided routes first, task-focused operation guides next, then architecture, evidence and exact CLI behaviour.

Start here

Documentation overview · Quick start · Installation · Manual installation.

Open docs →

Operate

Daily usage · Configuration · Troubleshooting · CLI reference.

Open guides →

Understand & contribute

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.