先週、Amazonの月額制読み放題サービスであるKindle Unlimited が日本でもスタートしました。そこで今回はUbuntu上でKindle書籍を読む方法を解説します。ついでにKindle用の書籍データを作成する方法も紹介しましょう。
Kindle on Ubuntu
KindleはAmazonが販売・提供している電子書籍端末であり、読書アプリであり、電子書籍ストアです。Kindleストアで購入した電子書籍は、Kindle端末やiOS/Android上のKindleアプリ、場合によってはWebブラウザーで閲覧できます。今回スタートしたKindle Unlimitedは、Kindleストア上の一部の書籍を月額で読み放題になるサービスです。つまりKindle書籍を読む環境があれば、定額でさまざまな本を読めるというわけです[1] 。
[1] 読者にとっては嬉しいサービスですが、本を作る側にとってはいろいろと悩ましいサービスのようです。定額サービスのメリットを活かしてたくさん読んだ上で、その中に気に入った本が見つかれば実際に購入するという流れになればいいですね。
Kindleは書籍のファイルフォーマットとしてMobipocket形式か、より新しいKF8形式 /KFX形式を採用しています。さらにDRMがかかっているものもあることから、Kindle書籍を読むためにはこれらに対応した専用のハードウェアもしくはソフトウェアが必要になります。単純に読書をするだけであれば専用端末を買ったほうが便利です。しかしながらそれでは本連載が成り立ちません。よってUbuntu上でもKindle Unlimitedを享受する手段を模索することにしましょう。
結論から先に言ってしまうと、Ubuntu上で利用できるリーダーの選択肢は以下の2つです。
Kindle Cloud Reader
Webブラウザー上で動作するKindleリーダーです。ただし日本語の小説(やおそらくリフロー型の和書全般)には対応していないようで、基本的に日本語の書籍で読めるのはマンガと雑誌だけです。また当然のことながらオフラインでは動きません。
Kindle for PC
PC用のKindleアプリです。書籍データをダウンロードして読むタイプなので、オフライン状態でも読書はできます。Windows版とMac版が存在します。
Kindle Cloud Readerの使い方は至極単純です。FirefoxやChromiumなどでサイトにアクセスし、Amazonのアカウントでログインするだけ。AmazonのKindleストアでKindle書籍を購入する際に送り先を「Kindle Cloud Reader」にしておけば、それだけでライブラリーに追加されます。
Kindle for PCに、Ubuntu版は存在しません。そこで出てくるのがWine です。WineはLinux上でWindowsのバイナリを動かすための「互換レイヤー」とも言えるソフトウェア群です。最近はやりのBash on Ubuntuを実現しているWindows Subsystem for Linux (WSL)が「Windows上でLinuxのELFバイナリを動かすためのレイヤー」なので、それを逆にしたものだと考えればいいでしょう。といってもWSLと比較してWineの方は20年以上前から存在する、歴史あるプロジェクトです。
さてWineを使うと、けっこうな数のWindowsソフトウェアがLinux上でも動きます。Kindle for PCも例外ではありません。
Kindle on Ubuntu with Wine
Kindle for PCを起動する前に、まずはWineをインストールします。Wineの最新安定版は1.8 です。しかしながらUbuntu 16.04 LTSの公式リポジトリからインストールできるWineは一つ前の安定版である1.6 となります。また、Ubuntu Wine TeamのPPA には1.8が存在しますが、1.8.0のみで1.8.1や1.8.2、1.8.3には追随していません。さらにWine本家のPPA には、開発版である1.9のパッケージ(winehq-devel)と、よりカッティングエッジな機能を追加したパッケージ(winehq-staging)が存在します。
いずれのバージョンのパッケージでもKindleを動かすことはできます。今回は将来的により多くのWindowsソフトウェアを動かすことを考えて、Wineの公式ドキュメント に従ってwinehq-develパッケージをインストールしましょう。
Wineのインストール
Windowsソフトウェアには32bitバイナリもまだ多いことから、Wineそのものも32bit版が必要になります。そこで、パッケージングシステムに32bitアーキテクチャの対応を追加しましょう。とはいえ、デスクトップ版なら最初から追加されていることでしょう。
$ sudo dpkg --add-architecture i386
あとはPPAを追加してwineをインストールするだけです。
$ sudo add-apt-repository -y ppa:wine/wine-builds
$ sudo apt update
$ sudo apt install winehq-devel
Wineをインストールしたら一度、winebotコマンドでいくつかのDLLなどを「~/.wine/
」に展開しておきます。
$ wineboot
(そこそこ時間がかかります)
wineboot実行時に問われるMonoやGeckoは必要に応じてインストールしてください。今回は不要なので、インストールしていません。
新しいWineはUbuntuシステムのフォント情報を取得し、自動的にWine用のレジストリに展開してくれます。しかしながら「MS Gothic」などのエイリアスは作成してくれませんので、手動でレジストリに追加しておきましょう。以下の内容を「~/.wine/user.reg
」の末尾に追加してください。wine regeditで編集してもかまいません。
[Software\\Wine\\Fonts\\Replacements]
"MS Gothic"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS PGothic"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS Sans Serif"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS Shell Dlg"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS UI Gothic"="TakaoEx\x30b4\x30b7\x30c3\x30af"
あとは「wine iexplore」コマンドなどで、インターネットに接続できることも確認しておきましょう。
Kindle for PCのインストール
「Kindle for PC」はAmazonのページ から「購入」します。無料のアプリではありますが、ただダウンロードすればいいというわけではないようです。購入手続きの都合上Amazonのアカウントを作っておく必要もあります。購入手続きが完了したら、ダウンロードボタンが表示されますのでダウンロードしてください。
あとはこのインストーラーをWine経由で起動するだけです[2] 。
[2] ダウンロードしたファイル名を変更する場合「kindle.exe」や「Kindle.exe」にしないように注意してください。これらの名前だとインストーラーが「Kindleが実行中」と判断して、インストールできません。
$ wine Kindle_for_PC_Windows_ダウンロード.exe
そのまま放っておくと「~/.wine/drive_c/Program Files (x86)/Amazon/Kindle/
」以下にインストールされたKindle for PCが起動します。またデスクトップにKindleのランチャーが追加されますし、DashからもKindleを起動できるようになります。起動したら、Amazonアカウントのログインダイアログが表示されますので、そこにアカウント情報を入力しましょう。
プロキシ環境だとログインダイアログに何も表示されないかもしれません。Wineそのものは原則としてシステムのプロキシ情報を利用してアクセスするのですが、Kindle for PCについては独自のプロキシ設定(ツール→オプション→ネットワーク)を持っています。やっかいなことに、その設定はHTTPアクセスにしか反映されず、ダイアログ上のHTTPSアクセスの場合はプロキシを介してくれないようです[3] 。
無事にログインしたらライブラリの同期が開始します。ちなみにダウンロードしたコンテンツは「~/My Kindle Content/
」に保存されます。
図1 ライブラリの一覧には通常のKindle書籍だけでなくUnlimited経由で購入した書籍も表示される
図2 日本語の縦書きにも対応
図3 日本語検索も可能
Kindle on Ubuntu with Wine on LXD
Kindleはプロプライエタリなソフトウェア ですし、ソースコードも公開されていません。そのようなソフトウェアをシステム上で直接実行することに躊躇する方もいることでしょう。また、Wine自身がホームディレクトリー以下に数多くのファイルを配置することに、不満を感じるかもしれません。そんな不安や不満を少しだけ解消する手段として、Kindleの実行環境をLXDコンテナの中に閉じ込めてしまうという方法があります。
やり方としては、第420回 で解説したVivaldiをコンテナの中で実行する方法と同じです。ここでは簡単に手順だけ紹介しておきましょう。
$ sudo apt install lxd
$ sudo lxd init
さまざまな選択肢が表示されます。
基本的に初期値かもしくは左にある項目を選んでおけば問題ありません。
$ lxc launch ubuntu:16.04 kindle
イメージをダウンロードするためにそれなりに時間がかかります。
$ lxc exec kindle apt update
$ lxc exec kindle -- apt full-upgrade -y
$ lxc exec kindle -- apt install -y language-pack-ja \
fonts-takao avahi-daemon
$ lxc exec kindle update-locale LANG=ja_JP.UTF-8
$ lxc exec kindle timedatectl set-timezone Asia/Tokyo
$ lxc exec kindle timedatectl status
$ lxc file push ~/.ssh/id_rsa.pub kindle/home/ubuntu/.ssh/authorized_keys
$ lxc exec kindle chown ubuntu: /home/ubuntu/.ssh/authorized_keys
ここまででベースとなるコンテナができました。この状態でスナップショットをとっておくと便利です。なお、avahi-daemonについては、ひとつのホストに対してひとつのコンテナでしか起動できないようです。他のコンテナでavahi-daemonが動いていると、ahavi-daemon起動時にエラーとなります。
以降はWine/Kindleのインストール時にやった手順をそのままコンテナ上で行います。
$ lxc exec kindle -- dpkg --add-architecture i386
$ lxc exec kindle -- add-apt-repository -y ppa:wine/wine-builds
$ lxc exec kindle apt update
$ lxc exec kindle -- apt install -y winehq-devel firefox
Wineの初期設定と起動テスト
$ ssh -X ubuntu@kindle.local wineboot
$ lxc file edit kindle/home/ubuntu/.wine/user.reg
末尾に以下の内容を追加する
[Software\\Wine\\Fonts\\Replacements]
"MS Gothic"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS PGothic"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS Sans Serif"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS Shell Dlg"="TakaoEx\x30b4\x30b7\x30c3\x30af"
"MS UI Gothic"="TakaoEx\x30b4\x30b7\x30c3\x30af"
$ ssh -X ubuntu@kindle.local wine iexplore
Kindleのインストール
$ lxc file push Kindle_for_PC_Windows_ダウンロード.exe \
kindle/home/ubuntu/KindleInstaller.exe
$ ssh -X ubuntu@kindle.local wine KindleInstaller.exe
LXDで作ったコンテナにはデスクトップディレクトリが存在しないので、ランチャーが作られません。とりあえずは以下のコマンドで正しく起動するか確認しておきましょう。
$ ssh -X ubuntu@kindle.local QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx \
wine ".wine/drive_c/Program\ Files\ \(x86\)/Amazon/Kindle/Kindle.exe"
Qt製のアプリなので、日本語入力するためには環境変数QT_IM_MODULEを設定しておく必要があります。
うまく動いたら、ホストからコンテナの中のアプリを実行するデスクトップファイルを作っておきましょう[4] 。
$ lxc file pull "kindle/home/ubuntu/.local/share/icons/hicolor/256x256/apps/0914_Kindle.0.png" \
kindle_256.png
$ xdg-icon-resource install --novendor --size 256 kindle_256.png kindle
$ cat > kindle.desktop <<EOF
[Desktop Entry]
Name=Kindle
GenericName=Kindle for PC
Comment=Ebook reader
Exec=ssh -X ubuntu@kindle.local QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx wine ".wine/drive_c/Program\ Files\ \(x86\)/Amazon/Kindle/Kindle.exe"
Terminal=false
Type=Application
Icon=kindle
Categories=Office;Viewer;
EOF
$ desktop-file-validate kindle.desktop
$ desktop-file-install --dir=$HOME/.local/share/applications/ kindle.desktop
Kindle書籍を作成する
最初にも解説したように、Kindleは書籍のファイルフォーマットとしてMobipocket形式か、より新しいKF8形式 /KFX形式を採用しています。手持ちのPDFやEPUBデータをKindleで読もうと思ったら、これらの形式に変換する必要があります。
「Kindleパーソナル・ドキュメントサービス 」は、特定のメールアドレスにPDFなどの電子書籍データを送ることで、自動的にKindleフォーマットに変換し、Kindle用のクラウドアーカイブに保存してくれるサービスです。手持ちのデータをKindleに変換したいだけであれば、基本的にはこのサービスを使うと良いでしょう。
もしファイルサイズが大きすぎてメールで送れなかったり、自分以外にもKindleフォーマットのデータを配布したい場合は、Amazon製の変換ツール でKindleに変換することになります。
KindleGen
コマンドラインでHTMLやEPUBなどのXMLベースのドキュメントを変換するツールです。Linux向けのバイナリも存在します。
Kindleプレビューア
Kindle端末上での表示をエミュレーションできる変換ツールです。EPUBなどに加えて、KindleGenで変換後のファイルも表示できます。Linux向けのバイナリは存在しません。
これらのツールは変換元としてHTMLやEPUBなどのみをサポートしています。PDFや画像ファイルを変換したい場合は、教科書向けや漫画向けの別のツール を使えば解決できるかもしれません[5] 。どちらのツールも、自分の本をKindleストア上で販売できる「Amazon Kindle ダイレクト・パブリッシング 」で使うツールです。
サンプルEPUBファイルの作成
いずれのツールも変換元としてEPUBをサポートしているようなので、まずはサンプルのEPUBデータを作成することにしましょう。IDPFのepub3-samples リポジトリには、日本語も含むいくつかのEPUB用ソースコードが存在します。そこでこれを同リポジトリに同梱のJava製ツールでEPUBデータに変換することにします。
$ sudo apt install default-jre
$ git clone https://github.com/IDPF/epub3-samples
$ cd epub3-samples/
$ ./pack-single.sh 30/kusamakura-japanese-vertical-writing
リポジトリのサイズは大きめです。pack-all.sh
を実行するとすべてのサンプルをEPUBファイルに変更します。ひとつだけ変換しているのは、すべて変換すると時間がかかりすぎるためです。変換した結果は、実行ディレクトリに「kusamakura-japanese-vertical-writing.epub
」の名前で保存されます。
KindleGen
KindleGenはたんなるLinux用のELFバイナリなので、Amazonのサイト からダウンロードして実行するだけです。適当なディレクトリにダウンロードしたアーカイブをコピーしておいてください。
$ tar xvf kindlegen_linux_2.6_i386_v2_9.tar.gz
$ file kindlegen
kindlegen: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, stripped
$ ./kindlegen kusamakura-japanese-vertical-writing.epub
指定したファイル名の拡張子をmobiに変更した「kusamakura-japanese-vertical-writing.mobi
」が作成されます。これはMobipocketとKF8両対応のフォーマットになっているようです。作成したファイルを「My Kindle Content
」にコピーすれば、Kindleから閲覧できます。
たとえばLXDを使っているなら、次のようにコンテナの中へコピーできます。
$ lxc file push kusamakura-japanese-vertical-writing.mobi kindle/home/ubuntu/My\ Kindle\ Content/
Kindleプレビューア
KindleプレビューアはWindows版をダウンロード します。200MBぐらいとファイルサイズが大きめですので、ダウンロード時は注意してください。Windows版ですので、Wine経由でインストーラーを起動します。
$ wine KindlePreviewerInstall.exe
Wineのユーザーディレクトリにある「Local Settings/Application Data/Amazon/Kindle Previewer/
」にインストールされるので、そのディレクトリに移動した上で、プレビューアを起動します。
$ cd ~/.wine/drive_c/users/ubuntu/Local\ Settings/Application\ Data/Amazon/Kindle\ Previewer/
$ wine KindlePreviewer.exe
もちろんLXD上でも動かせますので、よく使うことになりそうなら適宜デスクトップファイルを作っておくとよいでしょう。
図4 EPUBファイルを「開く」ことでKF8形式に変換する
図5 デバイスごとのレンダリング結果を確認しながら変換できる
来週のRecipeは休載です
来週はRecipeを休載します。次の公開日は8月24日です。