Linux環境でKindleを使いたい!(その2)Waydroid on Xubuntu 22.04 挑戦記と、ちょっぴり残念な結末

みなさん、こんにちは。

以前のブログで、Xubuntu 22.04 のVirtualBoxにAndroid-x86を導入してKindleアプリを動作させるという記事を書きました。

 

残念ながらKindleを動作させることはできなかったのですが、当時のブログでは試していない環境がありました。WaydroidでKindleを動作させることです。今回、Wayland化したXubuntu 22.04にWaydroidを導入し、Kindleアプリの動作を試みましたので、その顛末を共有したいと思います。

結論から先に言うと、今回も残念ながら失敗してしまったのですが、Androidアプリの動作環境としてはWaydroidは軽くて優秀でしたので、同じような挑戦を考えている方の参考になればと考え、記事にしてみました。

 


 

目標はLinuxでKindleを読むこと

 

私は普段、Xubuntu 22.04をメインのOSとして使用しています。Linux環境は開発作業には非常に快適なのですが、こと電子書籍、特にKindleを読むとなると、公式のデスクトップアプリが存在しないため、VirtualBoxでWindowsを立ち上げてKindle for PCを利用するしかありませんでした。しかし、KindleのためにわざわざWindowsを立ち上げるのは使い勝手が悪すぎます。

Linux上でKindleアプリを使う際に一番使い勝手がよい方法はAndroidアプリをシームレスに動作させることです。そのためのコンテナ技術がWaydroidです。Xubuntu 22.04 のデスクトップ環境である Xfce4は残念ながらWaydroidが導入できませんので、デスクトップ環境から整えることになりました。

 


 

Waylandセッションの準備とWaydroidの導入

 

Waydroidはその名の通り、Waylandディスプレイサーバープロトコル上で動作することが前提となっています。私のXubuntu環境はデフォルトではX11セッションですが、Waylandセッションも利用可能です。

Wayland化については以下に記事を書きましたのでご参考ください。

 

1. Waylandセッションの選択:Enlightenmentを試す

Waylandセッションとしては、Xfce4と同等以下の軽さを期待して、まずはEnlightenmentデスクトップ環境を試すことにしました。ログインマネージャーからEnlightenmentセッションを選択し、起動します。

2. 必要なアプリのインストール

まずはターミナルを開き、Waydroidの導入に必要なパッケージをインストールします。

sudo apt update
sudo apt install curl ca-certificates

curlはインターネット経由でファイルをダウンロードするためのコマンドラインツール、ca-certificatesはSSL/TLS通信に必要な認証局証明書です。

3. Waydroidセットアップスクリプトのダウンロードと実行

次に、Waydroidの公式リポジトリをシステムに追加し、Waydroidをインストールするための準備を行います。

curl -s https://repo.waydro.id | sudo bash

このコマンドは、Waydroidの公式リポジトリ情報を取得し、システムのパッケージソースリストに追加します。

4. Waydroidのインストール

リポジトリの準備が整ったので、aptコマンドでWaydroid本体をインストールします。

sudo apt install waydroid

依存関係のあるパッケージも同時にインストールされます。

5. Waydroidサービスの起動確認

Waydroidはシステムサービスとして動作するコンテナを持っています。インストール後、このサービスが正常に起動しているか確認します。

systemctl status waydroid-container.service

実行結果に active(running) と表示されていれば、Waydroidコンテナサービスは正常に動作しています。もしそうでなければ、sudo systemctl start waydroid-container.service で起動を試みてください。

 


 

WaydroidのARMアプリ対応 – libhoudiniの導入

 

多くのAndroidアプリはARMアーキテクチャ向けにビルドされています。一方、私のPCはx86_64アーキテクチャです。そのため、x86_64環境でARMアプリを動作させるための互換レイヤーが必要になります。Intelが開発したlibhoudiniというライブラリがこの役割を果たしてくれます。

1. KindleインストールのためGoogle Play Store対応イメージを導入

Waydroidは標準でAndroid Open Source Project (AOSP) ベースのシステムイメージを使用しますが、Kindleアプリを簡単にインストールするためにはGoogle Play Storeが利用できるイメージが必要です。-s GAPPS オプションを付けて初期化することで、Googleアプリが含まれたイメージを導入できます。

