Your phone is a Linux workstation.
Debian 13 + XFCE + Firefox ESR + dev tools — running natively on Android.
curl -sL "https://raw.githubusercontent.com/arinadi/DroidDesk/main/bootstrap.sh" | bashInstalls XFCE desktop, launchers, and all built-in tools. Under 30 seconds.
- Android ARM64 + Termux (F-Droid, NOT Play Store)
- Termux:X11 — display server
- Termux:API (optional — battery, clipboard, voice)
- Termux:Widget (recommended — home screen launchers)
┌─────────────────────────────────────┐
│ USER LAYER (mutable) │ ← Your packages, configs, data
│ VS Code, Chromium, Ollama, etc. │ Preserved across updates
├─────────────────────────────────────┤
│ IMAGE LAYER (immutable) │ ← Pre-built from Dockerfile
│ Debian 13 + XFCE + Firefox + dev │ ghcr.io/arinadi/droiddesk
└─────────────────────────────────────┘
Two-layer architecture:
- Image layer (immutable) — Debian 13 ARM64, XFCE, Firefox ESR, dev tools. Pre-built on GHCR. Download once.
- User layer (mutable) — Your packages via
patch.sh, dotfiles, configs. Preserved across updates via auto backup/restore.
Base: Debian 13 (Trixie). Firefox ESR from native repos — zero external APT sources. Update: bash ~/update.sh pulls latest image, restores user layer.
| Category | Tools |
|---|---|
| 🌐 Browser | Firefox ESR |
| 🖥️ Desktop | XFCE4 + Whisker Menu + Power Manager + PulseAudio tray |
| 🖱️ Touch | Single-click Thunar, large scrollbars, clipboard auto-sync |
| 📝 Apps | Mousepad (editor), Ristretto (images) |
| 🔧 Dev | Git, Node.js 22 LTS, Python 3 (pip/venv/dev), GCC, Make, CMake |
| 📊 Sys | htop, tmux, OpenSSH |
| 🎨 Theme | Adwaita icons, Greybird, SVG support |
bash ~/.droiddesk/scripts/patch.sh # Interactive
bash ~/.droiddesk/scripts/patch.sh --chromium --code --zsh
bash ~/.droiddesk/scripts/patch.sh --list| Category | Packages |
|---|---|
| 🌐 Browser | Chromium |
| 💻 IDE | VS Code (code-server), Geany, Neovim |
| 🤖 AI | Ollama (local LLM) |
| 🖥️ System | Zsh + Oh My Zsh, Nala |
| 🔧 CLI | ripgrep, GitHub CLI |
| 🎨 GUI | Viewnior, Xarchiver, Galculator |
bash ~/start-x11.sh # X11 server + PulseAudio
# → Open Termux:X11 app
bash ~/start-xfce.sh # XFCE desktop
bash ~/kill-all.sh # Stop everything
bash ~/update.sh # Update DroidDesk| Shortcut | Action |
|---|---|
🟢 start-x11.sh |
X11 + audio |
🟢 start-xfce.sh |
Desktop |
🔴 kill-all.sh |
Stop all |
🔄 update.sh |
Update |
| Command | Action |
|---|---|
bash ~/start-x11.sh |
Start X11 + PulseAudio |
bash ~/start-xfce.sh |
Start XFCE desktop |
bash ~/kill-all.sh |
Stop everything |
bash ~/update.sh |
Update |
bash ~/.droiddesk/scripts/patch.sh |
Install software |
| Command | Action |
|---|---|
battery |
Battery % and health |
clipget / clipset |
Android clipboard |
vol-up / vol-down |
Media volume |
bright 50 |
Brightness 0-100 |
toast "msg" |
Toast popup |
notify "T" "B" |
Notification |
buzz |
Short vibration |
speak "hello" |
Text-to-speech |
listen |
Speech-to-text |
openurl / share |
Open / share in Android |
whereami / wifi |
GPS / WiFi |
photo / flash |
Camera / flashlight |
bash ~/.droiddesk/tools/genmon-battery.sh # 🔋
bash ~/.droiddesk/tools/genmon-volume.sh # 🔊
| Problem | DroidDesk Solution |
|---|---|
| Chrome sleeps tabs | Firefox ESR desktop browser — stays alive |
| No glibc apps | Debian 13 proot — standard glibc |
| No dev tools | Node.js 22, Python 3, GCC, CMake built-in |
| Background killed | Termux:WakeLock keeps sessions alive |
| No clipboard bridge | Auto-sync Android ↔ proot |
| Limitation | Workaround |
|---|---|
| No root | proot provides root-like environment |
| No systemd | Start services manually |
| No GPU acceleration | Mesa software rendering |
| ARM64 only | QEMU user-mode for cross-arch |
| No native X11 | Termux:X11 app |
| Storage restrictions | termux-setup-storage |
Cannot do: Docker containers, GPU hardware access, systemd services, x86 natively.
- Android 14+: Developer Options → Disable child process restrictions
- Android 12-13:
adb shell settings put global settings_enable_monitor_phantom_procs false
DroidDesk/
├── bootstrap.sh ← one-command entry point
├── scripts/ ← setup, patch, config
├── launchers/ ← start/kill/update shortcuts
├── image/ ← Dockerfile + XFCE/TAPI configs
├── docs/ ← documentation
└── archive/ ← git history
GPLv3