Documentation · Quick start · Manual install · Benchmarks · Troubleshooting · CLI · বাংলা
ternux turns an ARM64 Android phone into a Debian + Xfce4 Linux workspace through Termux and PRoot. It provides Termux:X11 display, PulseAudio, a permanent ternux control CLI, and a graphics route using Zink → Turnip on supported Adreno devices or VirGL as a fallback.
No Android root is required. Debian uses the existing Android kernel; PRoot provides the userspace environment. This is a Linux desktop/workspace on Android, not a second kernel or conventional VM.
Install Termux and Termux:X11 first. Use a consistent trusted source for Termux and its plugins. The detailed source/version guidance is in Quick start.
Run inside Termux:
curl -fsSL https://soobujmiah.github.io/ternux/install.sh | bashIf curl is unavailable or broken after a partial upgrade:
wget -qO- https://soobujmiah.github.io/ternux/install.sh | bashThe default is unattended: Debian user ternux, locale en_US.UTF-8, and automatic backend selection. The installer checks the device, installs the host and Debian components, configures graphics/audio, creates the launcher and verifies the result.
The one-line command executes the current remote version. For a complete review, clone the repository so the entry script and every sourced module are visible:
pkg update -y && pkg install git -y
git clone https://github.com/soobujmiah/ternux.git
cd ternux
git log -1 --oneline
(set -e; for f in install.sh uninstall.sh bin/ternux bin/ternux-guest lib/*.sh; do bash -n "$f"; done)
less install.sh bin/ternux bin/ternux-guest lib/*.sh
bash install.shTo pin an exact release first:
git fetch --tags
git checkout <release-tag>
git status --short
(set -e; for f in install.sh uninstall.sh bin/ternux bin/ternux-guest lib/*.sh; do bash -n "$f"; done)
bash install.shbash install.sh --backend zink --user myuser --locale en_US.UTF-8
bash install.sh --with-dev --with-llm --with-blender
bash install.sh --with-network
bash install.sh --with-media
bash install.sh --all
bash install.sh --resumeSupported flags also include --backend auto|zink|virgl, --user, --locale, --zsh, --with-dev, --with-llm, --with-network, --with-media, --with-blender, --all, --resume, --ui auto|dashboard|plain|off, --plain and --no-anim.
Full installer behavior, phases, profiles, UI, resume, update and removal: Installation.
For people who want every step under their own control:
# Termux
termux-setup-storage
pkg update -y && pkg upgrade -y
pkg install x11-repo tur-repo -y
pkg install termux-x11-nightly pulseaudio proot-distro virglrenderer-android \
zsh git curl wget nano tar termux-api -y
pkg install mesa-vulkan-icd-freedreno -y # Adreno/Zink; skip when unavailable
proot-distro install debian
# Debian
proot-distro login debian --shared-tmp
apt update
DEBIAN_FRONTEND=noninteractive apt install -y \
sudo nano dbus-x11 pulseaudio pulseaudio-utils x11-utils mesa-utils \
libgl1-mesa-dri libvulkan1 vulkan-tools xfce4 xfce4-terminal \
vlc colord polkitd locales zip unzip xarchiver unrar-free 7zip
adduser ternux
for group in sudo video render audio; do
getent group "$group" >/dev/null && usermod -aG "$group" ternux
done
printf '%s\n' 'ternux ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/ternux
chmod 0440 /etc/sudoers.d/ternux
visudo -cf /etc/sudoers.d/ternux
exitThen follow the maintained guide for the complete Zink/Turnip or VirGL setup, audio bridge, locale/fonts, launcher, validation and all remaining commands:
source ~/.bashrcxOr:
xgoOpen the Termux:X11 app, then verify the actual renderer:
glxinfo -Bvulkaninfo --summarypactl infoExpected graphics examples:
OpenGL renderer string: zink ... Adreno ... MESA_TURNIP
or:
virgl / virpipe
llvmpipe means CPU software rendering. Diagnose that before benchmarking: Troubleshooting.
Daily shortcuts:
x start desktop
xgo open Termux:X11 and start desktop
killx stop display/audio and clean stale session files
db Debian shell as regular user
droot Debian shell as root
CLI:
ternux start
ternux stop
ternux restart
ternux verify
ternux doctor
ternux repair
ternux info
ternux logsThe Debian guest companion exposes guest-local commands and rejects host lifecycle commands that could create a nested PRoot session. See CLI reference.
| Layer | Role |
|---|---|
| Termux + PRoot | Android host and Debian userspace |
| Debian ARM64 | GNU/Linux base |
| Xfce4 + Termux:X11 | Desktop and display |
| PulseAudio | Android audio bridge |
| Zink → Turnip → KGSL | Adreno OpenGL/Vulkan graphics route |
| VirGL | Compatibility graphics route |
ternux CLI + ~/x.sh |
Lifecycle, diagnostics, repair and benchmarks |
Base applications include Xfce Terminal, VLC, archive tools, Mesa utilities and Vulkan tools. Development, LLM, media, network and Blender workloads are opt-in.
For the complete architecture/data paths and package behavior, see Architecture and Installation.
Ternux is the Linux desktop/workspace layer. ADT is the Android build/toolchain layer: Linux ARM64 build-tools, platform-tools, ADB, APK signing and device installation.
They can coexist on the same Termux + PRoot Debian foundation, but the cross-project workflow remains experimental until formally tested and measured.
- ARM64 / aarch64 Android device
- ternux baseline: Android 10+
- 4 GB RAM minimum; 6–8 GB recommended for desktop + development/small local models
- About 3–4 GB for base; roughly 10–12 GB with
--all, plus working space - No root required
- Stable network during installation
- Accessible
/dev/kgsl-3d0on supported Adreno devices for the intended Zink/Turnip route
The published August 2026 evidence snapshot is from a Redmi Turbo 4 Pro / Snapdragon 8s Gen 4 / Adreno 825. The observed renderer was:
zink Vulkan 1.4(Adreno (TM) 825 (MESA_TURNIP))
Supplied results include:
glmark2: 140 aggregate score; reported scene range 45–164 FPSglmark2-es2 --off-screen: 364 aggregate score; reported scene range 53–465 FPS, with a recorded DRI3 warning- Blender 4.3.2: Zink/Turnip OpenGL viewport path observed; Cycles GPU rendering not established
- llama.cpp and stable-diffusion.cpp: Vulkan build paths reported; numeric runtime performance not established
These are device-specific evidence, not universal performance guarantees. The two glmark2 modes must not be compared as a speed ratio. Full scene values, methodology, caveats, and outstanding measurements are in Benchmarks.
- PRoot is not a VM and Debian shares Android's kernel.
- Guest root is not Android root; kernel modules, real systemd boot and unrestricted hardware access remain unavailable.
- GPU support varies by device; VirGL is a fallback, not an equal-performance guarantee.
- An OpenGL renderer does not prove Blender Cycles, llama.cpp or diffusion GPU offload.
- Sustained builds/inference/rendering can cause heat, throttling, battery drain or Android process management.
- Back up important data before destructive work:
proot-distro backup debian --output ~/debian.tar.gz. - Keep local development/AI services on
127.0.0.1unless deliberate authenticated exposure is configured.
More detailed safety, graphics, storage, heat and troubleshooting guidance remains in FAQ, Configuration, Architecture and Troubleshooting.
ternux uninstallOr from a clone:
bash uninstall.shBack up Debian first. The documented all removal targets the ternux session/container, launcher/aliases and ternux state/logs; unrelated Termux packages, repository/storage choices and the Termux PulseAudio configuration are deliberately left in place. See the Installation guide and uninstall.sh for exact behavior/options.
- Documentation overview
- Quick start
- Installation
- Manual installation
- Usage
- Configuration
- Troubleshooting
- Architecture
- Benchmarks
- FAQ
- CLI reference
- Contributing
- Security
Deep technical references for Termux, Termux:X11, PRoot, Mesa/Zink, glmark2, Blender, llama.cpp and stable-diffusion.cpp are retained in the documentation set and upstream-reference sections there.