এক-কমান্ড ইনস্টলার আসলে এই পাতাটাই, স্ক্রিপ্ট আকারে। এখানে সেই একই যাত্রা হাতে-কলমে, কমান্ডে কমান্ডে — যারা প্রতিটি ধাপ দেখতে ও নিয়ন্ত্রণ করতে চান, নেটওয়ার্ক সমস্যা ঘুরিয়ে কাজ করতে চান, বা ইনস্টলার কী করে সেটাই শিখতে চান, তাদের জন্য। প্রতিটি ব্লক Termux-এ চালান, যতক্ষণ না ধাপে বলা হয় ভিন্ন কোথাও।
মাঝপথে কোনো ধাপ ব্যর্থ হলে: থামুন, কারণ নির্ণয় করুন, তারপর এগোন।
প্রতিটি block আবার চালানোর আগে পড়ুন: যেখানে সম্ভব guard/check দেওয়া হয়েছে,
কিন্তু manual package, user ও file operation সর্বজনীনভাবে idempotent নয়। এই
guide-এ ternux Debian account ধরা হয়েছে; অন্য বৈধ lowercase নাম নিলে পরের
সব literal ternux একই নামে বদলান।
ধাপ ১ — দুটি অ্যাপ ইনস্টল করুন
- Termux — GitHub releases বা F-Droid থেকে। Google Play build আলাদা পরীক্ষামূলক Android 11+ line, যেখানে feature/bug-এর পার্থক্য আছে; এই guide মূল F-Droid/GitHub release line ধরে। Termux:API ও অন্য plugin Termux-এর একই source থেকে নিন, যাতে signing key মেলে।
- Termux:X11 — GitHub releases থেকে। একবার খুলুন, তারপর রেখে দিন — প্রথম লঞ্চের পরই Android ডিসপ্লে সার্ভিসের অনুমতি দেয়।
ধাপ ২ — Termux বেস প্যাকেজ
# Android একটি স্টোরেজ-অনুমতির ডায়ালগ দেখাবে — অনুমোদন করুন।
termux-setup-storage
# প্যাকেজ ইনডেক্স রিফ্রেশ ও আপগ্রেড।
pkg update -y
pkg upgrade -y
# X11 ও গ্রাফিক্স প্যাকেজ বহনকারী রিপোজিটরি।
pkg install x11-repo tur-repo -y
# ডিসপ্লে অ্যাপ সার্ভিস, অডিও, এবং কন্টেইনার ইঞ্জিন।
pkg install termux-x11-nightly -y
pkg install pulseaudio proot-distro -y
# হোস্ট-পাশের VirGL রেন্ডারার (সামঞ্জস্য GPU পথ — Adreno-তেও ইনস্টল করুন;
# খরচ কম, আর পথ বদল করা সহজ থাকে)।
pkg install virglrenderer-android -y
# পরে এই গাইডে লাগবে এমন শেল ও ডাউনলোড টুল।
pkg install zsh git curl wget nano tar -y
# ডেস্কটপ যাতে স্ক্রিন জাগিয়ে রাখতে পারে, তার ওয়েক-লক সাপোর্ট।
pkg install termux-api -y
শুধু Adreno ডিভাইস (Qualcomm GPU — ls -l /dev/kgsl-3d0 দিয়ে দেখুন):
pkg install mesa-vulkan-icd-freedreno -y
/dev/kgsl-3d0না থাকলে Freedreno ICD বাদ দিন: আপনার ডিভাইস VirGL পথে যাবে, সেখানে এই প্যাকেজের কোনো কাজ নেই।
তিনটি জরুরি বাইনারি সত্যিই ইনস্টল হলো কিনা যাচাই করুন:
command -v proot-distro && command -v termux-x11 && command -v pulseaudio
ধাপ ৩ — Debian ইনস্টল
proot-distro install debian
কেন PRoot? এটি userspace-এ root-like Debian userland দেয়—bootloader unlock বা Android root লাগে না। তবে PRoot security boundary নয়; Termux-accessible বা explicitly bound path reachable থাকে। Destructive কাজের আগে backup নিন।
ধাপ ৪ — Debian-এর ভেতরে ডেস্কটপ প্যাকেজ
রুট হিসেবে কন্টেইনারে ঢুকে Xfce4 ও GL/অডিও প্লাম্বিং ইনস্টল করুন:
proot-distro login debian
export DEBIAN_FRONTEND=noninteractive
apt update
# কোর ডেস্কটপ + GL/অডিও। এটি সফল হতেই হবে।
apt install -y sudo nano dbus-x11 pulseaudio pulseaudio-utils x11-utils \
mesa-utils libgl1-mesa-dri xfce4 xfce4-terminal vlc pm-utils colord
# PolicyKit: polkitd = trixie+, policykit-1 = bookworm। বেস্ট-এফোর্ট।
apt install -y polkitd || apt install -y policykit-1 || true
# স্পষ্ট Vulkan লোডার (Zink রানটাইমে libvulkan.so.1 dlopen করে) + টুলস।
apt install -y libvulkan1 vulkan-tools || true
# আর্কাইভ টুল। বেস্ট-এফোর্ট — rar/p7zip-rar থাকে Debian non-free-তে।
apt install -y zip unzip xarchiver unrar-free || true
apt install -y 7zip || apt install -y p7zip-full || true
exit
ধাপ ৫ — আপনার ইউজার তৈরি (নিরাপদ sudo সহ)
proot-distro login debian
USER_NAME=ternux
# ইউজার অনুপস্থিত থাকলে তৈরি করুন (ডেস্কটপ অ্যাকাউন্টে লগইন পাসওয়ার্ড লাগে না)।
id -u "$USER_NAME" >/dev/null 2>&1 \
|| adduser --disabled-password --gecos "" "$USER_NAME"
# গ্রাফিক্স ও অডিও গ্রুপ।
usermod -aG sudo "$USER_NAME"
usermod -aG video "$USER_NAME"
usermod -aG render "$USER_NAME"
usermod -aG audio "$USER_NAME"
# যাচাইকৃত ড্রপ-ইন ফাইলে পাসওয়ার্ডবিহীন sudo। /etc/sudoers-এ সরাসরি জুড়বেন
# না: একটি টাইপো এই অ্যাকাউন্টের sudo ভেঙে দিতে পারে। PRoot Distro দিয়ে
# guest-root recovery shell খোলা যায়; সেটি Android root নয়।
TMP_SUDOERS="$(mktemp)"
printf '%s ALL=(ALL) NOPASSWD: ALL\n' "$USER_NAME" > "$TMP_SUDOERS"
visudo -cf "$TMP_SUDOERS" \
&& install -m 0440 -o root -g root "$TMP_SUDOERS" /etc/sudoers.d/ternux
rm -f "$TMP_SUDOERS"
exit
এটি কাজ করছে কিনা যাচাই করুন (এটিই সেই ব্যর্থতা যা পরে লঞ্চারকে নিঃশব্দে আটকে দেয়):
proot-distro login debian --user ternux -- sudo -n true
ধাপ ৬ — GPU ড্রাইভার
আপনার পথ শনাক্ত করুন
ls -l /dev/kgsl-3d0
- ফাইল আছে → Adreno → ৬ক — Zink/Turnip-এ যান।
- নেই → Mali/Xclipse/PowerVR → ৬খ — VirGL-এ যান।
৬ক — Zink + Turnip (Adreno)
lfdevs/mesa-for-android-container → Releases থেকে বর্তমান Debian Trixie ARM64 asset resolve করুন। Fedora, Ubuntu, Alpine বা Arch archive বদলি করবেন না। আগে guest distribution মিলিয়ে নিন:
proot-distro login debian -- bash -c '. /etc/os-release; echo "$VERSION_CODENAME"'
# এই documented asset route-এ প্রত্যাশিত ফল: trixie
trixie না এলে থামুন; অন্য distribution-এর Mesa file overwrite করবেন না।
DRIVER_API=https://api.github.com/repos/lfdevs/mesa-for-android-container/releases/latest
DRIVER_TARBALL="$TMPDIR/mesa-freedreno.tar.gz"
DRIVER_URL="$(curl -fsSL "$DRIVER_API" \
| grep -o '"browser_download_url": *"[^"]*debian[^"]*trixie[^"]*arm64\.tar\.gz"' \
| head -n 1 \
| sed 's/.*"browser_download_url": *"//; s/"$//')"
[ -n "$DRIVER_URL" ] || { echo "No Debian Trixie ARM64 release asset found"; exit 1; }
printf 'Resolved: %s\n' "$DRIVER_URL"
curl -fL --retry 3 "$DRIVER_URL" -o "$DRIVER_TARBALL"
Partial upgrade-এর পরে curl link না হলে শেষ line-এর বদলে চালান:
wget -O "$DRIVER_TARBALL" "$DRIVER_URL"
Extract করার আগে validate করুন—truncated download বা HTML error page root হিসেবে unpack করা যাবে না:
# ১. আসল gzip tarball:
tar -tzf "$DRIVER_TARBALL" >/dev/null && echo "valid tarball"
# ২. absolute path বা path traversal নয়:
tar -tzf "$DRIVER_TARBALL" \
| grep -E '^/|(^|/)\.\.(/|$)' \
&& { echo "UNSAFE - STOP"; exit 1; } \
|| echo "paths ok"
# ৩. যে target দুটি extract হবে, প্রতিটি ঠিক একবার regular file হতে হবে।
# অন্য Mesa member বৈধ symlink হতে পারে; সেগুলো extract হবে না।
tar -tvzf "$DRIVER_TARBALL" | awk '
/\/usr\/lib\/aarch64-linux-gnu\/libvulkan_freedreno[.]so$/ {
if (substr($1,1,1) != "-") bad=1
driver++
}
/\/usr\/share\/vulkan\/icd[.]d\/freedreno_icd[.]aarch64[.]json$/ {
if (substr($1,1,1) != "-") bad=1
icd++
}
END { if (bad || driver != 1 || icd != 1) exit 1 }
' && echo "one regular driver and one regular ICD found" \
|| { echo "unexpected archive layout"; exit 1; }
# ৪. troubleshooting/reproduction record:
sha256sum "$DRIVER_TARBALL"
ternux-এর দরকারি শুধু দুটি file—Turnip driver ও ICD manifest—staging folder-এ extract করুন, তারপর mode-সহ install ও Mesa package hold করুন:
proot-distro login debian --shared-tmp
set -e
stage=/tmp/ternux-driver-stage
rm -rf "$stage"; mkdir -p "$stage"
trap 'rm -rf "$stage"' EXIT
tar -xzf /tmp/mesa-freedreno.tar.gz -C "$stage" \
--wildcards "*/usr/lib/aarch64-linux-gnu/libvulkan_freedreno.so" \
"*/usr/share/vulkan/icd.d/freedreno_icd.aarch64.json"
driver="$(find "$stage" -type f \
-path '*/usr/lib/aarch64-linux-gnu/libvulkan_freedreno.so' -print -quit)"
icd="$(find "$stage" -type f \
-path '*/usr/share/vulkan/icd.d/freedreno_icd.aarch64.json' -print -quit)"
[ -n "$driver" ] && [ -n "$icd" ] \
|| { echo "Turnip target files missing after staged extraction"; exit 1; }
install -m 0755 "$driver" /usr/lib/aarch64-linux-gnu/libvulkan_freedreno.so
mkdir -p /usr/share/vulkan/icd.d
install -m 0644 "$icd" \
/usr/share/vulkan/icd.d/freedreno_icd.aarch64.json
ldconfig
apt-mark hold mesa-vulkan-drivers libgl1-mesa-dri libglx-mesa0 \
libgbm1 libegl-mesa0
exit
Target ও hold যাচাই করুন:
proot-distro login debian -- bash -c '
test -f /usr/lib/aarch64-linux-gnu/libvulkan_freedreno.so &&
test -f /usr/share/vulkan/icd.d/freedreno_icd.aarch64.json &&
apt-mark showhold && echo "Turnip targets installed"'
৬খ — VirGL (অন্যান্য GPU)
ইনস্টল করার কিছু নেই — শুধু হোস্ট রেন্ডারার আছে কিনা যাচাই করুন:
command -v virgl_test_server_android && echo "VirGL ready"
ধাপ ৭ — অডিও, লোকেল, ফন্ট
৭ক — অডিও ব্রিজ (Termux পাশে)
PulseAudio-র কনফিগে লুপব্যাক-শুধু TCP ব্রিজ জুড়ে দিন:
PA_CONF="$PREFIX/etc/pulse/default.pa"
OLD='load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1 port=4713'
NEW='load-module module-native-protocol-tcp listen=127.0.0.1 auth-ip-acl=127.0.0.1 auth-anonymous=1 port=4713'
SINK='load-module module-opensles-sink sink_name=Speaker'
DEFAULT='set-default-sink Speaker'
mkdir -p "$(dirname "$PA_CONF")"
if [ -L "$PA_CONF" ] || { [ -e "$PA_CONF" ] && [ ! -f "$PA_CONF" ]; }; then
echo "PulseAudio config path is not a regular, non-symlink file: $PA_CONF" >&2
false
else
INPUT=/dev/null
[ ! -f "$PA_CONF" ] || INPUT="$PA_CONF"
if grep -E '^[[:space:]]*load-module[[:space:]]+module-native-protocol-tcp([[:space:]]|$)' "$INPUT" \
| grep -Fvx -e "$OLD" -e "$NEW" | grep -q .; then
echo "Custom PulseAudio TCP module আছে; overwrite না করে review করুন।" >&2
false
elif TMP="$(mktemp "${PA_CONF}.ternux.XXXXXX")"; then
awk -v old="$OLD" -v new="$NEW" '
$0 == old || $0 == new { if (!seen) print new; seen=1; next }
{ print }
END { if (!seen) print new }
' "$INPUT" > "$TMP" &&
{ grep -qxF "$SINK" "$TMP" || printf '%s\n' "$SINK" >> "$TMP"; } &&
{ grep -qxF "$DEFAULT" "$TMP" || printf '%s\n' "$DEFAULT" >> "$TMP"; } &&
{ [ ! -f "$PA_CONF" ] || chmod --reference="$PA_CONF" "$TMP" 2>/dev/null || true; } &&
mv -f "$TMP" "$PA_CONF" || { rm -f "$TMP"; false; }
else
echo "Could not create a PulseAudio staging file." >&2
false
fi
fi
কেন শুধু loopback? Audio TCP দিয়ে container boundary পার হয়।
listen=127.0.0.1 service-টিকে LAN থেকে দূরে রাখে; anonymous same-device
client তবুও পৌঁছাতে পারে, তাই bind address সরাবেন না।
৭খ — লোকেল ও ফন্ট (Debian-এর ভেতরে)
proot-distro login debian --user ternux
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt install -y locales
echo 'en_US.UTF-8 UTF-8' | sudo tee -a /etc/locale.gen >/dev/null
sudo locale-gen en_US.UTF-8
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
sudo apt install -y fonts-symbola fonts-noto-color-emoji \
fonts-font-awesome fonts-powerline
# ডেস্কটপের PulseAudio ক্লায়েন্টকে লুপব্যাক ব্রিজের দিকে দেখান।
mkdir -p ~/.config/pulse
echo 'default-server = tcp:127.0.0.1:4713' > ~/.config/pulse/client.conf
# টার্মিনাল আইকন গ্লিফের জন্য Nerd Font (বেস্ট-এফোর্ট)।
mkdir -p ~/.local/share/fonts
wget -q -O /tmp/font.zip \
https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip \
&& unzip -oq /tmp/font.zip -d ~/.local/share/fonts/ \
&& fc-cache -f
rm -f /tmp/font.zip
exit
ধাপ ৮ — লঞ্চার (~/x.sh)
ইনস্টলার যে ফাইলটি তৈরি করে, এটি সেই ফাইল। হাতে বানান:
nano ~/x.sh
আপনার পথের কনটেন্ট পেস্ট করুন, সেভ করুন, তারপর:
chmod +x ~/x.sh
৮ক — Zink (Adreno) লঞ্চার
#!/data/data/com.termux/files/usr/bin/bash
# ternux launcher — Zink/Turnip route (Adreno)
set -u
TMPDIR="${TMPDIR:-/data/data/com.termux/files/usr/tmp}"
cleanup() {
pkill -9 -f termux-x11 2>/dev/null || true
pkill -9 -f virgl_test_server 2>/dev/null || true
pulseaudio --kill 2>/dev/null || pkill -KILL -x pulseaudio 2>/dev/null || true
rm -f "$TMPDIR"/.X11-unix/X* "$TMPDIR"/.X*-lock "$TMPDIR"/pulse-socket "$TMPDIR"/.pulse-*/native 2>/dev/null || true
termux-wake-unlock 2>/dev/null || true
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
# Clean up any previous session
pkill -9 -f termux-x11 2>/dev/null || true
pkill -9 -f virgl_test_server 2>/dev/null || true
pulseaudio --kill 2>/dev/null || pkill -KILL -x pulseaudio 2>/dev/null || true
rm -f "$TMPDIR"/.X11-unix/X* "$TMPDIR"/.X*-lock "$TMPDIR"/pulse-socket "$TMPDIR"/.pulse-*/native 2>/dev/null || true
# Keep Android from suspending the session
termux-wake-lock 2>/dev/null || true
# Audio
unset PULSE_SERVER
pulseaudio --start --exit-idle-time=-1 --daemonize 2>/dev/null || true
sleep 0.3
pactl load-module module-native-protocol-tcp listen=127.0.0.1 auth-ip-acl=127.0.0.1 auth-anonymous=1 port=4713 \
>/dev/null 2>&1 || true
# Display
termux-x11 :0 -ac &
X11_PID=$!
echo "Waiting for Termux-X11 display socket..."
WAITED=0
while [ ! -e "$TMPDIR/.X11-unix/X0" ]; do
if ! kill -0 "$X11_PID" 2>/dev/null; then
echo "ERROR: termux-x11 exited before creating its socket."
echo " Open the Termux:X11 app once, then run this again."
exit 1
fi
if [ "$WAITED" -ge 300 ]; then
echo "ERROR: timed out after 30s waiting for display :0."
exit 1
fi
WAITED=$((WAITED + 1))
sleep 0.1
done
echo "Display :0 ready."
# Desktop
proot-distro login debian --shared-tmp \
--bind /dev/kgsl-3d0:/dev/kgsl \
--bind /dev/dri \
--user ternux \
--env DISPLAY=:0 \
--env PULSE_SERVER=tcp:127.0.0.1:4713 \
--env MESA_LOADER_DRIVER_OVERRIDE=zink \
--env GALLIUM_DRIVER=zink \
--env TU_DEBUG=sysmem,noconform \
--env MESA_VK_WSI_DEBUG=sw \
--env MESA_DISK_CACHE_SINGLE_FILE=1 \
--env MESA_SHADER_CACHE_MAX_SIZE=2048M \
--env QT_X11_NO_MITSHM=1 \
--env XDG_RUNTIME_DIR=/home/ternux/.runtime \
--env LANG=en_US.UTF-8 \
--env LC_ALL=en_US.UTF-8 \
-- bash -c '
set -u
mkdir -p ~/.runtime /tmp/mesa_cache
chmod 700 ~/.runtime /tmp/mesa_cache
until xdpyinfo -display :0 >/dev/null 2>&1; do sleep 0.1; done
sudo -n mkdir -p /var/run/dbus /run/dbus /run/user/$(id -u) 2>/dev/null || true
sudo -n dbus-uuidgen --ensure >/dev/null 2>&1 || true
sudo -n rm -f /etc/xdg/autostart/light-locker.desktop 2>/dev/null || true
xfconf-query -c xfwm4 -p /general/use_compositing -s false >/dev/null 2>&1 || true
exec dbus-launch --exit-with-session startxfce4
'
# The EXIT trap performs teardown on success, failure, Ctrl+C or termination.
৮খ — VirGL সংস্করণ: মাত্র দুটি বদল
ওপরের ফাইলটি থেকে শুরু করে দুটি এডিট করুন:
echo "Display :0 ready."আর# Desktop-এর মাঝে এই ব্লকটি ঢোকান:
virgl_test_server_android >/dev/null 2>&1 &
VIRGL_PID=$!
sleep 1
if ! kill -0 "$VIRGL_PID" 2>/dev/null; then
echo "WARNING: virgl_test_server_android failed to start."
echo " Rendering will fall back to software (llvmpipe)."
fi
- দুটি
--bindline সরান এবং argument block থেকে-- bash -cseparator পর্যন্ত নিচের অংশ দিয়ে বদলান:
--user ternux \
--env DISPLAY=:0 \
--env PULSE_SERVER=tcp:127.0.0.1:4713 \
--env GALLIUM_DRIVER=virpipe \
--env MESA_GL_VERSION_OVERRIDE=4.3COMPAT \
--env QT_X11_NO_MITSHM=1 \
--env XDG_RUNTIME_DIR=/home/ternux/.runtime \
--env LANG=en_US.UTF-8 \
--env LC_ALL=en_US.UTF-8 \
-- bash -c '
--env ইচ্ছাকৃতভাবে প্রতিটি variable-এর জন্য repeat করা হয়েছে: PRoot-Distro
এটিকে repeatable single VAR=VALUE option হিসেবে define করে।
শেষ ফাইলটি সিনট্যাক্স-চেক করুন:
bash -n ~/x.sh && echo "launcher ok"
ধাপ ৯ — শেল শর্টকাট
cat >> ~/.bashrc << 'EOF'
# ==== TERNUX ALIASES ====
alias x='~/x.sh'
alias killx='pkill -f termux-x11 || true; pulseaudio --kill 2>/dev/null || \
pkill -KILL -x pulseaudio || true; rm -f $TMPDIR/.X11-unix/X* \
$TMPDIR/.X*-lock $TMPDIR/.pulse-*/native'
alias db='proot-distro login debian --shared-tmp --user ternux'
alias droot='proot-distro login debian --shared-tmp'
alias xgo='am start -n com.termux.x11/com.termux.x11.MainActivity 2>/dev/null; sleep 1; ~/x.sh'
clean-mesa() {
proot-distro login debian --user ternux -- bash -c 'rm -rf ~/.cache/mesa/*'
echo "Mesa cache cleared."
}
sysmon() {
echo "--- CPU & Memory ---"; free -h
echo ""; echo "--- GPU / KGSL Nodes ---"
ls -l /dev/kgsl-3d0 /dev/dri 2>/dev/null || echo "Direct GPU nodes not available."
}
# ==== END TERNUX ALIASES ====
EOF
রিলোড করে শুরু করুন:
source ~/.bashrc
x
ধাপ ১০ — Android 12+ child-process setting check
getprop ro.build.version.sdk
settings get global settings_enable_monitor_phantom_procs
SDK ৩১+-এ false/0 readable global monitor disabled, true/1 enabled,
আর blank/unknown inconclusive। Signal 9 memory pressure বা OEM battery
management থেকেও আসতে পারে। প্রথমে Termux/Termux:X11 battery use Unrestricted
করুন ও build parallelism কমান। Evidence child-process restriction দেখালে
system-wide trade-off পড়ে release-এ exposed control ব্যবহার করুন:
- Android 14+: Developer options-এ Disable child process restrictions থাকতে পারে; OEM wording/availability বদলায়। Change-এর পর reboot।
- Android 12L/13:
adb shell settings put global settings_enable_monitor_phantom_procs false - Android 12 exactly: Troubleshooting-এর
device_configcontrol review করুন। - Rooted:
su -c "settings put global settings_enable_monitor_phantom_procs false"
Original value record করুন; abnormal battery drain বা instability হলে reverse করুন।
ধাপ ১১ — পুরো স্ট্যাক যাচাই
# Termux পাশে
command -v termux-x11 proot-distro pulseaudio virgl_test_server_android
[ -x ~/x.sh ] && echo "launcher executable"
# Debian পাশে
proot-distro login debian --user ternux -- bash -c '
command -v startxfce4 && command -v glxinfo && command -v pactl &&
sudo -n true && echo "Debian core OK"'
ডেস্কটপ চলার পর (x চালিয়ে) ডেস্কটপের টার্মিনাল থেকে GPU প্রমাণ করুন:
glxinfo | grep "renderer string"
| Observation | ব্যাখ্যা |
|---|---|
zink … (MESA_TURNIP) |
পরীক্ষিত Adreno Zink/Turnip route detected |
virgl / virpipe |
compatibility route detected; host acceleration/workload আলাদা যাচাই করুন |
llvmpipe |
CPU software rendering |
| blank/error | display বা GL stack আগে diagnose করুন |
আনইনস্টল
Scoped route ব্যবহার করুন, যাতে prompt ও target স্পষ্ট থাকে:
ternux uninstall # interactive component choice
ternux uninstall container # Debian data delete করার আগে confirm
ternux uninstall all # চার scoped target; আগে backup
container/all Debian-এর ভেতরের সব data ধ্বংস করে। all চালালেও Termux
package, ternux CLI/library, repository/storage choice ও Termux PulseAudio config
থেকে যায়। Automation-এ --yes শুধু explicit irreversible confirmation হিসেবে দিন।
ternux — Copyright (c) 2026 Sobuj Miah (@soobujmiah) · Apache-2.0