メインコンテンツへスキップ

AndroidでROMを焼かずにpostmarketOSとPhoshデスクトップを動かす(Termux proot)

·
カテゴリー スマートフォン Termuxチュートリアル
タグ PostmarketOS Termux GNOME Phosh KDE Plasma PinePhone
目次

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セッションなら実現できます。WestonCageなど、一部のコンポジターはこれに対応しており、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に対応)へ切り替えることをおすすめします。

  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チャンネルのURLは次の通り: 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-vnctermux-phoshから得ました。WayVNCで動かすのも1つの方法ですが、性能のよいTermux X11を使えるなら活用したほうがよいでしょう。

Phoshデスクトップを起動する流れは、Termux側のPulseAudio音声サーバーを起動し、Termux X11を起動し、proot Alpineへログインし、Openbox、cage、Phoshを起動する、という順番です。

全体の流れは次の通りです:

  1. 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
  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は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をインストールしました。

  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 git@git.sr.ht:~mil/sxmo-dwm
# config.def.hを修正してdwmを再ビルド・インストールする

カスタムdwmをインストールする前に、先にsxmo-dwmパッケージを削除する必要があります。または、オリジナルのdwmパッケージをインストールし、デフォルトのキーバインドを使ってもかまいません。

参考資料
#

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。