iPad is too limited, Android is too tiny. So why not combine then together?
Android + Termux Proot Debian + KasmVNC + iPadのSafariを使い、デスクトップ版ソフトを動かせるモバイル作業環境を構築します。
iPadでできないことは、Androidスマホにやらせましょう!
Termux Prootを通してAndroidスマホをPCのように使い、Linuxデスクトップソフトを実行し、それをiPadから操作します。
iPadからAndroid上のLinuxコンテナへリモート接続して操作します。iPadでできないことは、Androidスマホにやらせましょう!

タイトルの意味が分からない?私がやりたいのは、こういう利用シーンです。
1. 動機#
私の現在のモバイル作業環境はAndroidスマホとiPadの組み合わせです。別々のエコシステムではありますが、LocalSendのような自由ソフトウェアのおかげで、両者は案外うまく共存しています。Androidスマホはバッテリー容量が大きいので、iPadに6時間ほどテザリングしても電池切れにはならなさそうです。
これらはすべて、iPadでデスクトップ版ソフトを動かすためです。ソフトによってはデスクトップ版は非常によくできているのに、モバイル版に移植されると一気に貧弱になります。自由ソフトウェアでもプロプライエタリソフトウェアでも同じです。
たとえばノートアプリのJoplin。iPad版JoplinはiPhone版を拡大しただけのようなもので、機能がかなり簡素です。ノートの関係グラフなど、デスクトップ版の機能がまだ多く移植されていません。ノートを扱うときにいつも手足を縛られる感じがあり、多くの作業はPCを開かないと処理できません。そこで、どうやってデスクトップ版Joplinを動かすか考え始めました。
iPadを売ってSurfaceに乗り換える?考えたことはあります。ただ、足に合わない靴に合わせるために足を削るようなことはしたくないので、AndroidスマホのTermuxを使うことにしました。Termuxならroot不要でLinuxデスクトップ環境のコンテナを動かせますし、VNC経由でiPadからアクセスできます。
以前、ScrcpyやRustdeskでAndroidを大画面へミラーリングする方法を紹介しました。しかし、私が必要としているのはAndroid画面全体ではありません。Linuxだけで十分です。VNCサーバーをヘッドレスで動かせば、AndroidのRAMが十分ある限りバックグラウンドで簡単にはkillされません。Linuxプログラムが動いている間も、Androidスマホ自体は普通に使えます。
iPadのネットワークはAndroidから共有しているため、リモートデスクトップのローカル接続の遅延は小さいです。iPadはAndroidのLinuxコンテナ用の画面になります。
選べるなら、Androidスマホの代わりにRaspberry Piを使うべきでしょう。私は以前、Raspberry PiとiPadを組み合わせる使い方について書きました。Raspberry PiはI/Oが比較的揃っており、本体サイズも持ち運びに向いています。ただ、スマホに大容量バッテリーと強力なプロセッサがあるなら、その場で活用しない手はありません。たとえば私のSony Xperia 10 Vの性能はiPad Air 6の3分の1程度ですが、テザリングしても発熱せず、バッテリー持ちも非常に長い。なら少し酷使してLinuxを動かしてみよう、というわけです。
え、それは少し本末転倒ではないか、ですって?iPadはあれほど高性能なのに、ただのリモートデスクトップクライアントとして使い、本来担当すべき重い処理を全部Android側に押し付けるのか?仕方ありません。iOSはiSH Shellを動かすだけでも重く、仮想マシンもなかなか開放されません。だからAndroidが遅くても、動かせるものはiPadより多様で、iPadよりPCらしく使えます。Androidを酷使して電池がなくなったら、今度はiPad側からType-Cで充電すればよいのです。
2. 設定手順#
ログイン手順を簡単にするため、私はKasmVNCのWeb VNCサーバー方式を採用しました。そのためiPad側にアプリを用意する必要はなく、ブラウザだけでログインできます。
Termux Proot Debianを設定し、XFCEデスクトップをインストールする
ARM64アーキテクチャのKasmVNCパッケージをインストールする
KasmVNCサーバーを起動し、指示に従ってユーザーを追加し、XFCEを使うよう設定する
vncserver- KasmVNCサーバーを起動する
vncserverテザリングを有効にして、ネットワークをiPadへ共有する
AndroidのローカルIPを取得する
ifconfig- iPadのSafariで
https://手機區域IP:8444を入力し、アカウントでログインすれば接続できる
3. TermuxのLinuxにソフトウェアをインストールする#
大半の自由ソフトウェアにはARM64版パッケージがあるので、APTでインストールすればよいです。
Joplinについては、leaguecnがビルドしたdebパッケージを使っています。ちょうど志を同じくする人がいて、その人もAndroidでデスクトップ版Joplinを動かしていました!
ChromiumベースのソフトウェアをProot内で起動するときは、/usr/share/applications/*.desktopのExec==項目を編集し、--no-sandboxパラメータを追加しないと起動できません。Visual Studio Codeも同じです。
iPadOSのAssistiveTouchの白いボタンでタッチパッドをシミュレートできますが、それでもLinuxデスクトップを操作するならBluetoothキーボードを接続することをおすすめします。
KasmVNCではiOSの入力方式を使って中国語を入力できますが、あまり安定しません。そのため私はTermuxコンテナ内にFcitx5入力をインストールしています。
4. まだ解決していない問題#
Linuxデスクトップの音声をiPadへストリーミングできません。KasmVNCだけでは実現できません。iOSにはPulseAudioサーバーがないため、音はAndroid側のTermuxから出すしかありません。ただ、外出先でむやみに音楽を流すこともないでしょうし、イヤホンを接続すれば解決です。
VNCの描画効率がよくない問題については、KasmVNCはすでに現代的な技術向けに再設計されたサーバーです。少なくともTigerVNCより品質はよいので、あまり高望みはしないことにします。
ここで検討に値する案はあります。iPadでXサーバーを動かし、X11 Forwarding経由でLinuxコンテナの画面を投影する方法です。Termux X11の使い方に似ていますが、リモートになるだけです。ただ、App Storeで唯一のX ServerアプリであるMocha X11は高いんですよね…それに試用版で試したところ、VirGL 3Dアクセラレーションに問題がありました。


