مهدی حمیدی
مهدی حمیدی
خواندن ۹ دقیقه·۵ سال پیش

راه‌اندازی دسکتاپ اوبونتو روی اندروید، بدون دسترسی روت

چند روز پیش موفق شدم که یک دسکتاپ کاملاً "دبیان"ی رو روی گوشی اندرویدیم بالا بیارم، بدون دسترسی روت… و برای این اچیومنت، یک توییت زدم. از اونجا که قرار شد برای این تجربه پستی بذارم، ترجیح دادم که برای تکرار این تجربه و از دست ندادن جزئیات، این بار این کار رو با اوبونتو انجام بدم.

دسکتاپ XFCE روی محیط Debian Buster روی Android 9 - OxygenOS روی گوشی Oneplus 5T
دسکتاپ XFCE روی محیط Debian Buster روی Android 9 - OxygenOS روی گوشی Oneplus 5T

خلاصه کل این پست در شش خط:

روی گوشیتون termux نصب می‌کنید، پکیج anlinux رو که یک راهنما بیشتر نیست، نصب می‌کنید، اون بهتون میگه برای نصب دیستروی دلخواهتون چه دستوری رو تو termux بزنید. وارد محیط دیستروی لینوکسیتون می‌شید، دسکتاپتون رو نصب می‌کنید. علاوه بر اون یه vncserver مثل tigervnc یا tightvncserver نصب می‌کنید. تو فایل vnc/xstartup./~ میگید که موقع اجرای vnc server چه دسکتاپی اجرا بشه. مثلاً xfce4-session اجرا بشه. vnc server رو اجرا می‌کنید، وارد محیط اندرویدتون میشید و یک vnc client مثل RealVNC نصب می‌کنید و وصلش می‌کنید به localhost و تمام! :)
(و اگر فکر می‌کنید کلک رشتی زدم، باید بگم که تو دسکتاپ‌های مبتنی بر X Server اتفاق مشابه این میفته!)

چی شد و از کجا شروع شد؟

خب، خیلی وقت‌ها پیش میاد که نیاز داریم یه دیستروی لینوکس واقعی همراهمون باشه، عین چیزی که تو لپتاپمون هست. اگر یک DevOps یا SysAdmin باشید، این جزو نیازهای ضروری شماست. اگه نیازتون صرفاً یه ssh زدن هست که ابزار براش تو اندروید زیاده و… خب، اوکی، اندروید خودش روی کرنل لینوکس هست و خود termux به تنهایی اکثر پکیج‌هایی که تو لینوکس بهش نیاز پیدا می‌کنیم رو داره! اصلاً apt داره، python داره، mc داره،… اَمّا: گاهی پیش میاد که خود termux هم کافی نیست:

  • خیلی پکیج‌ها هستند که معادلشون تو مخزن بسته‌های termux نیست، مثل phantomjs و کامپایل کردنشون با npm تو محیط termux به مشکل می‌خوره…
  • بعضی کارها نیازمند این هست که حتماً گوشی root باشند. مثلاً یه پنل سازمانی داریم که پشت vpn هست و سمت dns server، آدرس مربوطه بهش ست نشده یا یه آدرس عمومی روش ست شده… و سمت وب‌سرور، فقط اجازه دسترسی از طریق آدرس خاصی رو میده. این نیازمند تغییرات تو فایل system/etc/hosts/. تو گوشی روت شده هست که با هر بار آپدیت گوشی می‌پره!
  • (ما احتمالاً تو مورد بالایی نیازمند یک مرورگر هم هستیم که etc/hosts/ ما رو هم بخونه تا بتونیم اون پنل سازمانی رو باز کنیم! برای همین اپ کروم یا فایرفاکس گوشی برای ما پاسخگو نیست. باید یه محیطی باشه که این متغیرها رو بخونه و بده به مرورگر)
  • ما آدم گیکی هستیم و می‌خوایم امتحان کنیم ببینیم چطور میشه این کار رو کرد! :)

چیکار کنیم؟ چطوری کار می‌کنه؟ چطوری میشه که بشه؟

خب، برای این کار نیاز به چند تا ابزار داریم:

F-Droid (optional), Termux , AnLinux, TightVNCServer, RealVNC, Hackers Keyboard (optional)

