Prerequisites#

  • magisk -> lhroot
  • Termux
  • Termux:X11

Optional -> Termux:Widget

Setup#

Termux#

Server Setup#

# Base Setup
pkg update -y && pkg upgrade -y
pkg install root-repo x11-repo tur-repo
pkg update -y

# Install Required packages
apt install -y tsu pulseaudio mesa-zink virglrenderer-mesa-zink xwayland termux-x11-nightly

# Optional Packages
apt install -y fish openssh

# Remove motd
touch .hushlogin

# GUI Setup
termux-setup-storage
sed '/allow-external-apps/s/^# //' -i ~/.termux/termux.properties
termux-reload-settings

# Audio Setup
printf '\nload-module module-sles-source\nload-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1\n' >> $PREFIX/etc/pulse/default.pa

# Start Audio Server
pulseaudio -D

# Termux:Widget shortcuts
mkdir .shortcuts

echo '#!/bin/sh
export CHROOT_DIR=/data/arch
killall -9 termux-x11 Xwayland pulseaudio virgl_test_server
termux-wake-lock; termux-toast "Starting X11"
am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity 
sudo busybox mount --bind $PREFIX/tmp $CHROOT_DIR/tmp
XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac &
sleep 3
pulseaudio -D
MESA_NO_ERROR=1 MESA_GL_VERSION_OVERRIDE=4.3COMPAT MESA_GLES_VERSION_OVERRIDE=3.2 GALLIUM_DRIVER=zink ZINK_DESCRIPTORS=lazy virgl_test_server --use-egl-surfaceless --use-gles &
su -c "(source bootlinux_env $CHROOT_DIR && $busybox chroot $CHROOT_DIR /usr/bin/env su -l poxi -c\
\"export XDG_RUNTIME_DIR=/tmp DISPLAY=:0 PULSE_SERVER=tcp:127.0.0.1:4713 && dbus-launch --exit-with-session startplasma-x11 &\")"' > ~/.shortcuts/LaunchXFCE_lhroot

echo '#!/bin/sh
export CHROOT_DIR=/data/arch
killall -9 termux-x11 Xwayland pulseaudio virgl_test_server
termux-wake-unlock; termux-toast "Stopping X11, chroot, etc."
sudo busybox umount $CHROOT_DIR/tmp
sudo killlinux $CHROOT_DIR' > ~/.shortcuts/KillChroot

echo '#!/bin/sh
termux-wake-lock; sshd &
echo "Connect using device IP, 8022 port"' > ~/.shortcuts/StartSSHD

Client Setup#

# Adjust /etc/pacman.conf
# Reinit Arch Repos
pacman-key --init && pacman-key --populate && pacman -Sy archlinux-keyring --noconfirm

# Remove unnecessary packages
pacman -Rcns linux-aarch64

# Install necessary packages
pacman -S --noconfirm base-devel git wget vim mesa mesa-vdpau mesa-utils vulkan-mesa-layers libva-mesa-driver opencl-rusticl-mesa 

# Install optional packages
pacman -S --noconfirm fish xfce4 pavucontrol pulseaudio pulseaudio-jack pulseaudio-alsa librewolf-bin box64

# Enable sudo for wheel

# Add standard user
useradd -m -G wheel -s /bin/fish poxi

# Set user password
passwd

# Switch to default user
su - poxi

# Fix fakeroot
git clone https://aur.archlinux.org/fakeroot-tcp.git && cd fakeroot-tcp && makepkg -si --noconfirm || cd src/fakeroot-1.32.1/ && sudo make install && cd ../.. && makepkg -si --noconfirm || yes | sudo pacman -U fakeroot-tcp-1.32.1-1-aarch64.pkg.tar.xz --overwrite="*"

# Install yay
git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si --noconfirm

# Fix SystemD
mv /usr/bin/systemctl /usr/bin/systemctl.old && curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl3.py > /usr/bin/systemctl &&chmod +x /usr/bin/systemctl

# Clean Build
cd ~/ && rm -rf fakeroot-tcp yay

See also#