Skip to content
AI2THPublic

About

Alpine Linux VM workstation on Android, no root: Docker/OCI containers, k3s Kubernetes, Asterisk PBX, 1-click marketplace and a Linux desktop GUI. Pockr, Zyvr and Kubxr are merged in.

Topics

Resources

Stars

57 stars

Watchers

3 watching

Forks

Latest commit

Β 

History

160 Commits

Folders and files

Repository files navigation

Linxr

Bare Alpine Linux VM & Docker Container Workstation on Android β€” no root required.

Linxr runs a full Alpine Linux 3.20 environment on Linux Kernel 6.18-virt inside a QEMU virtual machine on any arm64 Android device. Access it through the built-in multi-tab SSH terminal, native Docker Containers dashboard, POSIX file manager, or any external SSH client. No root, no Termux, no special hardware.


πŸš€ Features in v3.1.0

  • 1-Click Marketplace & Recipe Store β€” Discover and 1-click deploy curated container stacks (k3s Kubernetes, Nginx, Redis, PostgreSQL, VS Code Server, Ollama AI, Portainer, Node.js, Python, Tailscale) or write, import, and share your own custom community recipes.
  • Chrome & Web Browser Port Forwarding β€” Automatic port forwarding (8080, 3000, 8000, 5000, 8443, 9000, 8088->80, 11434) letting you test web applications and dashboards in Chrome directly on your phone.
  • Upgraded Linux & Kernel Stack β€” Alpine Linux with Linux Kernel 6.18-virt, OpenRC init, OpenSSH, sudo, bash, and full apk package repository access.
  • Native Docker & Kubernetes Engine β€” Complete Docker container management and k3s Kubernetes runtime support with cgroup2 subtree controllers and /dev/kmsg support.
  • Native Docker Dashboard (Pockr Merged) β€” Complete Docker container management under the Containers tab (pull images, launch containers, stream live container logs).
  • Live System & VM Serial Log Console β€” Real-time kernel serial logs (dmesg, init, sshd) streaming directly on the Home screen for 100% boot transparency.
  • Virtio-9P Storage & SAF Folder Picker β€” Direct POSIX storage sharing at /storage/emulated/0/LinxrShare mounted inside guest VM at /mnt/sdcard, plus Android Storage Access Framework (SAF) folder picker in Settings.
  • Ultra-Low Network Latency β€” TCP_NODELAY socket optimization dropping terminal typing lag from 250ms to under 15ms.
  • Multi-Tab Terminal β€” Up to 5 concurrent SSH sessions with auto-reconnect, keepalive, and specialized touch control key bar (Tab, Esc, Ctrl+C, Ctrl+D, Ctrl+Z).
  • Dynamic Resource Controls β€” Configure vCPU count, RAM, and disk size (8 GB to 50 GB+) with automatic online resize2fs expansion on boot.
  • No Root Required β€” QEMU runs entirely as a standard Android userland application sandbox.

πŸ“Έ Screenshots