sudo waydroid init -s GAPPS -f

-fオプションは、既存のイメージがあっても強制的に上書きします。これにより、Google Play Storeを含むAndroid環境が構築されます。

2. ChromeOSのセットアップイメージからlibhoudiniを抽出

libhoudiniはプロプライエタリなライブラリであり、直接配布されていません。そのため、ChromeOSのリカバリイメージなどから抽出する必要があります。幸い、この作業を簡単にしてくれるツールが公開されています。

まず、libhoudiniを含むリポジトリをクローンします。

git clone https://github.com/BlissRoms-x86/android_vendor_google_chromeos-x86.git

次に、クローンしたディレクトリに移動し、抽出スクリプトを実行します。

cd android_vendor_google_chromeos-x86/
bash ./extract-files.sh

これにより、カレントディレクトリ以下に proprietary/houdini というディレクトリが作成され、その中に libhoudini.so などの必要なファイルが格納されます。

3. システムイメージの拡張とlibhoudiniのコピー

ダウンロードしたシステムイメージは、libhoudiniを追加するには容量が不足している場合があります。そのため、イメージファイルを拡張します。

まず、ファイルシステムをチェックします。

sudo e2fsck -f /var/lib/waydroid/images/system.img

次に、イメージサイズを2300MBに拡張します。このサイズは環境によって調整が必要かもしれません。

sudo resize2fs /var/lib/waydroid/images/system.img 2300M

拡張したイメージをマウントし、先ほど抽出したlibhoudini関連のファイルをコピーします。