این رو هم اشاره کنم که اگر رو گوشیتون دسکتاپ لینوکسی بیارید بالا، احتمالاً برای استفاده موثر ازش نیازمند ماوس و کیبرد هم هستید. می‌تونید از mini mouse-keyboard های قابل حمل استفاده کنید که با بلوتوث به گوشی وصل میشن. یا اگه می‌خواید به جای لپتاپ تو شرکت استفاده کنید و تصویر بزرگ می‌خواید، یه هاب تبدیل از micro-usb یا usb type c به hdmi داشته باشید که برای ماوس/کیبرد/فلش ورودی usb هم داره.
در هر صورت، اگر نیازمند یه کیبرد کامل با تمامی قابلیت‌های یک کیبرد فیزیکی هستید، Hacker's Keyboard رو پیشنهاد می‌کنم.
خب، توضیحات اضافی بسته، شروع می‌کنیم.

۱- نصب Termux و AnLinux
این برنامه‌ها رو از طریق لینک‌های بالا نصب کنید. اگر می‌خواید همیشه آخرین ورژن این برنامه‌ها رو داشته باشید، از استور برنامه‌های آزاد و متن‌باز F-Droid استفاده کنید.

۲- انتخاب و نصب توزیع دلخواه
برنامه AnLinux رو باز کنید و دیستروی دلخواهتون رو انتخاب کنید:

انتخاب توزیع دلخواه
انتخاب توزیع دلخواه


تو این بخش، AnLinux به شما یه دستور میده که باید اون رو تو محیط Termuxتون paste و اجرا کنید. کاری که این دستور میکنه این هست که یک rootfs از توزیع دلخواه شما رو روی گوشی‌تون دانلود می‌کنه و از طریق دستور proot واردش میشه. rootfs درواقع یک ایمیج بسیار مینیمال از اون توزیع مورد علاقه شما هست. مشابه اون چیزی که تو کانتینرهای docker شاهدش هستید. proot یک ابزار هست مثل chroot، با این تفاوت که بر خلاف chroot که فقط به کاربر root اجازه ساختن jail می‌ده، به کاربر عادی هم اجازه استفاده می‌ده. خوشبختانه این ابزار تو مخازن بسته‌های termux موجود هست!

۳- ورود به محیط توزیع دلخواه و تست
بعد از اتمام این کار، همون طور که خود اسکریپت اجرایی‌تون هم اشاره می‌کنه، باید اسکریپت start-ubuntu.sh رو اجرا کنید. خیلی ساده تایپ کنید:

./start-ubuntu.sh
پایان یافتن دریافت Ubuntu - RootFS و پیش از ورود به آن
پایان یافتن دریافت Ubuntu - RootFS و پیش از ورود به آن

تبریک! شما الآن وارد محیط اوبونتو شدید! باور نمی‌کنید؟ این دستور رو اجرا کنید و خروجی رو چک کنید:

cat /etc/issue

خب، قدم بعدی چی می‌تونه باشه؟ احتمالاً نصب برنامه‌های دلخواهی که قبلاً رو اوبونتو نصب می‌کردید! (فقط برای تست) بزنید:

apt-get update apt-get install git bash-completion vim mc wget curl

خواهید دید که همه بسته‌ها از مخازن اصلی اوبونتو (احتمالاً با معماری aarch64) دانلود می‌شن.

۴- نصب دسکتاپ و VNC Server
خب، وقتشه که یه دسکتاپ مناسب برای گوشیتون نصب کنید، من دسکتاپ XFCE رو برای این کار انتخاب کردم. هرچند شما می‌تونید دسکتاپ‌های Mate و LXDE و... رو هم امتحان کنید. راستش من سراغ Gnome و KDE نرفتم. چون احتمال می‌دادم کار نکنن. این دستور رو تایپ کنید و منتظر دانلود و اتمام مراحل نصب باشید:

apt-get update apt-get install xfce4 tightvncserver
دریافت بسته‌های مربوط به XFCE و TightVNCServer
دریافت بسته‌های مربوط به XFCE و TightVNCServer

۵- راه‌اندازی VNC
خب، الآن که دارم این بخش رو تایپ می‌کنم، روند نصب بخش ۴ روی ۳۰٪ هست و داره پیش میره. تا کامل بشه، می‌خوام براتون یکم از منطق کار بگم.

(ویرایش): رسیدم به وسط‌های نصب، اینجا ازتون تنظیمات کیبرد می‌خواد. من زدم روی English - US. اینجا باید عدد وارد کنید. مثلاً 31 و بعد 1 رو:

تنظیمات کیبرد
تنظیمات کیبرد

۵-۱- مختصری از XServer و VNC
(این یه تیکه زیادی فنیه، نخونید هم مهم نیست)

در حالت عادی توی PC، وقتی دسکتاپ لینوکس رو اجرا می‌کنید، مرورگر یا هر برنامه GUI دار دیگه‌ای رو که باز می‌کنید، خروجیشون رو میدن به XServer. در حالت عادی XServer به درایور کارت گرافیک و در ادامه به مانیتور وصل هست و این باعث می‌شه که ما بتونیم اون اپلیکیشن و دسکتاپ رو رو مانیتورمون ببینم. اما ما تو این سناریو که مانیتور نداریم! (حداقل میشه اینطور گفت که از بین دو تا jail که یکیش واسه proot هست و اون یکی واسه termux هست و محیط isolationی که اندروید به وجود آورده و selinux توش، حتی اگر روت هم باشیم، عمراً بتونیم مستقیماً خروجی رو بریزیم رو فریم بافر کارت گرافیک گوشی). پس اینجا، XServer به جای اینکه خروجی رو بریزه سمت کارت گرافیک، میریزه یه جای دیگه. اسم اون جای دیگه این هست: VNC Server. ما برای دیدن این محتوا نیاز داریم به یه ابزار به اسم VNC Client.
و بله! این VNC کلاینت می‌تونه لزوماً رو گوشی شما نباشه! می‌تونه روی یک کامپیوتر دیگه باشه که وصل میشه به گوشیتون!
و باز هم بله! XServer هم می‌تونه یه جای دیگه باشه! منطق همه این بخش‌ها به شکل شبکه هست، ولی کاربر عادی معمولاً با این مفاهیم درگیر نمی‌شه:

معماری X
معماری X

۵-۲- راه‌اندازی VNC Server

برای اوبونتو VNC Serverهای مختلفی توسعه داده شده، مثل TigerVNC و TightVNCServer. من از مورد دوم استفاده کردم. با این حال دستورات راه‌اندازی و پارامترهای اون‌ها عین هم هستند! :)
قبل از راه‌اندازی VNC Server، بهتره که اپ VNC Viewer رو روی گوشیتون نصب کنید که وقتی سرور رو راه‌اندازی کردید، برای وصل شدن بهش معطل نصب اپ گوشیتون نشید.
…و اما VNC Server، نیازمند این هست که یک نام کاربری براش تعریف بشه. شما می‌تونید هر نامی رو تو این بخش بگذارید. این کار رو فقط یک بار انجام بدید:

echo &quotexport USER=noobuntuser&quot >> ~/.bashrc source ~/.bashrc

و بالاخره، اجرای VNC Server:

vncserver :0

اگر بار اولتون باشه که دستور vncserver رو اجرا می‌کنید، از شما پسورد می‌پرسه:

اجرای VNC Server
اجرای VNC Server

حالا برنامه VNC Viewer رو باز کنید و یک New Connection ایجاد کنید. داخل بخش Address بنویسید: 127.0.0.1 یا localhost

تنظیمات VNC Viewer
تنظیمات VNC Viewer

در ادامه بهتون اخطار میده که ارتباطتون رمزنگاری نشده و ناامن هست (که خب، برای ارتباط localhost نه تنها مشکلی نیست، بلکه مزیته). می‌تونید گزینه Warn me every time رو هم بردارید که هربار اخطار نده.

و در ادامه، از شما پسوردی رو که ست کرده بودین رو می‌پرسه. نیاز به گفتن نیست که گزینه remember password هم یک گزینه روی میزه :)

با زدن Continue، دسکتاپ XFCE نمایان میشه! می‌تونید با دو انگشت، میزان زوم رو تغییر بدید و با swipe کردن، pointer ماوس رو جابجا کنید. بقیه gestureها هم مثل تاچ‌پد لپ‌تاپ هستند :)

دسکتاپ XFCE روی Ubuntu Bionic روی Android 9 روی گوشی OnePlus 5T
دسکتاپ XFCE روی Ubuntu Bionic روی Android 9 روی گوشی OnePlus 5T

۶- بهینه‌سازی و گزینه‌های پیشرفته:
تبریک! تا اینجا شما تونستید یک دسکتاپ کاملاً اوبونتویی رو رو گوشیتون بالا بیارید. شما می‌تونید روش اکثر برنامه‌هایی که در حالت عادی اجرا می‌کردید یا عمده تنظیماتی که تو دسکتاپتون اعمال می‌کردید رو اینجا هم اعمال کنید!
اما چند تا مورد وجود داره:
- اول اینکه: VNC Server همیشه در حال اجراست و منابع سیستم و احتمالاً باتری رو می‌خوره. آیا میشه ازش خارج شد؟
- دوم اینکه: حاشیه‌های صفحه سیاه هست. آیا میشه resolution صفحه‌ای که load می‌شه رو عوض کرد تا دسکتاپ ما کل صفحه گوشی رو پر کنه؟
- سوم اینکه: آیا میشه چند تا دسکتاپ نصب کرد و هر موقع خواستیم از یکی از این دسکتاپ‌ها استفاده کنیم؟
پاسخ به هرسه سوال بالا قطعاً بله هست!

۶-۱- خروج از VNC Server
شما باید وارد ترمینال اوبونتو بشید و دستور زیر رو وارد کنید:

vncserver -kill :0

۶-۲- تغییر Resolution:
اول از همه باید درباره رزولوشن گوشیتون اطلاع داشته باشید. گوشی من 1080x2160 هست. درواقع به نسبت 1:2. پس منطقی هست که دسکتاپ من هم تو طول و عرضش نسبت 1:2 رو رعایت کنه تا موقع زوم شدن، کل صفحه رو بگیره. (مثلاً 1600x800 چطوره؟). من حتی می‌تونم عمق رنگ رو هم تعریف کنم (که مثلاً 24 بیت باشه)
این‌بار VNC Server رو اجرا می‌کنیم، ولی با یکی دو تا option اضافه‌تر:

vncserver -geometry 1600x800 -depth 24 :0

و در نهایت، برای بستن VNC Server مثل مورد قبل، نیاز به هیچ option اضافه‌ای نیست.

۶-۳- اضافه کردن دسکتاپ و کانفیگ برای دسکتاپ‌های بیشتر:
بعد از تنظیمات VNC Server، داخل پوشه vnc./~ یک اسکریپت کانفیگ به اسم xstartuup وجود داره. اگر واردش بشید، می‌تونید تنظیم کنید که بعد از اجرای دستور vncserver، چه برنامه‌هایی اجرا بشند. دقیقاً تو آخرین خط این فایل، نوشته شده:

/etc/X11/Xsession

شما می‌تونید دسکتاپ‌های دیگه‌ای رو نصب کنید و این خط رو پاک کنید و برای دسکتاپ XFCE، بذارید: xfce4-session و برای Mate Desktop بذارید: mate-session. هر محیط دسکتاپی‌ای دستور اجرای session خودشو داره که اینجا به دو مورد اشاره شد. راه دیگه‌ش اینه که اون خط رو دست نزنید و یه فایل xsession. رو تو home directoryتون ایجاد کنید که نمایانگر دسکتاپ دلخواه شماست و اسکریپت etc/X11/Xsession/ هم از اون استفاده می‌کنه. راستش دیگه بیشتر از این با قضیه درگیر نشدم. خودتون دیگه برید سرچ کنید :)

۷- سخن آخر:
اجرای لینوکس تو محیط jail شده، محدودیت‌های خاص خودش رو داره. چیزی به اسم فایل‌سیستم proc/ براش کامل تعریف نشده و این تاثیر می‌ذاره روی دستوراتی که با لیست پروسه‌های در حال اجرا سروکار دارند. (مثل ps یا htop). بعلاوه اینکه نباید خیلی توقع داشته باشید که بتونید یه بازی با گرافیک خفن رو بتونید توش اجرا کنید. به علاوه اینکه خیلی از برنامه‌ها شاید هنوز برای معماری aarch64 توسعه داده نشده باشند، یا تو مراحل اولیه توسعه باشند. آخرش اینکه: خیلی روش حساب باز نکنید و بهش به عنوان یه ابزار کار راه بنداز نگاه کنید. به هر حال من فایرفاکس رو توش اجرا کردم… و امیدوارم بتونم اپلیکیشن‌های جاوا رو هم اجرا کنم :)
همه این‌ها به کنار، من فهمیدم که محیط دبیان برای همچین حرکتی کم‌باگ‌تر هست. بهتره سراغ اوبونتو نرید :)
به عنوان حسن ختام، آخرین اسکرین‌شات رو از پایان کار می‌ذارم:

دسکتاپ XFCE با رزولوشن 1600x800 تمام صفحه روی گوشی
دسکتاپ XFCE با رزولوشن 1600x800 تمام صفحه روی گوشی

امیدوارم لذت برده باشید.

xserverandroidtermuxlinuxsysadmin
یه دِوآپس دیگه… با تیپ شخصیتی ESTJ
شاید از این پست‌ها خوشتان بیاید