Dual-boot (kind of) Linux and Android on a tablet.
Surface Go 2タブレットでLinux + Androidデュアルシステムタブレットを動かす操作方法を見つけた気がします。完璧ではありませんが、少なくとも使えます。
以前にWaydroid only session用法を書きましたが、これはその改良版です。
1. 想定する効果#
Linuxでは、1つのシステムに複数のデスクトップ環境をインストールできます。GNOMEはノートPCやタブレットに向いた重量級デスクトップで、Phoshはスマホやタブレットに向いた軽量デスクトップです。WaydroidはLXCコンテナ経由でLinux上にAndroid APPを動かす技術で、仮想マシンではないため、リソース消費は低めです。これらを組み合わせると、以下のような効果があります。
GNOME + Phosh + Waydroidを使うと、1つのシステム上でLinux + Androidデュアルシステム(偽)を混在させる体験を実現できます。しかも、本当に別パーティションへインストールしてデュアルブートを組む必要はありません。これなら手元のSurface Go 2をそれなりに使い倒せます。
簡単に言うと、キーボードとマウスで操作するPCモードが必要なときはGNOMEデスクトップに入ります。
純タッチ操作モードでAndroid電子書籍APPを動かしたいときはPhoshデスクトップに入り、Waydroidを起動してAndroidデスクトップへ入ります。
Phoshのインターフェイス要素が画面を占める割合はとても小さいため、WaydroidのAndroid APPをほぼ全画面で実行できます。
以上の操作は、GDM画面から切り替えます。再起動も不要ですし、1つのディスクにデュアルシステムをインストールする必要もなく、GRUBブートの問題に悩まされることもありません。
Pine64 PinePhoneやPurism Librem 5のユーザーも、たぶんこういう運用をしているのではないでしょうか。
なぜGNOMEでそのままWaydroidを開かないのか?GNOMEはリソースを食いすぎるからです。特にSurface Go 2では、RAMの半分くらいがデスクトップに食われてしまい、残りでAndroidを動かすにはきついです。PhoshのWaylandコンポジターはリソース消費が非常に低く(512MB RAM未満)、UIが画面を占める割合も低く、1つのプログラムを1つの最大化ウィンドウで扱います。さらにWaydroidのウィンドウキャンバスサイズは現在の画面の利用可能ピクセルに基づいて決まるため、PhoshというデスクトップはWaydroidを全画面で動かすのにかなり向いています。Linuxタブレットを一時的にAndroidタブレット化しても、デスクトップ環境に邪魔されにくいわけです。
必要なときにGDMでPhoshへ切り替えれば十分です。しかもWaydroidの通知は、今ではPhoshやGNOMEと同期されます。もちろん、よりミニマルなWaylandコンポジターとしてSwayなどもありますが、dotfileを自分で調整するのが面倒です。Phoshなら既製の使える構成があります。
もちろん、PhoshはAndroid APPを動かすためだけのものではありません。タッチスクリーン向けに設計されたLinuxプログラムを動かす用途にも使えます。
2. テスト環境#
- Microsoft Surface Go 2 (Intel Pentium 4425y / 4G / 64G)
- Debian Linux 13
- GNOME 48
- Phosh 0.46
- Waydroid Android 13
3. Linux側の設定#
DebianでGNOMEデスクトップをインストールします
ディスプレイマネージャーがGDMであることを確認します
sudo systemctl status display-manager- Phoshデスクトップをインストールします
sudo apt install phosh phosh-mobile-settings- Phoshのbugのため、PhoshからGNOMEへ切り替えたときにウィンドウボタンが消えるのを防ぐには、
~/.profileに以下を追加する必要があるかもしれません
if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then
gsettings set "org.gnome.desktop.wm.preferences" button-layout "appmenu:minimize,maximize,close"
fi再起動し、GDMのログイン画面でパスワードを入力すると、右下にGNOMEまたはPhoshへログインするボタンが表示されます。
Phoshへログインし、画面上部から下へスワイプしてステータスバーを確認し、デバイスの自動回転(通常は
iio-sensor-proxyで制御)が正常に動作するか確認します。
PhoshのステータスバーでDockedモードをオフにします。そうしないと、画面下部のピルバーを長押ししてオンスクリーンキーボードを呼び出せません。
Phosh Mobile Settingsを開き、PhoshのステータスバーメニューからLinuxをスリープモード(suspend)に入れられるよう許可します。また、ここでステータスバーにCaffeineボタンを表示する設定も有効化できます。これによりLinuxが自動でスリープに入らなくなります(Waydroidの画面オンオフは効きません)

4. Waydroid側の設定#
DebianでWaydroidをインストールします
ジェスチャーの衝突を気にしないなら、Androidのシステム設定でジェスチャーナビゲーションに変更します。
AndroidにクローズドソースのRotation Controlをインストールします。これは画面の向きを強制的に回転できます
Sound Quick Settings をインストールし、Androidのクイック設定メニューに音量キーを追加します。Waydroidでは物理キーで音量を調整できないためです
その後、PhoshデスクトップでWaydroidを起動する前に、まずデバイスを縦向きにします。横向きモードだと、WaydroidのウィンドウがPhoshによって細長い形に切られてしまうためです。
画面を縦向きに回転した後、Phoshのステータスバーを下ろして自動回転をオフにします。WaydroidはPhoshの画面自動回転に追従しないので、画面が回転するとWaydroidの表示が切れてしまいます。その後でWaydroidを起動します。
画面と音量以外の大半の操作は、Waydroidのウィンドウ内で完結します。
Waydroidのメインウィンドウはいつでも閉じられます。AndroidプログラムはLinuxのバックグラウンドで実行され続けます。
ほとんどの場合、WaydroidのAndroidプログラムはLinuxシステムと一緒にsuspendするはずです(Phoshのステータスバー画面からスリープを選択)。画面を再度起こした後にPhoshのロック画面が表示されるはずで、そうでなければスリープしていません。まれに、WaydroidがRAMとSWAPを食いすぎてLinuxが復帰できなくなることがあります。ただ、私は別途zSWAPを有効化しているので、そこまで早くメモリを使い切ることはないはずです。

Waydroidが原因でLinuxをsuspendできない場合は、以下を試します:
waydroid prop set waydroid.suspend false
waydroid prop set waydroid.no_suspend true
sudo systemctl restart waydroid-containerなお、通常はPhoshから現在のセッションをログアウトしてGDMに戻ると、Waydroidも一緒に終了します。そのためGNOMEとWaydroidを同時に実行したいなら、やはりGNOMEで直接Waydroidを起動したほうがよいです。
Waydroidサービスを何度も再起動すると、Linuxシステム全体が固まり、強制再起動が必要になることがあります。なので、特に用がなければWaydroidはバックグラウンドで動かしたままにしておけばいいです。