Home β€” Stopped Home β€” Live Serial Logs Terminal (linxr:~#)
Home stopped Home running Terminal
Containers Dashboard Storage & Files Settings & SAF Picker
Containers Files Settings

πŸ’¬ Community & Discussion

Join our official community for technical discussions, feature requests, and support:


πŸ“± Requirements

Requirement Minimum Recommended
Android OS 8.0 (API 26) Android 11.0+
Architecture arm64-v8a arm64-v8a
Free Storage ~300 MB (APK + VM base image) 10 GB+ for Docker images
Device RAM 2 GB 4 GB+

⚑ Quick Start

  1. Download Linxr v3.0.0 (.apk or .aab) from GitHub Releases or Google Play Store.
  2. Open Linxr β†’ tap Start VM.
  3. Watch real-time kernel boot logs stream inside the System & VM Logs console on the Home Screen.
  4. Switch to the Terminal tab β€” it auto-connects as soon as SSH is active on port 2222.
  5. Log in using default credentials: root / alpine.

External SSH Connection

ssh root@localhost -p 2222
# Password: alpine

πŸ—οΈ Architecture & Stack

Android Host (Flutter + Kotlin Userland App)
β”‚
β”œβ”€β”€ VmManager.kt          β€” QEMU lifecycle, asset extraction, SSH readiness probe lock
β”œβ”€β”€ VmService.kt          β€” Android Foreground Service (keeps VM alive in background)
β”œβ”€β”€ MainActivity.kt       β€” SAF document picker MethodChannel (pickFolder)
β”‚
β”œβ”€β”€ QEMU Engine (libqemu.so)
β”‚   β”œβ”€β”€ Virtio-Net (SLIRP)β€” TCP_NODELAY, hostfwd 127.0.0.1:2222 -> 22, 127.0.0.1:8080 -> 8080
β”‚   └── Virtio-9P (pci)   β€” Shares /storage/emulated/0/LinxrShare with guest VM
β”‚
└── Guest VM (Alpine Linux 3.20 / Kernel 6.18-virt)
    β”œβ”€β”€ OpenRC init       β€” Service management & online diskexpand (resize2fs)
    β”œβ”€β”€ OpenSSH daemon    β€” SSH server listening on port 22 inside VM
    β”œβ”€β”€ Docker Daemon     β€” Native Docker Engine (overlay2 storage, bridge networking)
    └── api_server.py     β€” REST API bridging Flutter Containers tab to /var/run/docker.sock

Disk & Asset Layout

Asset File Purpose
base.qcow2 Read-only Alpine 3.20 rootfs (OpenSSH, Docker, sudo, python3 pre-installed)
user.qcow2 Writable QCOW2 overlay preserving all your files and Docker containers
vmlinuz-virt Guest Linux Kernel 6.18-virt compiled with Virtio & PREEMPT_DYNAMIC
initramfs-virt Initial RAM filesystem

πŸ› οΈ Building from Source

Prerequisites

  • Linux / macOS workstation with Docker (for cross-compiling rootfs and native QEMU libraries)
  • Android SDK (API 31+)
  • Flutter 3.x SDK

1 β€” Build the Alpine Base RootFS & QCOW2 Image

bash scripts/build_qcow2.sh

Outputs: android/app/src/main/assets/vm/base.qcow2.gz

2 β€” Build the Android APK

bash scripts/build_apk.sh debug     # Debug build
bash scripts/build_apk.sh release   # Release build (requires release keystore)

Outputs: build/linxr-debug.apk or build/linxr-release.apk

3 β€” Build Play Store Bundle (AAB)

bash scripts/build_aab.sh

Outputs: build/linxr-release.aab

4 β€” Install via ADB

adb install build/linxr-release.apk

πŸ”‘ Default Credentials

Parameter Default Value
Username root
Password alpine

πŸ”’ Security Note: Change your root password using passwd after first login.


πŸ“‚ Project Structure

Linxr/
β”œβ”€β”€ android/
β”‚   └── app/src/main/
β”‚       β”œβ”€β”€ assets/bootstrap/   # api_server.py, init_bootstrap.sh
β”‚       β”œβ”€β”€ assets/vm/          # kernel 6.18-virt, initramfs, base.qcow2.gz
β”‚       └── kotlin/com/ai2th/linxr/
β”‚           β”œβ”€β”€ MainActivity.kt  # SAF pickFolder MethodChannel
β”‚           β”œβ”€β”€ VmManager.kt     # QEMU launcher & SSH probe lock
β”‚           └── VmService.kt     # Foreground Service
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ main.dart               # Main app layout & Home Screen
β”‚   β”œβ”€β”€ constants.dart          # App constants & theme colors
β”‚   β”œβ”€β”€ screens/
β”‚   β”‚   β”œβ”€β”€ terminal_screen.dart # Multi-tab SSH terminal emulator
β”‚   β”‚   β”œβ”€β”€ containers_screen.dart # Docker Container Dashboard & log viewer
β”‚   β”‚   β”œβ”€β”€ files_screen.dart    # Virtio-9P filesystem explorer
β”‚   β”‚   └── settings_screen.dart # vCPU/RAM/Disk sliders & SAF picker
β”‚   └── services/
β”‚       └── vm_platform.dart    # Platform Channels & VmState provider
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ build_apk.sh            # APK build script
β”‚   β”œβ”€β”€ build_aab.sh            # Play Store AAB build script
β”‚   β”œβ”€β”€ build_qcow2.sh          # QCOW2 Alpine image builder
β”‚   └── _build_rootfs.sh        # Docker-based rootfs builder
β”œβ”€β”€ CHANGELOG.md
β”œβ”€β”€ LICENSE
└── pubspec.yaml

πŸ“œ Open Source Components & Licenses

Component License Role
Flutter BSD-3-Clause UI framework
QEMU GPL-2.0 ARM64 CPU & Machine Virtualization Engine
Alpine Linux MIT / GPL Guest Linux Distribution
Docker Engine Apache-2.0 Container Runtime
dartssh2 MIT Pure-Dart SSH2 client
xterm.dart BSD-3-Clause Terminal emulator UI widget

πŸ“„ License

Copyright (C) 2026 AI2TH.

This project is licensed under the GNU General Public License v3.0. See LICENSE for the full text.


🏒 About AI2TH

Applied Intelligence To Tackle Hardships

AI2TH builds developer tools and virtualization platforms that bring Linux environments to mobile and edge hardware without root access.

Linxr β€” run Linux anywhere.

About

Alpine Linux VM workstation on Android, no root: Docker/OCI containers, k3s Kubernetes, Asterisk PBX, 1-click marketplace and a Linux desktop GUI. Pockr, Zyvr and Kubxr are merged in.

Topics

Resources

Stars

57 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages