Root権限なしで古いAndroidスマホをポケットLinuxサーバーまたはデスクトップに変える方法
ほぼ、誰もが引き出しの中で埃を被っている古いスマホを持っています。画面は無事でバッテリーはまだ数時間は保ち、中のプロセッサは8コア——でも捨てるのは忍びないですよね。こんなデバイスの運命は大概、バッテリーが膨張するまで何年も放置されること。
VNCを使ってAndroidにLinuxディストリビューションをインストールしようと試みた人は多いですが、たいていは失望に終わります。インターフェースが酷く遅延したり、適切な3Dアクセラレーションが効かなかったり、root権限で手間がかかったりと。こないだ、開発者mayukh4のlinux-androidリポジトリを見つけました。このプロジェクトは、TermuxとTermux-X11に基づくスクリプトを使って、グラフィカルデスクトップや24時間稼働のスマートホームハブとしてスマホを変身させる、効率的な解決策です。Root権限は不要。
1つのリポジトリに2つのシナリオ
著者はプロジェクトを2つの独立したブランチに分けていて、必要なら同じデバイスで同時に実行できます。
1つ目のパスはフルグラフィカルデスクトップです。スクリプトはお好みの環境(XFCE4、LXQt、MATE、またはKDE Plasma)を展開し、音声をPulseAudio経由で出力し、ハードウェアグラフィックアクセラレーションを設定します。標準でFirefoxブラウザ、VLCプレーヤー、pipパッケージマネージャ付きPython 3、OpenSSH、さらにはBox64とHangoverエミュレーションでx86 Windowsプログラムを実行できるWineが手に入ります。
2つ目のパスはホームオートメーションサーバーです。スクリプトはproot経由で軽量なUbuntuコンテナを起動し、その中でHome Assistant Coreをコンパイルします。結果は、Wi-Fi電球やスマートタップを制御するローカルスマートホームサーバーで、スマホの充電器から数ワットしか消費しません。
グラフィックスタックと3Dアクセラレーションの仕組み
電話でLinuxを動かす古いガイドの主な問題は、低速なVNCクライアントの使用でした。ここでは、描画がTermux-X11経由で直接出力されます。これはTermux環境用の高速なX11ディスプレイとして機能する別のアプリです。
著者はグラフィックスの扱いが上手です。スクリプトはAndroidシステムプロパティを通じてGPUモデルを自動検出します(スマホブランドは無視——Samsung製品でもSnapdragonとExynosの両方のチップ搭載機があるため)。
デバイスにQualcomm SnapdragonチップとAdrenoグラフィックスが搭載されている場合、システムはZink(Vulkan越しのOpenGL変換)とペアになったオープンソースのTurnip Vulkanドライバーを取得します。これにより、ネイティブに近い3Dパフォーマンスとスムーズなインターフェースが実現します。 MaliやPowerVRグラフィックス搭載のプロセッサで動作するスマホの場合、環境はSwRastソフトウェアレンダラーに切り替わります。Maliの場合、著者はLXQtやXFCEなどの軽量シェルを選択することを合理的に推奨しています。ソフトウェアレンダラーで重量級のKDE Plasmaを動かすと、明らかに遅延するからです。
すべてのグラフィックパラメータは設定ファイル~/.config/linux-gpu.shに保存されます。必要に応じて手動で編集して、Mesaフラグを調整できます——例えば、特定のOpenGLバージョンを強制したり、デバッグモードを有効にしたり。
SSHによるリモート作業
ターミナルやコード作業中に5インチのスマホ画面を見つめるのは不便なこともあります。開発者はこれを予想して、ベースパッケージにOpenSSHサーバーを含めました。
Termuxにはroot権限がないため、SSHサーバーは非標準ポート8022でリッスンします。ローカルネットワーク上のノートPCやPCから、1つのコマンドでスマホに接続できます:
ssh [email protected] -p 8022
Termuxのユーザー名は通常パターンu0_a123に従います(whoamiコマンドで確認できます)。ファイル転送は標準的なscpや使い慣れたSFTPクライアントで便利に行えます。メインPCの~/.ssh/configにホストを追加して、鍵ベースのログインを設定すれば、スマホはテストやコードビルド用のサイレントリモートサンドボックスになります。
Home Assistantの注意点
スマホをスマートホームサーバーに変えるのは魅力的ですが、著者がドキュメントで正直に警告しているAndroidの技術的制限を理解しておくことが重要です。
Home Assistant Coreはsuperuser権限なしでprootコンテナ内で実行されるため:
- mDNSとローカルネットワーク上の自動デバイス検出が動作しません。Android 10以降、システムは
/proc/net/devへのアクセスをブロックするため、スマートタップや電球(例:TP-Link Kasa)はIPアドレスでマニュアル追加する必要があります。 - スマホのBluetoothスタックにアクセスできません。
- カスタムカーネルとroot権限なしでは、外部USB ZigbeeやZ-Waveスティックの接続ができません。
- これはHome Assistant Core specificallyであり、full Home Assistant OSではありません。Dockerを必要とするコミュニティアドオンカタログのアドオンはここでは起動できませんが、built-in integrationsは正常に動作します。
TuyaやSmart Lifeなどのクラウド統合にはそのような制限はなく、開発者API経由で接続して問題なく管理できます。
インストールと起動
インストールには、Termux自体(Google Play版は長らく放置されているため、F-Droidからのビルドを厳密に取得)と、GitHubリポジトリからのTermux-X11が必要です。
メインスクリプトを実行する前に、パッケージデータベースを更新し、CPUがスリープモードに入るのを防ぐ必要があります:
termux-wake-lock
pkg upgrade -y
termux-bootコマンドは、画面が暗くなったときにOSがビルドプロセスをkillするのを防ぎます。その後、デスクトップスクリプトをクローンして実行できます:
curl -O https://raw.githubusercontent.com/mayukh4/linux-android/main/termux-linux-setup.sh
chmod +x termux-linux-setup.sh
bash termux-linux-setup.sh
プロセスの途中で、どのグラフィカルシェルをインストールするか、Wine互換レイヤーが必要かどうか尋ねられます。インストールには10〜30分かかります。
興味深い実装の詳細:スクリプトにはカスタムpkg関数があります。apt-cache show経由でパッケージメタデータを解析し、事前に関連するブロックをチェックします。システムに競合するパッケージが既に存在する場合(例えば、異なるビルドのVulkanローダー)、スクリプトはエラーでクラッシュする代わりに、問題のあるコンポーネントを慎重にスキップします。
デスクトップは以下のコマンドで起動します:
bash ~/start-linux.sh
その後、Termux-X11アプリを開くだけで、デスクトップが表示されます。
目標がHome Assistantのセットアップの場合、別のスクリプトを実行します。Ubuntu環境を作成し、Python依存関係をインストールし、必要なモジュールをビルドします。起動後、ローカルネットワーク上の任意のブラウザでアドレスhttp://<ip-телефона>:8123にサーバーのWebインターフェースが開きます。
このプロジェクトが役立つ人
Mayukh4のスクリプトは、散らばったフォーラムの手順から動作する環境を構築する必要性を排除します。依存関係の競合や、Androidのバックグラウンドマネージャーによるプロセskillといった一般的な落とし穴は、ここですべてすでに処理されています。
このプロジェクトは、以下を望む人に最適です:
- Raspberry Piを購入したり、仮想マシンを設定したりせずにLinuxやコマンドラインを実験する;
- バックグラウンドのPythonタスクや実験用のポケットサーバーを取得する;
- 古いハードウェアで低コストなホームオートメーションハブを実行する;
- スマホにBluetoothキーボードとマウスを接続して、コンパクトなモバイルワークステーションを構築する。
64ビットプロセッサと3〜4GBのRAM搭載の未使用スマホがあれば、このリポジトリはそれに第二の人生を与える絶好の機会です。
関連プロジェクト