モチベーション
Arch Linuxで本が読みたくなったから.Arch LinuxでKindleを使う方法は主に2つあるらしい.
- Wine: Windowsプログラムをネイティブ動作できる
- Waydroid: コンテナ化されたAndroidの環境を実行する
どちらでも良かったが,普段から利用しているモバイル版のKindleを使えた方がなんとなく嬉しいので「Waydroid」を採用することにした.
環境
OS: Arch Linux x86_64
カーネル: 6.18.1-arch1-2
DE: cosmic (Wayland)
CPU: i5-12600H
GPU: Intel Iris Xe Graphics
Waydroidの導入
詳しくは,Arch Wiki/Waydroidを参照してください.ただ,使用するカーネルのバージョンによって,Arch Wikiでは不足するところもあるので気をつけてください.
1. CPUとGPUの確認
必要なCPUアーキテクチャの要件はAndroid ABIから確認できます.
GPUについては,Intel GPUならそのまま使用できるそうです.AMD GPUもサポートされているらしいです.NVIDIA GPUアーキテクチャを使用されている方はArch Wikiを参照してください.
2. ウィンドウマネージャーの確認
WaydroidはWaylandでのみ動作するらしい.
Arch Wikiには以下のようにも書いてあります.詳しいことはわからないので,X11を使っている方は各自で調べてもらえると良いと思います(Waylandに移行しようぜ).
X11 を使用している場合でも、多くの Wayland セッション マネージャーはネストされたセッションをサポートしていることに注意してください (そのため、X11 セッション内で実行できます)。最も単純な例は cage です。
3. カーネルモジュールの確認
↪ uname -r
6.18.1-arch1-2
Linux標準カーネルなので,binderモジュールが付属しているカーネルを準備する必要があります.BinderはAndroidがプロセス間通信に使う仕組みらしいです.
今回は,Linux-Zenを使用します.
↪ sudo pacman -S linux-zen linux-zen-headers
ブートローダ(GRUB)の更新
↪ sudo grub-mkconfig -o /boot/grub/grub.cfg
カーネルの確認
↪ reboot
↪ uname -r
6.18.1-zen1-2-zen
4. Binderモジュールが有効か確認
↪ lsmod | grep binder
binderカーネルモジュールがロードされておらず,実行した結果何も表示されません.
カーネルの設定を確認しましょう.
↪ zcat /proc/config.gz | grep BINDER
# CONFIG_ANDROID_BINDER_IPC is not set
CONFIG_ANDROID_BINDER_IPC_RUST=y
CONFIG_ANDROID_BINDER_DEVICES=""
Rust版のBinderが有効になっているが,デバイスが設定されていないようです.
Binderデバイスを設定する必要がありますが,Arch Wikiを参照するとCONFIG_ANDROID_BINDER_DEVICESでBinderデバイスを管理するのはいくつか問題がありそうなのでbinderfsというBinderデバイスの管理方法が推奨されています.
5. binderfsのマウント
binderfsを用いたbinderfs専用のファイルシステムをマウントします.
↪ sudo mkdir -p /dev/binderfs
↪ sudo mount -t binder binder /dev/binderfs
↪ ls -la /dev/binderfs/
binder-controlが作成されていることを確認します.
6. Waydroidのインストール
↪ yay -S waydroid
Waydroidのインストール後に,再起動後も自動的にbinderfsがマウントされるようにします.
↪ sudo mkdir -p /etc/systemd/system/waydroid-container.service.d/
↪ sudo tee /etc/systemd/system/waydroid-container.service.d/override.conf << EOF
[Service]
ExecStartPre=/bin/sh -c 'mkdir -p /dev/binderfs && mount -t binder binder /dev/binderfs || true'
EOF
↪ sudo systemctl daemon-reload
7. Waydroidサービスの有効化と初期化
↪ sudo systemctl enable --now waydroid-container.service
↪ sudo waydroid init
8. Waydroidセッションの起動
↪ waydroid session start
別ターミナルでUIを表示
↪ waydroid show-full-ui
こんな感じの画面が出ると思います(※Kindleをインストール後に撮影したものです).

9. Google Play Storeのインストール
Google Play Storeをインストールするスクリプトがコミュニティにあるので利用します.
↪ git clone https://github.com/casualsnek/waydroid_script
↪ cd waydroid_script
↪ python3 -m venv venv
↪ venv/bin/pip install -r requirements.txt
↪ sudo venv/bin/python3 main.py
- Android 13を選択
- Installを選択
- gappsとlibhoudiniをインストール
10. Google Device IDの登録
Google Play Storeの利用にはGoogle Play Protectにデバイスを登録する必要があります.
登録に必要なIDの参照も最期ほどのスクリプトを利用します.
↪ cd waydroid_script
↪ sudo venv/bin/python3 main.py
- Android 13を選択
- Get Google Device ID to Get Certifiedを選択
- 表示されたIDをhttps://google.com/android/uncertified/?pli=1 で登録
- 数分~24時間待機(私は数分で完了しました)
11. Waydroidの再起動
↪ waydroid session stop
↪ sudo systemctl restart waydroid-container.service
↪ waydroid session start
別ターミナルで実行
↪ waydroid show-full-ui
12. Kindleのインストール
Play Storeを開き,アカウントの登録/ログインをします.
登録後,Kindleを検索してインストールします.
13. Kindleの起動
インストール後,Waydroidのホーム画面にKindleが追加されています.
waydroid show-full-uiを使用しなくても,以下のコマンドで起動することもできます(もちろんwaydroidのセッションの起動は必要です).
↪ waydroid app launch com.amazon.kindle
オプション設定
画面サイズの変更
↪ waydroid prop set persist.waydroid.width 800
↪ waydroid prop set persist.waydroid.height 1280
↪ waydroid session stop
↪ waydroid session start
Fish shellでのエイリアス設定
私はfishを使っているので,以下のような設定を作成してkindleコマンドでKindleを起動できるようにしています.bashやzshでも再現できます.
~/.config/fish/config.fishに追加:
function kindle
if not waydroid status &> /dev/null
waydroid session start &
sleep 3
end
waydroid app launch com.amazon.kindle
end