2022年5月21日 星期六

用 proot-distro 在 android 上跑完整的 GNU/Linux 桌面

在 android 手機或平板上執行完整的 GNU/Linux (proot-distro) 前幾篇都是在為今天的主題鋪路: 在 android 手機或平板上執行完整的 GNU/Linux, 裝置不必 root !

假設你已安裝好 termux。 在裡面執行 pkg install proot-distro 安裝 proot-distro, 再下 proot-distro list 查看有哪些發行版本的 GNU/linux 可以安裝。 例如我選擇 debian: proot-distro install debian 安裝好就可以用 proot-distro login debian 進入 (近乎) 完整的 debian 命令列環境。

Proot 是一個 user space 版本的 chroot, 所以不需要 android 系統的 root 權限, 但是在自己的小環境裡面看起來又像是擁有 root 的身份。 而 proot-distro 則是從 proot 長出來的各種 distribution。 它透過 ptrace() 攔截系統呼叫、 修改輸入參數與傳回值, 來達到假扮 root 的目的。 當然, 它的權限只跟 termux 一樣多而已。

從外面的 termux 環境看, 它長在這裡: $PREFIX/var/lib/proot-distro/installed-rootfs/debian/ ( 出處) 從 proot-distro 裡面向外看, 也可以看得到 android 系統的常用資料目錄: /sdcard/ 以及 termux 環境的根目錄: /data/data/com.termux/files/

接下來的事就跟平常在 GNU/linux 底下一樣很簡單了: 安裝我自己喜歡用的套件: apt install bash-completion vim wget lynx、 安裝 xfce4 (含 X Window 系統)、 vnc server、 聲音相關套件: apt install xfce4 tightvncserver dbus-x11 pulseaudio。 我的 ~/.vnc/xstartup 長這樣 (從 這裡 改來的):

#!/bin/sh
export XKL_XMODMAP_DISABLE=1
sakura &
exec /etc/X11/Xsession

啟動 vnc server: vncserver -geometry 1440x800 :61 然後回到 android、 打開 avnc 登登! 看到 X Windows 在未 root 的平板上開起來, 好感動啊!

如果需要聲音的話, 先切到 termux 這個 app、 從螢幕左側向右滑、 點 "New Session" 另開一個分頁 (重點就是不要在 proot-distro 裡面)、 下兩個指令:

pulseaudio --start --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp

再把 termux 裡面的 ~/.config/pulse/cookie 複製到 proot-distro 裡面的相同位置: cp ~/.config/pulse/cookie $PREFIX/var/lib/proot-distro/installed-rootfs/debian/root/.config/pulse/cookie 切回 proot-distro 分頁或 avnc 的終端機視窗並且 echo $PULSE_SERVER 確認它的值是 127.0.0.1 (系統已預先設定好), 然後就可以播音樂了。

從 proot-distro 裡面把 termux 的 ~/.config/pulse/cookie 拷貝過來 右圖顯示的是同樣的複製動作, 但採取 proot-disro 的視角。 原先它的 cookie 與 termux 的不同, 後來把 termux 的 ~/.config/pulse/cookie 拷貝過來, 聲音就通了。

我又安裝&試用 inkscape, 感覺速度比 avnc 客戶端連到桌機 X server 慢很多, 不太實用。 看 youtube 則是 lag 到完全無法用。 高手 自行編譯硬體加速 把它變得很順暢; 另有 其他疑難雜症解方; 不過我就先不跟進了。 光是看到完整的 linux 桌面就已經很滿足了~

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。