স্ট্যাকটা বোঝা থাকলে সমস্যা সমাধান-এর প্রতিটি লক্ষণ স্পষ্ট হয়ে যায়। এই পাতায় ব্যাখ্যা আছে কীভাবে অংশগুলো একসাথে কাজ করে, আর না কাজ করলে কোথায় ভাঙে।
স্ট্যাক
┌─────────────────────────────────────────────────────┐
│ Android │
│ │
│ Termux:X11 অ্যাপ ◀──── X11 display ────┐ │
│ │ │
│ Termux হোস্ট │ │
│ ├─ display ও audio সার্ভিস │ │
│ ├─ PRoot সুপারভাইজার │ │
│ └─ ঐচ্ছিক VirGL সার্ভিস │ │
│ │ │ │
│ └─ PRoot Debian ──────────┘ │
│ ├─ Xfce4 ডেস্কটপ │
│ ├─ Debian অ্যাপ্লিকেশন │
│ └─ Mesa / Zink / VirGL │
│ │
│ Adreno কার্নেল GPU ইন্টারফেস ◀── Turnip পথ │
└─────────────────────────────────────────────────────┘
Android
Android কার্নেল, হার্ডওয়্যার ড্রাইভার, অ্যাপ স্যান্ডবক্স, পাওয়ার পলিসি ও process limit-এর মালিক। ternux Android replace করে না, bootloader unlock বা root চায় না। এতে privileged-system risk কমে, কিন্তু downloaded code harmless হয় না। Android যে capability expose করে না, PRoot সেটি দিতেও পারে না।
Termux
Termux হলো হোস্ট-পাশের Linux পরিবেশ। এটি PRoot কন্টেইনার আর বাইরে থাকা সার্ভিসগুলো (ডিসপ্লে, অডিও) সমন্বয় করে। Termux বন্ধ বা ফোর্স-স্টপ করলে Termux:X11 দৃশ্যমান থাকা সত্ত্বেও ডেস্কটপ শেষ হয়ে যেতে পারে।
PRoot Debian
PRoot বিশেষাধিকারপ্রাপ্ত chroot ছাড়াই একটি Debian ইউজারল্যান্ড দেয়। এটি userspace-এ path ও selected system call rewrite করে। Emulated root identity Android-এর Termux app sandbox পার হয় না। PRoot নিজে অতিরিক্ত security boundary নয়; Termux-accessible ও explicitly bound path container থেকেও reachable।
বাস্তবে এর মানে:
- বেশিরভাগ সাধারণ arm64 Debian অ্যাপ কাজ করে।
systemd, কার্নেল মডিউল, বিশেষাধিকৃত মাউন্ট ও সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ চলে না — কন্টেইনারে আসল init সিস্টেম নেই।- কন্টেইনার মানেই ফাইল: ব্যাকআপ = আর্কাইভ, আনইনস্টল = ডিলিট।
Termux:X11
Termux:X11 হলো সেই Android অ্যাপ যা X11 সেশন রেন্ডার করে — এটি নিজে ডেস্কটপ নয়। কালো Termux:X11 ভিউ মানে হতে পারে অ্যাপ সুস্থ, কিন্তু হোস্ট সার্ভিস, সকেট বা Xfce4 সেশন সুস্থ নয়।
গ্রাফিক্স পথ
Zink + Turnip — Adreno ডিভাইস (পছন্দের)
OpenGL অ্যাপ্লিকেশন
│
▼
Zink OpenGL → Vulkan অনুবাদ
│
▼
Vulkan লোডার
│
▼
Turnip Adreno-র জন্য Mesa Vulkan ড্রাইভার
│
▼
Android / কার্নেল GPU ইন্টারফেস
কেন দুই স্তর? Adreno ফোনে Vulkan ইউজারল্যান্ডে খোলা আছে, কিন্তু ডেস্কটপ OpenGL ড্রাইভার নেই। Zink ডেস্কটপ GL কলকে Vulkan-এ অনুবাদ করে; Turnip Adreno-তে Vulkan বাস্তবায়ন করে। পরীক্ষিত Adreno সেটআপে দুজনে মিলে ডেস্কটপ অ্যাপকে সরাসরি GPU route দেয়। প্রতিটি স্তরের সম্মতি দরকার — লোডার, ICD ফাইল বা ড্রাইভার বাইনারির একটি না থাকলেই ডেস্কটপ খোলে ঠিকই, কিন্তু রেন্ডার চলে CPU-তে।
VirGL — অন্যান্য GPU (সামঞ্জস্য)
OpenGL অ্যাপ্লিকেশন
│
▼
virpipe / VirGL
│
▼
হোস্ট-পাশের VirGL সার্ভিস (virgl_test_server_android)
│
▼
Android গ্রাফিক্স স্ট্যাক
Turnip route না থাকলে VirGL হলো ternux-এর compatibility route। GL command
কন্টেইনার সীমানা পেরিয়ে host-side renderer-এ যায়। GPU, Android build ও host
renderer অনুযায়ী feature, acceleration এবং গতি বদলায়; software fallback-ও
হতে পারে। তাই glxinfo -B ও বাস্তব workload দিয়ে যাচাই করুন। VirGL বেছে
নেওয়া নিজে ব্যর্থতা নয়, কিন্তু renderer evidence ছাড়া accelerated বলা ঠিক নয়।
অডিও ও ফাইলের সীমানা
অডিও PRoot সীমানা পেরোয় লুপব্যাক-শুধু TCP ব্রিজে: Debian অ্যাপ →
tcp:127.0.0.1:4713 → হোস্ট PulseAudio → ফোনের স্পিকার। লুপব্যাক বাঁধাই জরুরি:
মোবাইল ওয়ার্কস্টেশনের অপ্রমাণীকৃত অডিও বা মডেল সার্ভিস ডিফল্টে লোকাল
নেটওয়ার্কে খোলা থাকা উচিত নয়।
স্টোরেজ তিনটি আলাদা জায়গা:
| অবস্থান | কী |
|---|---|
Debian হোম (/home/<user>) |
কন্টেইনারের ভেতরে; ব্যাকআপের সাথে যায় |
Termux হোম (~) |
হোস্ট পাশে; লঞ্চার, স্টেট, স্ক্রিপ্ট |
শেয়ার্ড স্টোরেজ (~/storage/shared ↔ /sdcard) |
Android ফাইল যা সব অ্যাপ দেখে |
সোর্স কোড আর অপরিবর্তনীয় প্রজেক্ট শেয়ার্ড স্টোরেজ বা Git রিমোটে থাকা উচিত — শুধু কন্টেইনারের ভেতরে নয়।
নিঃশব্দ ব্যর্থতার ধরন
| ব্যর্থতা | কেন ডেস্কটপ তবু খুলতে পারে | প্রমাণ |
|---|---|---|
| Vulkan লোডার/ড্রাইভার পথ অসম্পূর্ণ | Mesa CPU রেন্ডারিংয়ে নেমে যায় | রেন্ডারার স্ট্রিং llvmpipe হওয়া চলবে না |
| আপডেটে Mesa বদলে গেছে | স্টক Mesa তবু ডেস্কটপ রেন্ডার করে | পরিচিত-ভালো বেসলাইনের সাথে রেন্ডারার স্ট্রিং মেলান |
| ভুল ব্যাকএন্ড বাছাই | সামঞ্জস্যপূর্ণ কিন্তু ধীর পথ তবু চলে | GPU প্রমাণ আর বাছাই করা পথের মিল থাকতে হবে |
| VirGL হোস্ট সার্ভিস নেই | সফটওয়্যার ফলব্যাক সার্ভিসের অনুপস্থিতি ঢেকে দেয় | লঞ্চার সতর্ক করে; রেন্ডারার llvmpipe |
| Android process policy / memory pressure | সেশন আগে চলে, পরে process হারায় | Signal 9-এর সঙ্গে memory, OEM battery policy ও readable Android setting মিলিয়ে দেখুন |
দৃশ্যমান Xfce4 ডেস্কটপ সাফল্যের সংজ্ঞা নয়। রেন্ডারার স্ট্রিং, সার্ভিসের স্বাস্থ্য ও একটি পরিচ্ছন্ন দ্বিতীয় লঞ্চ — এগুলোই শক্তিশালী প্রমাণ। এজন্যই ইনস্টলার ধরে না নিয়ে প্রতিটি ধাপ যাচাই করে।
ওয়ার্কলোডের ফলাফল
- Blender: ভিউপোর্টের উপযোগিতা নির্ভর করে গ্রাফিক্স পথ, সিনের জটিলতা, মেমরি ও তাপের ওপর। মসৃণ লো-পলি সিন বড় রেন্ডারের পূর্বাভাস নয়।
- লোকাল AI: Vulkan offload একই physical memory ও thermal budget ভাগ করে। কোনো নির্দিষ্ট model size সব ৬–৮ GB ফোনে চলবে—এমন guarantee নেই।
- ডেভেলপমেন্ট এজেন্ট: টুল চলে আপনার পরিবেশের ভেতরে; প্রোভাইডারের ক্রেডেনশিয়াল ও কমান্ড অনুমোদন আপনার সীমানা।
- সিকিউরিটি টুল: PRoot Debian ইউজারস্পেস দেয়, মনিটর মোড, USB পাসথ্রু বা ইচ্ছামতো কার্নেল ক্ষমতা নয়।
- টানা কম্পিউট: দীর্ঘ স্থির লোড থ্রটলিং, ব্যাটারি ক্ষয় ও তাপ ডেকে আনে — কোনো ফোনের জন্যই সুপারিশযোগ্য লক্ষ্য নয়।
কেন ইনস্টলার ধাপে ধাপে ও যাচাইকৃত
মোবাইল নেটওয়ার্ক ছিঁড়ে যায়, Android প্রসেস পুনরুদ্ধার করে, শত শত MB-র ডাউনলোড বিঘ্নিত হয়। পেশাদার ইনস্টলারকে বিঘ্নকে প্রত্যাশিত অবস্থা ধরতে হয়:
- আইডেমপোটেন্সি — শেষ হওয়া ধাপ চেক বা পুনঃপ্রবেশযোগ্য, কনফিগ নকল হয় না।
- রেকর্ডেড রিজিউম —
--resumesuccessful phase বাদ দিয়ে interrupted run-এর saved optional workload set restore করে; repair নয়। - লক্ষ্যভিত্তিক মেরামত —
--doctorব্যর্থতাকে তার ধাপে ম্যাপ করে। - অগ্রগতির আগে যাচাই — প্রতিটি গুরুত্বপূর্ণ ফাইল ও বাইনারির উপস্থিতি পরের ধাপ শুরুর আগে নিশ্চিত হয়।
- সহায়তাযোগ্য আউটপুট — ব্যর্থতা চেকটির নাম, প্রত্যাশিত ফল ও নিরাপদ পরবর্তী পদক্ষেপ বলে।
ternux — Copyright (c) 2026 Sobuj Miah (@soobujmiah) · Apache-2.0