快轉到主要內容

Android免刷機跑postmarketOS與Phosh桌面(Termux proot)

分類   智慧型手機 Termux教學
標籤   PostmarketOS Termux GNOME KDE Plasma PinePhone
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Read this post in English

免刷機,免Root,在Android上跑postmarketOS系統,以及專為Linux手機設計的Phosh桌面。

我採取非官方認可的縫合怪做法,透過Termux Proot跑postmarketOS系統,讓我們可以體會一把手機上的Linux系統長怎樣。

影片演示。Phosh + postmarketOS執行於Sony Xperia 10 V Android 14。

1. 動機
#

為什麼要這麼做呢?探索在Android手機體驗Linux系統的可能性,所以我們需要專為觸控螢幕設計的桌面環境。

這是我個人的悲願,想在Sony Xperia 5 & 10系列手機跑行動Linux系統,奈何沒有太多人移植,我自己也沒成功。所以就用Termux過過癮,將這個實驗性質濃厚的作法與大家分享。

postmarketOS為對一款針對過季手機設計的GNU/Linux系統,基於Alpine Linux開發,它具有完整的Linux功能,能夠執行電腦版Linux的軟體,也成為PinePhone的熱門系統人選之一。但是postmarketOS不是所有Android手機都能刷的,參考 postmarketOS的pmbootstrap安裝教學,製作ROM需要給Linux核心打很多patch,由於Android與Linux很多驅動不通用,製作ROM的難度比移植LineageOS還高。即使最後跑起來了,還很容易缺一堆專有驅動致使用起來不愉快。

還有,體驗postmarketOS的門檻很高,對許多手機用戶而言他們連bootloader都無法解鎖,自然不可能刷機了。由此,Termux便成為一個可以考慮的方案,它能夠免root在Android執行Linux容器,並用Termux X11顯示Linux容器X伺服器的畫面。那我們首先要問,pmbootstrap能否在Termux執行?根據 這個Github issue,chroot環境是難以在沒有root權限的Android跑起來的。因此改用較為緩慢的proot吧。

Termux有提供Alpine Linux的proot rootfs,而postmarketOS本來就是基於Alpine Linux開發,所以施點小手段將Alpine Linux轉成postmarketOS系統,就能夠取得那些專為手機設計的套件了。為什麼不直接用Alpine Linux?因為postmarketOS有些套件沒有upstream,容易導致依賴缺東缺西的。

最後來談 Phosh,這個桌面環境是自由軟體公司Purism開發,背後使用名為Phoc的Wayland合成器,基於wlroots寫成,專為Linux手機設計的桌面。在PinePhone社群中,Phosh是評價最好的一個界面了。再根據我個人的PinePhone使用經驗,我覺得Phosh雖然界面很簡陋,但卻是最穩定的一個界面,而且Phosh非常省資源,在性能超爛的PinePhone (搭載Allwinner A64處理器) 動畫依然十分流暢。我認為,Phosh對想要在Termux X11與Linux系統互動的用戶非常有用,大部分Android手機都沒有鍵盤滑鼠,所以在Termux X11跑XFCE、KDE Plasma、GNOME之類的傳統Linux桌面用起來就會很尷尬,而針對觸控手勢特別優化過的Phosh便是一個極佳選擇。

但是,你可能會問說,Phosh是Wayland合成器,要怎麼在Termux X11跑起來?雖然我們無法直接使用Wayland,但是X11下的巢狀Wayland工作階段還是辦得到,有些合成器能做到這點,例如 Weston或者 Cage,即使在X環境下依然能夠使用Wayland的部份功能。不過單純跑cage會導致不出現不完整的X工作階段,沒辦法偵測到手機的解析度。所以在跑cage之前,我還會啟動一個X視窗管理器,為節省性能,選擇Openbox。

2. 前置項目
#

請先設定以下項目:

3. 安裝proot Alpine Linux
#

postmarketOS提供Edge與Stable二個更新頻道,Stable頻道版本號到 Wiki查詢,目前是v24.06。

Termux預設的Alpine Linux套件庫是Edge分支,但是此分支不穩定,所以建議將其切換為Alpine 3.20(對應postmarketOS v24.06)

  1. 開啟Termux 安裝proot Alpine Linux
pkg update

pkg install proot-distro pulseaudio

proot-distro install alpine
  1. 將Alpine Linux的套件庫從Edge切換為v3.20
proot-distro login alpine --shared-tmp

apk update

apk add vim

vim /etc/apk/repositories

# 將"http://dl-cdn.alpinelinux.org/alpine/edge/main"修改為"http://dl-cdn.alpinelinux.org/alpine/v3.20/main"
# 將"http://dl-cdn.alpinelinux.org/alpine/edge/community"修改為"http://dl-cdn.alpinelinux.org/alpine/v3.20/community"

apk update

apk upgrade
  1. 新增一個使用者,加入sudo群組,設定時區
apk add sudo

addgroup storage

adduser -g wheel,storage,video,audio user

visudo

passwd

sudo ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime

sudo setup-timezone
  1. 在Termux proot啟用SSH遠端連線。
sudo vim /etc/ssh/sshd_config

# 將`Port`從22改為8023

ssh-keygen -A

rc-update add sshd

rc-serive sshd start

# 檢查IP位址。
ip addr

4. 將Alpine Linux轉換為postmarketOS
#

  1. 加入postmarketOS v24.06 (Alpine v3.20) 套件庫
vim /etc/apk/repositories

# 在最上面新增這行:
https://mirror.postmarketos.org/postmarketos/v24.06

# 僅供參考,Edge頻道的網址為: https://mirror.postmarketos.org/postmarketos/master/
  1. 安裝postmarketos-keys
apk add -u --allow-untrusted postmarketos-keys

apk update && apk upgrade
  1. 將以下內容加入至/etc/os-release
PRETTY_NAME="postmarketOS v24.06"
NAME="postmarketOS"
VERSION_ID="v24.06"
VERSION="v24.06"
ID="postmarketos"
ID_LIKE="alpine"
HOME_URL="https://www.postmarketos.org/"
SUPPORT_URL="https://gitlab.com/postmarketOS"
BUG_REPORT_URL="https://gitlab.com/postmarketOS/pmaports/issues"
LOGO="postmarketos-logo"

5. 安裝Phosh桌面環境
#

  1. 安裝Openbox與Cage:
sudo apk add openbox cage
  1. Phosh套件名稱是postmarketos-ui-phosh,推薦一併安裝postmarektOS設計的一些行動裝置套件:
sudo apk add postmarketos-ui-phosh \
postmarketos-tweaks \
firefox \
mobile-config-firefox \
font-noto \
font-noto-cjk \
font-noto-cjk-extra \
font-noto-emoji

6. 啟動Termux X11和Phosh
#

在proot啟動Phosh的靈感來自於 phosh-vnc termux-phosh,雖然用WayVNC跑是一種方式,但有效能更好的Termux X11何不善加利用呢?

啟動Phosh桌面的過程為:啟動Termux端的PulseAudio音訊伺服器,啟動Termux X11,再登入proot Alpine,啟動Openbox與cage與Phosh。

整個過程如下:

  1. 開啟Termux,啟動PulseAudio
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1

pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
  1. 開啟Termux X11,再從Termux啟動Termux X11
export DISPLAY=:0

termux-x11 :0 & 
  1. 啟動virglrenderer
virgl_test_server_android &
  1. 登入Alpine Linux
proot-distro login alpine --user user --shared-tmp
  1. 啟動Openbox與cage與Phosh
export DISPLAY=:0

export XDG_RUNTIME_DIR=/tmp

openbox &

cage phoc -E '/usr/libexec/phosh' -U &
  1. 在Termux X11的視窗等Openbox的視窗跑出來,點兩下標題欄放到最大。

  2. 在手機通知欄點選Preferences,將Termux X11的Output設定為Scaled,放大畫面到適合你手機的尺寸。

  3. 並將Termux X11的Pointer改為Direct Touch,模擬觸控螢幕。

7. Phosh的使用體驗
#

大部分觸控手勢都能用,Phosh的操作邏輯就是從底部上滑檢視所有工作,將APP視窗上滑關閉。

注意proot裡面的Phosh不是完整Linux系統環境,因此部份功能無法使用。

例如Phosh使用GNOME Control Center調整系統設定,但是圖形化界面開不起來,所以很多地方得變成要用指令改,要修改檔案管理器Portfolio開啟特定檔案格式預設的APP,你應該使用xdg-mime修改。還有GNOME Software無法使用,請使用apk指令安裝軟體。


若要使用輸入法打字:Phosh內建的Squeekboard僅支援英文,長按Phosh底部的長條喚醒(似乎proot環境叫不出來)。打中文你得使用Android手機的鍵盤,在Termux X11的畫面按下返回鍵就能叫出手機鍵盤。然後在Termux X11底部的工具列往左滑,就能夠輸入中文。

8. 試試其他桌面環境?
#

除了Phosh外,postmarketOS的桌面環境還有Plasma Mobile和SXMO,但我覺得他們問題更多就是了,一個不穩定,一個太複雜。

Plasma Mobile

Plasma Mobile是基於電腦版KDE Plasma開發的桌面,可以使用X11或者Wayland後端啟動。

個人覺得這個桌面非常不穩定,不如用電腦版KDE。

套件名稱:postmarketos-ui-plasma-mobile。X11啟動指令:startplasma-x11,Wayland版啟動指令:startplasma-wayland

X11版可以用這個指令啟動:dbus-launch --exit-with-session startplasma-x11 &

SXMO

SXMO號稱手機版的Sway,套件名稱為postmarketos-ui-sxmo,但是Termux X11僅支援X,所以我改裝postmarketos-ui-sxmo-de-dwm

  1. 安裝SXMO相關套件
sudo apk add postmarketos-ui-sxmo-de-dwm postmarketos-tweaks-sxmo-x11 feh dwm svkbd conky clickclack
  1. 在啟動SXMO前執行此指令:export XDG_RUNTIME_DIR=/tmp

  2. 接著啟動SXMO:dbus-launch --exit-with-session /usr/bin/sxmo_xinit.sh &

  3. SXMO設定檔位於~/.config/sxmo/,事件鉤子位於/usr/share/sxmo/default_hooks/

雖然有畫面,但是觸控手勢無效。

SXMO硬體快捷鍵可能得重新綁定,此時需要修改dwm的原始碼:

git clone [email protected]:~mil/sxmo-dwm
# 修改config.def.h並重新編譯安裝dwm

在安裝自訂dwm前需先刪除sxmo-dwm套件,或者您可以安裝原版dwm套件並使用預設按鍵綁定。

參考資料
#

相關文章

淺談Termux檔案管理,將Linux環境的檔案與Android共享
分類   智慧型手機 Termux教學
標籤   Termux
Android裝Ubuntu,Termux以QEMU模擬執行x86_64架構的Linux虛擬機
分類   智慧型手機 Termux教學
標籤   Termux QEMU Docker Podman
Android手機玩Steam上的Windows遊戲 ~ Mobox模擬器使用教學
分類   智慧型手機 Termux教學
標籤   Steam Termux Android

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。