mkdir /tmp/waydroid
sudo mount -o rw /var/lib/waydroid/images/system.img /tmp/waydroid
sudo cp -r ./proprietary/houdini/* /tmp/waydroid/

注意: cpコマンドを実行するカレントディレクトリは、extract-files.sh を実行した android_vendor_google_chromeos-x86 ディレクトリである必要があります。

4. build.propの書き換え

libhoudiniをシステムに認識させるために、Androidシステムのプロパティファイルである build.prop を編集します。

sudo vi /tmp/waydroid/system/build.prop

以下の項目を変更または追加します。

変更する箇所:

ro.product.cpu.abi=x86_64
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a

新たに追加:

ro.dalvik.vm.isa.arm=x86
ro.dalvik.vm.isa.arm64=x86_64
ro.enable.native.bridge.exec=1
ro.dalvik.vm.native.bridge=libhoudini.so

これらの設定により、AndroidシステムはARMアーキテクチャのアプリケーションをlibhoudiniを通じてx86アーキテクチャ上で実行できるようになります。

編集が終わったら、ファイルを保存してエディタを終了します。

5. システムイメージのアンマウント

変更を反映させるため、システムイメージをアンマウントします。

sudo umount /tmp/waydroid

これでlibhoudiniの導入作業は完了です。

 


 

トラブル発生 – Enlightenmentの不安定さとGnomeへの移行

 

意気揚々とWaydroidのフルUIを起動しようとしました。

waydroid show-full-ui

しかし、ここで問題が発生しました。Waylandセッションとして使用していたEnlightenmentが非常に不安定で、Waydroidが起動後しばらくすると落ちてしまう現象が頻発したのです。それだけでなく、Enlightenment自体の挙動も時折怪しくなることがあります。いろいろ試してはみたのですが、現時点ではEnlightenmentのWayland対応はまだ完全ではないのかもしれない、という結論に至りました。

このままでは検証が進まないため、Enlightenmentの使用を諦め、よりWayland対応が進んでいるとされるGnomeセッションに切り替えることにしました。一度ログアウトし、ログインマネージャーからGnomeセッションを選択して再度ログインします。

Gnomeセッションで改めて waydroid show-full-ui を実行すると、今度はWaydroidが比較的安定して起動するようになりました。デスクトップ環境の選択は、Waydroidの安定性に大きく影響するようです。

 


 

Google Play Certificationの取得

 

Gnome環境でWaydroidを起動すると、画面上部に「このデバイスはPlayプロテクト認定を受けていません」といった趣旨の通知が表示されます。これは、Google Play Storeを正常に利用するために必要なデバイス認証が得られていないことを意味します。

この問題を解決するため、以下の手順でデバイスを登録します。

  1. WaydroidのフルUIが表示されている状態で、ホストOS側で新たにターミナルを開きます。
  2. Waydroidのシェルに入ります。
    sudo waydroid shell
  3. シェル内で以下のコマンドを実行し、Android IDを取得します。

    :/ # ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"

    すると、以下のような形式でAndroid IDが表示されます。

    android_id|************************************

    この ************************************ の部分が、お使いのWaydroidインスタンスのAndroid IDです。この値をコピーしておきます。
  4. ウェブブラウザでGoogleデバイス登録ページを開きます。
  5. 先ほど取得したAndroid IDをページの入力欄に貼り付け、「登録」ボタンをクリックします。

登録が完了したら、Waydroidのウィンドウ、ターミナルを一旦すべて終了させます。Google側のサーバーに情報が反映されるまで数分程度待ってから、再度 waydroid show-full-ui を実行してWaydroidを起動します。

今度は「認定を受けていません」という通知は表示されず、デバイスが正常に登録されたことが確認できました。これでGoogle Play Storeを問題なく利用できるはずです。

GooglePlayを使えるようになったWaydroid
GooglePlayを使えるようになったWaydroid

 


 

Google Play StoreからのKindleインストール

 

いよいよKindleアプリのインストールです。

  1. Waydroidのアプリ一覧から「Play ストア」アイコンをクリックします。
  2. Googleアカウントへのログインを求められるので、画面の指示に従ってログインします。
  3. ログイン後、Play ストアの検索バーで「Kindle」と入力し、Kindleアプリを検索してインストールします。
Kindleアプリを検索
Kindleアプリを検索

インストール自体は特に問題なく、スムーズに完了しました。

Kindleアプリのインストール成功!
Kindleアプリのインストール成功!

 


 

Kindle起動試行…そして沈黙

 

期待に胸を膨らませ、インストールされたKindleアプリのアイコンをクリックします。

Kindleアプリ
Kindleアプリ

しかし…待てど暮らせど、Kindleアプリは起動しません。アイコンをクリックしても何の反応もないのです。何度か試してみましたが、結果は同じでした。

念のため、他のアプリ、例えば「SmartNews」などをインストールして起動してみたところ、こちらは問題なく起動し、記事を読むこともできました。このことから、Waydroidの基本的な動作やlibhoudiniによるARMアプリの互換性自体は機能しているものの、Kindleアプリ特有の何らかの要因でWaydroid上では動作しない、という可能性が考えられます。

ひょっとすると、DRM(デジタル著作権管理)や、アプリが特定のデバイス環境を要求するセーフティネットのような仕組みが影響しているのかもしれません。

 


 

結論:WaydroidでもKindleは動かなかった…

 

残念ながら、今回の挑戦ではWaydroidをもってしてもLinux環境でAndroid版Kindleアプリを動作させるという目標は達成できませんでした。Enlightenmentの不安定さという予期せぬ回り道もありましたが、Gnome環境への移行、libhoudiniの導入、Google Play Certificationの取得と、一つ一つのステップはクリアできただけに、最後の最後でKindleが起動しなかったのは非常に残念です。

Linuxで快適にKindleの蔵書を読むための確実な方法は、まだ見えないままです。手軽さという点ではWaydroidに期待していただけに、少し肩を落としています。

今回の試行錯誤が、同じようにLinuxでKindleを読みたいと考えている方々の何らかの参考情報になれば幸いです。もし、どなたかLinux上でKindleアプリを安定して動作させる方法をご存知でしたら、ぜひ教えていただけると嬉しいです。

 

本日も最後までお読みいただきありがとうございました。

それでは、よいKindleライフを!

 

参考サイト

今回のWaydroid導入にあたり、以下のサイトを参考にさせていただきました。素晴らしい情報をありがとうございます。

「Linux環境でKindleを使いたい!(その2)Waydroid on Xubuntu 22.04 挑戦記と、ちょっぴり残念な結末」への1件のフィードバック

  1. ピンバック: Linux環境でKindleを使いたい! – Xubuntu 22.04 と Bodhi Linux 7.0.0 で試したあれこれ - ビューローみかみ

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール