ROM焼き不要、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機能を備え、PC版Linuxのソフトウェアを実行でき、PinePhoneの有力なシステム候補の1つにもなっています。ただしpostmarketOSはすべてのAndroidスマホに焼けるわけではありません。postmarketOSのpmbootstrapインストールチュートリアルを参照すると、ROMを作るにはLinuxカーネルへ大量のpatchを当てる必要があります。AndroidとLinuxでは共用できないドライバーが多いため、ROM制作の難度はLineageOSの移植より高いです。仮に最後まで起動できても、専有ドライバーが足りず快適に使えないことがよくあります。
さらに、postmarketOSを体験するまでのハードルはかなり高いです。多くのスマホユーザーにとってはbootloaderのアンロックすらできないため、当然ROM焼きもできません。そこでTermuxが候補になります。TermuxはrootなしでAndroid上にLinuxコンテナを実行でき、Termux X11を使ってLinuxコンテナのXサーバー画面を表示できます。最初に考えるべきなのは、pmbootstrapをTermuxで実行できるのか、という点です。このGithub issueによれば、root権限のないAndroidでchroot環境を動かすのは困難です。したがって、比較的遅いprootを使うことにします。
TermuxにはAlpine Linuxのproot rootfsが用意されており、postmarketOS自体もAlpine Linuxベースです。つまり、少し工夫してAlpine LinuxをpostmarketOSシステムへ変換すれば、スマホ向けに設計されたパッケージを取得できます。なぜAlpine Linuxをそのまま使わないのかというと、postmarketOSの一部パッケージはupstreamされておらず、依存関係が足りなくなりやすいからです。
最後にPhoshについて話します。このデスクトップ環境は自由ソフトウェア企業Purismが開発したもので、内部ではPhocというWaylandコンポジターを使用します。Phocはwlrootsベースで、Linuxスマホ向けに設計されたデスクトップです。PinePhoneコミュニティでは、Phoshは評価の高いインターフェースの1つです。私自身のPinePhone使用経験から見ると、Phoshは画面こそ簡素ですが最も安定したインターフェースで、しかも非常に省リソースです。性能がかなり低いPinePhone (Allwinner A64プロセッサ搭載) でもアニメーションは十分滑らかです。Termux X11でLinuxシステムを操作したいユーザーにとって、Phoshはとても有用だと思います。多くの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. 前提項目#
先に以下の項目を設定してください:
- Termux
- Termux X11
- virglrenderer:任意のハードウェアアクセラレーション
- Hacker’s keyboard:デスクトップ環境とやり取りするために使います。PCのキーボード入力を模擬できるので便利です。
3. proot Alpine Linuxをインストールする#
postmarketOSにはEdgeとStableの2つの更新チャンネルがあります。Stableチャンネルのバージョン番号はWikiで確認でき、現在はv24.06です。
注:執筆時点では、PhoshをCage内で正常に起動するためにEdgeチャンネルで最新パッケージを取得しました。ただし安定性を考えるなら、Stableチャンネルを使うほうがよいかもしれません。
Termux標準のAlpine LinuxリポジトリはEdgeブランチですが、このブランチは不安定です。そのためAlpine 3.20(postmarketOS v24.06に対応)へ切り替えることをおすすめします。
- Termuxを開き、proot Alpine Linuxをインストールする
pkg update
pkg install proot-distro pulseaudio
proot-distro install alpine- 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- 新しいユーザーを追加し、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- 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 addr4. Alpine LinuxをpostmarketOSへ変換する#
- postmarketOS v24.06 (Alpine v3.20) リポジトリを追加する
vim /etc/apk/repositories
# 一番上にこの行を追加する:
https://mirror.postmarketos.org/postmarketos/v24.06
# 参考までに、EdgeチャンネルのURLは次の通り: https://mirror.postmarketos.org/postmarketos/master/- postmarketos-keysをインストールする
apk add -u --allow-untrusted postmarketos-keys
apk update && apk upgrade- 以下の内容を
/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デスクトップ環境をインストールする#
- OpenboxとCageをインストールする:
sudo apk add openbox cage- 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-emoji6. Termux X11とPhoshを起動する#
prootでPhoshを起動する発想はphosh-vncとtermux-phoshから得ました。WayVNCで動かすのも1つの方法ですが、性能のよいTermux X11を使えるなら活用したほうがよいでしょう。
Phoshデスクトップを起動する流れは、Termux側のPulseAudio音声サーバーを起動し、Termux X11を起動し、proot Alpineへログインし、Openbox、cage、Phoshを起動する、という順番です。
全体の流れは次の通りです:
- Termuxを開き、PulseAudioを起動する
pulseaudio --start --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1- Termux X11を開き、TermuxからTermux X11を起動する
export DISPLAY=:0
termux-x11 :0 & - virglrendererを起動する
virgl_test_server_android &- Alpine Linuxへログインする
proot-distro login alpine --user user --shared-tmp- Openbox、cage、Phoshを起動する
export DISPLAY=:0
export XDG_RUNTIME_DIR=/tmp
openbox &
cage phoc -E '/usr/libexec/phosh' -U &Termux X11のウィンドウでOpenboxのウィンドウが出てくるのを待ち、タイトルバーをダブルクリックして最大化します。
スマホの通知欄でPreferencesをタップし、Termux X11のOutputをScaledに設定して、画面をスマホに合うサイズへ拡大します。

さらに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はPC版KDE Plasmaをベースに開発されたデスクトップで、X11またはWaylandバックエンドで起動できます。
個人的には、このデスクトップは非常に不安定なので、PC版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をインストールしました。
- SXMO関連パッケージをインストールする
sudo apk add postmarketos-ui-sxmo-de-dwm postmarketos-tweaks-sxmo-x11 feh dwm svkbd conky clickclackSXMOを起動する前にこのコマンドを実行します:
export XDG_RUNTIME_DIR=/tmp続いてSXMOを起動します:
dbus-launch --exit-with-session /usr/bin/sxmo_xinit.sh &SXMO設定ファイルは
~/.config/sxmo/にあり、イベントフックは/usr/share/sxmo/default_hooks/にあります。
画面は表示されますが、タッチジェスチャーは効きません。

SXMOのハードウェアショートカットキーは再割り当てが必要になるかもしれません。この場合、dwmのソースコードを修正します:
git clone git@git.sr.ht:~mil/sxmo-dwm
# config.def.hを修正してdwmを再ビルド・インストールするカスタムdwmをインストールする前に、先にsxmo-dwmパッケージを削除する必要があります。または、オリジナルのdwmパッケージをインストールし、デフォルトのキーバインドを使ってもかまいません。


