苦行

LinuxでKindleの本を読みたい。

はじめてそう思ったのはいつの頃でしょうか。
はるか昔のことで、もう思い出すことさえできません。

気持ちが高まる都度、ネットで情報を漁って挑戦するものの、いつもうまく行かず途方に暮れたものです。

しかし、この度ようやく苦労が報われましたので、ここに記しておこうと思います。

そもそもの話

Kindleの本を読む方法は、大きく2種類あります。

  1. Kindleアプリを利用
  2. Kindle for Webを利用

1. Kindleアプリを利用

王道。

リリースされているのは、Android版、iOS版、Windows版の3種類で、なんとLinux版がないではありませんか。 よくある話です。

2. Kindle for Webを利用

🔗 Kindle for Web

ブラウザで読むことのできるサービスです。

ただ、ほとんどの書籍が開けません。
もはやこのツールの存在に意味はあるのか疑問に思うレベルで、ほとんど開けません。

雑誌とかコミックなら開けるのかしら。
私はその手のものを読まないから、不明です。

追記

いま、Kindle for Webのヘルプを読んでみたら書いてありました。
私は通常の書籍を開こうとして、無意味に苛立ったり、呆けてたりしていた模様。

注: Kindle for Webでご利用いただけないタイトルもあります。Kindle for Webでは、雑誌、マンガ、英語の本を読むことができます。Kindle無料アプリをダウンロードするか、Kindle電子書籍リーダーをご利用ください。
🔗 Kindle for Webとは何ですか?

過去の屍

Wine

LinuxでWindowsアプリを動かすための代表的な方法は、Wineを使うものです。

Wineとは

Wineは「Wine Is Not an Emulator(Wineはエミュレーターではない)」の再帰的な略語です。Linux、macOS、BSD等のUNIX系オペレーティングシステム上でWindowsアプリケーションを実行するためのオープンソースの互換レイヤーです。 仮想マシンを使用するよりもリソース消費が少なく、多くの場合高いパフォーマンスを発揮します。ただし、すべてのアプリケーションが完璧に動作するわけではなく、とくに最新のゲームや複雑なソフトウェアでは互換性の問題が発生することもあります。

どれだけ頑張っても無理でした。

Kindleアプリの最新版が2.xx系なんですが、動くのは1.xx系のここまでで・・・とかいう情報もあっていろいろ試したんですけどね・・・。

Bottle

Bottleとは

Bottlesは、Wineを使いやすくするために開発されたツールで、Windowsアプリケーションを「ボトル」と呼ばれる独立した環境でLinux上にて実行できるようにするものです。 Wineは基本的なWindowsアプリケーション互換レイヤーを提供するのに対し、Bottlesはその上に構築された使いやすいフロントエンドです。Bottlesは初心者向けに設計されており、複雑なWineの設定を簡素化し、アプリケーションごとに最適化された環境を簡単に作成できます。

どれだけ頑張っても無理でした。

こちらでもKindleアプリのバージョンを気にしてあれこれ試したんですが・・・。

今回の話

よく使われる手法であるWineとBottleがダメ。
ここは少し考え方を変える必要があるのかもしれない。

そうだ、Androidを動かそう!

LinuxでAndroidを動かすには

Waydroidを使います。
これはWaylandというディスプレイシステムを使いますが、私が使っているLinux MIntはX11というディスプレイシステムを使っているため、動作しません。

ということで、X11の中でWestonを使ってWaylandを動かし、さらにそこでAndroiアプリを動かすようにします。

