ternux ডকুমেন্টেশন আপডেট ১৭ আগস্ট ২০২৬

আর্কিটেকচার

Android, Termux, PRoot Debian, Termux:X11 ও Mesa কীভাবে ternux-এ একসাথে কাজ করে — গ্রাফিক্স পথ, সীমানা, এবং যে ব্যর্থতার ধরনগুলোর দিকে নজর রাখতে হবে।

স্ট্যাকটা বোঝা থাকলে সমস্যা সমাধান-এর প্রতিটি লক্ষণ স্পষ্ট হয়ে যায়। এই পাতায় ব্যাখ্যা আছে কীভাবে অংশগুলো একসাথে কাজ করে, আর না কাজ করলে কোথায় ভাঙে।


স্ট্যাক

┌─────────────────────────────────────────────────────┐
│ 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-র ডাউনলোড বিঘ্নিত হয়। পেশাদার ইনস্টলারকে বিঘ্নকে প্রত্যাশিত অবস্থা ধরতে হয়:

  • আইডেমপোটেন্সি — শেষ হওয়া ধাপ চেক বা পুনঃপ্রবেশযোগ্য, কনফিগ নকল হয় না।
  • রেকর্ডেড রিজিউম — --resume successful phase বাদ দিয়ে interrupted run-এর saved optional workload set restore করে; repair নয়।
  • লক্ষ্যভিত্তিক মেরামত — --doctor ব্যর্থতাকে তার ধাপে ম্যাপ করে।
  • অগ্রগতির আগে যাচাই — প্রতিটি গুরুত্বপূর্ণ ফাইল ও বাইনারির উপস্থিতি পরের ধাপ শুরুর আগে নিশ্চিত হয়।
  • সহায়তাযোগ্য আউটপুট — ব্যর্থতা চেকটির নাম, প্রত্যাশিত ফল ও নিরাপদ পরবর্তী পদক্ষেপ বলে।

ternux — Copyright (c) 2026 Sobuj Miah (@soobujmiah) · Apache-2.0

এই পৃষ্ঠা সহায়ক ছিল? ভুল, অসম্পূর্ণতা বা নতুন device evidence জানান।
ইস্যু খুলুন