Run XFCE4 Desktop on Android via Termux

Prerequisites

1. Install Packages in Termux

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

2. Install Ubuntu via Proot

proot-distro install ubuntu

3. Install XFCE4 & VS Code in Ubuntu

proot-distro login ubuntu --shared-tmp -- bash -c '
export DEBIAN_FRONTEND=noninteractive
apt update -y && apt upgrade -y
apt install -y xfce4 xfce4-terminal dbus-x11 sudo --no-install-recommends
apt install -y wget
wget -O /tmp/code.deb "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-arm64"
apt install -y /tmp/code.deb
rm -f /tmp/code.deb
'

Note: If elementary-xfce-icon-theme gets stuck during install, kill it with pkill -f "icon-theme" in another Termux session, then run dpkg --remove --force-remove-reinstreq elementary-xfce-icon-theme inside proot to skip it.

4. Start Script

Save as ~/.shortcuts/startproot_debian.sh:

#!/bin/bash

killall -9 termux-x11 pulseaudio virgl_test_server_android termux-wake-lock

am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity
XDG_RUNTIME_DIR=${TMPDIR}
termux-x11 :0 -ac &
sleep 3

pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1

virgl_test_server_android &

proot-distro login ubuntu --shared-tmp -- bash -c "export DISPLAY=:0 PULSE_SERVER=tcp:127.0.0.1; GALLIUM_DRIVER=virpipe dbus-launch --exit-with-session startxfce4"
chmod +x ~/.shortcuts/startproot_debian.sh

5. Usage

  1. Open Termux
  2. Run bash ~/.shortcuts/startproot_debian.sh
  3. Switch to Termux X11 app — XFCE4 desktop appears

Launch VS Code

In XFCE4 terminal:

code --no-sandbox

Desktop Shortcuts

Create VS Code shortcut:

cat > ~/Desktop/vscode.desktop << 'EOF'
[Desktop Entry]
Name=VS Code
Exec=/usr/bin/code --no-sandbox
Icon=code
Type=Application
Terminal=false
EOF
chmod +x ~/Desktop/vscode.desktop

Create terminal shortcut:

cat > ~/Desktop/terminal.desktop << 'EOF'
[Desktop Entry]
Name=Terminal
Exec=xfce4-terminal
Icon=utilities-terminal
Type=Application
Terminal=false
EOF
chmod +x ~/Desktop/terminal.desktop

6. Settings

Wireless ADB (Optional)

For remote management from PC:

adb pair localhost:<pair_port>    # enter pairing code
adb connect localhost:<connect_port>

Wireless ADB can be unstable. USB connection is more reliable.