graph BT A[Linux ホストシステム] -->|ディスプレイ出力| B[X11 ディスプレイサーバー] B -->|コンテナ起動| C[Weston/Wayland コンポジタ] C -->|仮想化| E[Waydroid] E -->|実行| F[Android アプリケーション] %% 矢印の色とスタイルを指定 linkStyle 0 stroke:#0066cc,stroke-width:2px; linkStyle 1 stroke:#006600,stroke-width:2px; linkStyle 2 stroke:#cc0000,stroke-width:2px; linkStyle 3 stroke:#cc6600,stroke-width:2px; style A fill:#f9f9f9,stroke:#333,stroke-width:2px style B fill:#ddeeff,stroke:#0066cc,stroke-width:2px style C fill:#ddffdd,stroke:#006600,stroke-width:2px style E fill:#ffdddd,stroke:#cc0000,stroke-width:2px style F fill:#ffeecc,stroke:#cc6600,stroke-width:2px

Kindleアプリを動かすためだけに大変な労力・・・。

Notion AI

今回も、ほぼほぼNotion AIとおしゃべりしながら環境構築をして動かすことに成功しました。

ありがとうNotion AI。

ありがとう課金している私。

完成品

Waydroidのホーム画面
ホーム画面

Kindleアプリを起動
Kindleの表紙

本文
Kindleのページ

前後のページ、機能
Kindleのページ2

トラブったところ

Waydroidでネットワークが繋がらない

Wi-Fiの設定しかないんですが、これはとくに触る必要ないそうで、本体(Linux側)がネットワークに繋がっていれば、Waydroidの中も同様に繋がるはず。

私のところはufwで引っかかっていまして、sudo ufw disableとしたら繋がるようになりました。

ただ、それはそれで問題なのでルールを追加して、ufwが有効のままで通るように変更。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
1) いまの外向きインターフェイス名を確認
ip route get 8.8.8.8 | awk '/dev/{for(i=1;i<=NF;i++)if($i=="dev")print $(i+1)}'
例: wlan0 や eth0 が返る

2) フォワード許可とIP転送を有効化
sudo sed -i 's/^DEFAULT_FORWARD_POLICY=.*/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-waydroid.conf
sudo sysctl --system

3) UFW で bridge → 外 へのルーティングを許可
ここで <UPLINK> を 1) で得た値に置換
sudo ufw route allow in on waydroid0 out on <UPLINK> to any
追加で、DNS/DHCP も通す(念のため)
sudo ufw allow in on waydroid0 to any port 53 proto udp
sudo ufw allow in on waydroid0 to any port 67 proto udp
bridge自体の入出力も許可(厳密には不要なこともありますが安定します)
sudo ufw allow in on waydroid0
sudo ufw allow out on waydroid0

Googleが認めてくれない

認めないエラー
error

我々に承認されていない不届き者めが!

とでも言われているようです。

こちらはAndroid IDをチェックして、それをGoogleに申請することで解決しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1) Android ID を取得
端末で次を実行
waydroid shell settings get secure android_id
出てきた16進のIDをコピー

2) Googleに登録
ホストのブラウザで https://www.google.com/android/uncertified を開く
Play ストアで使っているのと同じGoogleアカウントでログイン
さきほどの Android ID を貼り付けて Register
数分〜数十分待つ(即時反映されることもあります)

Google 高度な保護に阻まれる

Google Playにサインインしようとしてハマりました。
IDとPASSを入れたあと、いつも通りにパスキー(スマホ)で入りたいのですが、スマホに承認依頼が飛ばないのです。

他の方法も選べず、四苦八苦しながらようやくスマホにメールを飛ばしたら、 数字を入れてパスワードをリセットする という恐ろしいものでした。 今から新しいパスワードを記憶に刻むのはムズいです、先生。

詰んだ・・・。

その後、Googleの高度な保護をいったん解除し、サインイン後にまた有効とする力技で切り抜けました。

Kindleはおたくのスマホに対応していません

Google PlayでKindleをインストールしようとしたところ、「あなたのスマホには対応していませんことよ」と書かれていて、インストールボタンが出ていません。

ここまで来て・・・

調べまくった結果、こちらのサイトに辿り着きました。

🔗 Waydroid をインストール

KindleはARMアーキテクチャのアプリで、現在の環境がそれとは違うらしい。
サイトで紹介されていた方法で、無事にインストールできました。