Full Linux desktop on ARM64 Android — not a terminal app, not an emulator. Native kernel access, embedded X11, and an optional Android home launcher so boot and Home open the desktop directly.
ServalDesk (com.servaldesk.app) is built on top of DroidDesk. It focuses on phone-first UX: home routing, a touch-oriented XFCE layout, floating controls, and safer session start.
Important
ServalDesk redistributes DroidDesk-derived code under GPL-3.0. It is not affiliated with or endorsed by Termux, Termux:X11, TUR, Canonical, Ubuntu, or Serval Inc. (ITSM / helpdesk).
- This project: https://github.com/anugotta/ServalDesk
- Upstream DroidDesk: https://github.com/orailnoor/DroidDesk
- Termux:X11: https://github.com/termux/termux-x11
Linux desktop (XFCE) — wallpaper, bottom dock, floating controls
Portrait desktop · ServalDesk dashboard
| Behavior | Detail |
|---|---|
| Boot / Home | Routes to the Linux desktop when setup is complete |
| Incomplete setup / failure | Falls back to the Flutter dashboard |
| Overlay Dashboard | Returns to Flutter (apps, terminal, settings, stop server) |
| Overlay Android | Leaves Linux for the stock Android home |
| Long-press Android / Dashboard | Opens the system default-home / role picker |
Set ServalDesk as the default home app from the dashboard (Set as Default Launcher), or leave the stock launcher as default and open ServalDesk from the app drawer.
- Bottom dock — Applications menu, Terminal, Files, Browser, VNC helpers
- Top tasklist + clock — Window list and clock on the dark panel
- Wallpapers — Bundled Unsplash backgrounds (see
CREDITS.txtin assets) - Safe-area letterboxing — Black borders so notches don’t clip the desktop
- Orientation — Desktop resizes on rotate; windows rematch the viewport
- Trackpad / touch / soft keyboard — Floating control bar (Trackpad is the default)
- On the dock, open VNC → Share VNC.
- The display switches to 1920×1080 for a normal desktop frame.
- Connect with a VNC client to
PHONE_IP:5901(Show IP if needed). - Stop VNC Share restores the phone layout.
USB tethering is usually snappier than Wi‑Fi. Wired USB-C HDMI / DeX is the lag-free path when the hardware supports it.
- Foreground service starts before the desktop session where needed
- XFCE mobile profile installs atomically (marker written only after configs succeed)
- Dock helpers use a real bash shebang (avoids Termux
#!/bin/shpermission errors)
Tip
On Samsung / One UI, set ServalDesk battery usage to Unrestricted so the X11 session is less likely to be killed in the background.
If it runs on Ubuntu / Termux GUI packages, it can run here — for example LibreOffice, VS Code, browsers, and terminal tools. Heavy apps (Blender, local LLMs) work but are limited by phone GPU and RAM.
- Standalone APK (recommended): Embedded Termux:X11 (
libXlorie.so); Linux onDISPLAY=:0. No separate Termux:X11 app required.- Non-root: App-private Termux userspace + X11/TUR packages.
- Root: Ubuntu filesystem via
chroot. - GPU: Adreno → Turnip/Zink when available; otherwise Mesa software rendering.
- Classic Termux scripts: Optional for users who prefer Termux + Termux:X11 (see below).
- Proot: Optional Ubuntu/Debian/Kali container for packages not in TUR.
- Android phone (ARM64)
- For standalone APK: nothing else — X11 is embedded
- For classic script path: Termux (F-Droid) + Termux-X11 nightly
| Path | When to use |
|---|---|
| USB-C HDMI / DeX | Phones with DisplayPort Alt Mode — essentially lag-free |
| VNC (dock Share VNC) | Mac / laptop / any VNC viewer on the same network |
| Raspberry Pi VNC bridge | Headless Pi tether — see Pi bridge |
-
Download a release or build:
cd app flutter pub get flutter build apk --releaseOutput:
app/build/app/outputs/flutter-apk/app-release.apk
Package id:com.servaldesk.app -
Sideload and open ServalDesk.
-
Finish the setup wizard.
-
Optionally: Set as Default Launcher on the dashboard.
-
Use the floating bar: Keyboard · input mode · Dashboard · Android.
Termux + setup script (optional)
-
Install Termux from F-Droid (not Play Store).
-
Install Termux-X11 nightly.
-
In Termux:
curl -sL https://raw.githubusercontent.com/orailnoor/DroidDesk/main/termux-linux-setup.sh -o setup.sh bash setup.sh
-
Start desktop:
bash ~/start-x11.sh, then open Termux-X11.
| Command | Purpose |
|---|---|
bash ~/start-x11.sh |
Desktop via Termux-X11 |
bash ~/start-vnc.sh |
Desktop via VNC |
bash ~/start-proot.sh |
Proot Linux shell |
bash ~/proot-menu-sync.sh |
Sync Proot apps to the menu |
bash ~/stop-linux.sh |
Stop sessions |
For phones without USB-C display output, a Pi can tether over USB and show the phone desktop with a VNC viewer (pi-launch_phone.sh). The dock Share VNC path (1920×1080) works the same for a Pi viewer on the LAN.
Warning
Disable child-process restrictions in Developer Options on ROMs that kill background processes (MIUI, One UI, stock Android 13+). Otherwise long-running X11 sessions may die without warning.
- On-phone X11 and USB-C external display are faster than VNC.
- GPU acceleration is strongest on Adreno (Snapdragon); other GPUs fall back to software rendering.
- Electron/Chromium apps as root may need
--no-sandbox— see APP_TROUBLESHOOTING.md.
ServalDesk is maintained by anugotta. Original DroidDesk by orailnoor.
Bundled wallpapers: Unsplash contributors — see app/android/app/src/main/assets/droiddesk/wallpapers/CREDITS.txt.
ServalDesk redistributes DroidDesk-derived code under GNU GPL version 3 only. See:
