Skip to main content

Full Desktop Chromium on Your Phone: Alpine, i3, and Zero Bloat

Most people running Linux desktops on Android install a full XFCE environment with Debian — file managers, screensavers, settings panels, icon themes — all to run a web browser. That's 3GB of desktop overhead for an app you could launch directly.

Here's a different approach: Alpine Linux, i3 window manager, Chromium, and nothing else. About 600MB total. Full DevTools, Chrome extensions, desktop site rendering, GPU acceleration. No root required.

Why Bother?

Android Chrome is not desktop Chrome. On a Samsung DeX setup with a monitor, keyboard, and mouse — or Xreal AR glasses — you're essentially using a desktop, but your browser is still the mobile version:

  • No extensions — no uBlock Origin, no Bitwarden, no Vimium, no dev extensions
  • No DevTools — you have to remote debug from another machine
  • No real tab management — no profiles, no proper multi-window
  • Sites serve mobile versions — even with "request desktop site" toggled

If you're a developer using DeX as a workstation, this is the gap. You need a real desktop browser.

The Options We Considered

flowchart TD
    A[Need desktop browser on phone] --> B{Which path?}
    B -->|Ubuntu Touch| C[Native Linux on phone]
    B -->|Firefox Android| D[Best mobile browser]
    B -->|Kiwi Browser| E[Chrome extensions on Android]
    B -->|Termux + proot| F[Full desktop Chromium]
    
    C --> C1[Limited devices, lose Android entirely]
    D --> D1[Has extensions but no DevTools]
    E --> E1[Discontinued Jan 2025]
    F --> F1[Full DevTools, extensions, desktop rendering]

    style F fill:#c8e6c9
    style F1 fill:#c8e6c9
    style C1 fill:#ffcdd2
    style E1 fill:#ffcdd2
Option DevTools Extensions Desktop Rendering Status
Android Chrome No No Partial Active
Firefox Android No Yes (limited) Better Active
Kiwi Browser Yes Yes Yes Dead (Jan 2025)
Brave / Vivaldi No No Partial Active
Termux + proot + Chromium Yes (F12) Yes (full) Yes Active

The proot approach is the only one that gives you everything. The question is how lean you can make it.

Why Alpine + i3 Instead of Debian + XFCE

The popular Termux desktop projects — phoenixbyrd/Termux_XFCE, LinuxDroidMaster/Termux-Desktops, Dextop — all default to Debian with XFCE. They install a full desktop environment: Thunar file manager, XFCE settings, panel, notification daemon, screensaver (that you then have to kill because it locks you out in proot), Whisker menu, icon themes, GTK themes.

You don't need any of that to run a browser.

Debian + XFCE Alpine + i3
Base rootfs ~150MB ~3MB
Total with Chromium ~3GB ~600MB
RAM overhead of DE ~200-400MB ~5MB
Launch time 3-5 seconds <1 second
Window management Mouse-driven panels Keyboard-driven tiling
Screensaver issues Yes (locks you out) N/A
Compositor overhead Yes (disable manually) None

i3 tiles Chromium to fill the screen automatically. No panel eating screen space, no compositor burning CPU, no settings daemon running in the background. On DeX with a keyboard, i3's keybindings feel natural — you're already using keyboard shortcuts for everything else.

The Setup

Prerequisites

You need two apps:

  1. Termux — from F-Droid or GitHub (not Google Play, it's outdated)
  2. Termux:X11 — download the APK from github.com/termux/termux-x11/releases, plus install the companion package in Termux

Step 1: Termux Packages

pkg update && pkg upgrade -y
pkg install x11-repo
pkg install termux-x11-nightly \
            pulseaudio \
            proot-distro \
            virglrenderer-android
termux-setup-storage

Step 2: Install Alpine

proot-distro install alpine

That's a 3MB download. Compare that to Debian's 150MB or Ubuntu's 200MB.

Step 3: Configure Alpine

proot-distro login alpine --shared-tmp

Inside Alpine:

apk update && apk upgrade
apk add chromium i3wm i3status xterm \
        mesa-dri-gallium fonts-noto-core \
        dbus ttf-dejavu
exit

That's it. No desktop environment, no file manager, no themes.

Step 4: Create the Launch Script

Back in Termux, create ~/chrome.sh:

#!/bin/bash

# Kill previous sessions
killall -9 termux-x11 pulseaudio virgl_test_server_android 2>/dev/null
sleep 1

# Start X11 display server
termux-x11 :0 -ac &
sleep 2

# Start audio
pulseaudio --start --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp \
  auth-ip-acl=127.0.0.1 auth-anonymous=1

# Start GPU renderer
virgl_test_server_android &
sleep 1

# Launch i3 + Chromium inside Alpine
proot-distro login alpine --shared-tmp \
  --bind /sdcard/Download:/root/Downloads \
  --bind /sdcard/Documents:/root/Documents -- \
  bash -c "export DISPLAY=:0 \
  PULSE_SERVER=tcp:127.0.0.1 \
  GALLIUM_DRIVER=virpipe \
  MESA_GL_VERSION_OVERRIDE=4.0; \
  dbus-launch i3"
chmod +x ~/chrome.sh

Step 5: i3 Config for Chromium

Create ~/.config/i3/config inside Alpine (login first with proot-distro login alpine --shared-tmp):

set $mod Mod4

# Launch Chromium
bindsym $mod+Return exec chromium-browser --no-sandbox

# Kill focused window
bindsym $mod+Shift+q kill

# Focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right

# Move
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right

# Splits
bindsym $mod+b split h
bindsym $mod+v split v

# Fullscreen
bindsym $mod+f fullscreen toggle

# Workspaces
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3

# Auto-launch Chromium on startup
exec chromium-browser --no-sandbox

Step 6: Disable Phantom Process Killing

Android 12+ will kill your proot session in the background. On Android 14+ (which most modern Samsung phones run), there's a simple toggle:

Settings → Developer Options → Disable child process restrictions → Enable

If that toggle doesn't exist on your Samsung, do it from Termux itself:

pkg install android-tools
# Enable Wireless Debugging in Developer Options
adb pair <ip>:<port>   # enter pairing code
adb connect <ip>:<port>
adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent"
adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"
adb shell settings put global settings_enable_monitor_phantom_procs false

Step 7: Launch

bash ~/chrome.sh

Switch to the Termux:X11 app. i3 loads, Chromium opens full-screen. Press F12 for DevTools.

What Works

flowchart LR
    subgraph Android["Android Side"]
        A1[DeX Desktop]
        A2[Samsung Internet]
        A3[Steam Link]
        A4[All Android Apps]
    end

    subgraph Linux["Alpine + i3 Side"]
        B1[Desktop Chromium]
        B2[DevTools F12]
        B3[Chrome Extensions]
        B4[Desktop Site Rendering]
    end

    subgraph Shared["Shared Between Both"]
        C1[Clipboard]
        C2[Downloads Folder]
        C3[Documents Folder]
    end

    Android <--> Shared
    Linux <--> Shared

    style Android fill:#e1f5fe
    style Linux fill:#c8e6c9
    style Shared fill:#fff3e0
Feature Status
DevTools (F12) Works
Chrome Web Store extensions Works
Desktop site rendering Works
Copy/paste between Android ↔ Chromium Works
File downloads to Android Downloads folder Works
File uploads from shared folders Works
GPU acceleration (VirGL) Works
Audio playback Works
Multiple Chromium windows (i3 tiling) Works
Google account sync No (Chromium limitation)

What Doesn't (and Workarounds)

No bookmark/password sync — Chromium strips out Google's proprietary sync. Install Bitwarden for passwords and xBrowserSync for bookmarks from the Chrome Web Store. Both sync across all your devices.

No Android share intents — clicking a link in an Android app won't open it in proot Chromium. Copy-paste URLs between the two worlds.

No drag and drop — between Android and the X11 window. Use the shared filesystem instead.

No push notifications — Chromium web notifications don't bubble up to Android's notification shade.

The Alternative: Cloud Browser

If maintaining a local proot setup isn't your thing, you can achieve similar results with a Docker container on a cloud server:

# On Fly.io, DigitalOcean, etc.
docker run --rm -it --shm-size=512m \
  -p 6901:6901 \
  -e VNC_PW=your-password \
  kasmweb/chrome:1.18.0

Open https://your-server:6901 from any Android browser. Full Chrome with DevTools, accessible from anywhere. Tradeoff: network latency on every interaction vs. the local setup's zero latency.

Both can coexist — local for daily use, cloud for when you're away from your phone or need a disposable browser session.

Why This Matters

The XFCE + Debian crowd is recreating a laptop experience on a phone. That's backward. A phone connected to DeX with a keyboard and monitor is already a desktop — it just needs the one app that Android Chrome can't provide.

i3 + Alpine + Chromium is a purpose-built tool, not a general-purpose desktop. It launches in under a second, uses 5MB of RAM for the window manager, and gives you exactly what you need: a real browser with real DevTools. Everything else — file management, settings, media — stays on the Android side where it works better anyway.

Stop installing desktop environments to run a browser. Just run the browser.


Tools referenced in this post:

Need help with your project or have questions?

We specialize in AI automation, custom integrations, and intelligent workflows tailored to your business needs.

Whether you need help deploying, building, implementing, or creating a solution - or just want expert guidance on your project - we're here to help.

Contact us today to discuss your project.