📚

ChromeOS Flex で Docker 内に Kindle for PC をインストールする

2022/08/06に公開

ChromeOS Flex で Kindle 本を読みたいです。
Kindle Cloud Reader では、技術書の半分以上が読めませんでした[1]
というわけで、ChromeOS Flex に Kindle for PC を入れてみました。

定番の方法である Wine を使って Kindle for パソコンをインストールします。
ここで Crostini の環境に Wine を入れたくなかったので、Docker 上にインストールすることにしました。

執筆時点(2022.08.03)で入ったバージョンは、次のとおりです。

  • kindle
    • KindleForPC-installer-1.38.65290.exe
  • Wine
    • wihehq-devel wine-7.14

本記事で使用するコードは以下にあります。

https://github.com/junkawa/kindle_docker

Crostini 環境

$ uname -a
Linux penguin 5.10.114-16025-ge75506b9d98e #1 SMP PREEMPT Sat Jul 16 18:54:29 PDT 2022 x86_64 GNU/Linux

$ cat /etc/issue
Debian GNU/Linux 11 \n \l

事前準備

$ docker --version
Docker version 20.10.17, build 100c701

インストール

使用する Dockerfile。

Dockerfile
FROM ubuntu:22.04

RUN apt update \
    && apt install -y --no-install-recommends wget ca-certificates \
    && dpkg --add-architecture i386 \
    && wget -nc -O /usr/share/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key \
    && wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources \
    && apt update \
    && apt install -y --install-recommends winehq-devel \
    && apt install -y --no-install-recommends winetricks \
    && apt clean \
    && rm -rf /var/lib/apt/lists/* \
    && groupadd -g 2000 wineuser \
    && useradd -m -u 2000 -g 2000 -s /bin/bash wineuser

USER wineuser
WORKDIR /home/wineuser

RUN mkdir -p ~/.cache/wine \
    && mono_version=$(iconv -cfutf16 /opt/wine-devel/lib64/wine/x86_64-windows/appwiz.cpl 2>/dev/null | grep -Pao '(?<=wine-mono-).+(?=-x86\.msi)') \
    && gecko_version=$(iconv -cfutf16 /opt/wine-devel/lib64/wine/x86_64-windows/appwiz.cpl 2>/dev/null | grep -Pao '(?<=wine-gecko-).+(?=-x86_64\.msi)') \
    && wget -nc https://dl.winehq.org/wine/wine-mono/$mono_version/wine-mono-$mono_version-x86.msi https://dl.winehq.org/wine/wine-gecko/$gecko_version/wine-gecko-$gecko_version-x86.msi -P ~/.cache/wine/ \
    && mkdir -p ~/.wine/drive_c/users/wineuser/AppData/Local/Amazon/Kindle \
    && wget -nc --trust-server-names http://www.amazon.co.jp/kindlepcdownload

Docker イメージ作成

前述の Dockerfile を置いたディレクトリで、次を実行します。

docker build -t kindle_img ./

Wine がインストールされた Docker イメージを作成します。

Docker ボリュームに Kindle for パソコン をインストール

alias docker_kindle='docker run -it --rm -u 2000:2000 -e DISPLAY=${DISPLAY} -v "/tmp/.X11-unix/:/tmp/.X11-unix:rw" -v winehome:/home/wineuser --ipc host kindle_img'

docker run コマンドが長いので、エイリアス化しておきます。

xhost +si:localuser:#2000

docker 内から GUI クライアントを表示するのを許可します。

docker_kindle winetricks -q cjkfonts vcrun2013

フォントをインストールします。

docker_kindle /bin/bash
winecfg
exit # docker 内から抜ける

winecfg で表示された画面で、Windows Version を Windows 8 にします。

  • Window 10 は、インストーラが途中で落ちます
  • Window 8.1 は、ログイン ID、パスワード欄に入力できません
  • Windows 7 は Kindle アプリで警告がでます
docker_kindle /bin/bash -c 'cd && wine KindleForPC-installer-*.exe'

Kindle for パソコンをインストールします。

docker_kindle /bin/bash -c "wine '/home/wineuser/.wine/dosdevices/c:/Program Files (x86)/Amazon/Kindle/Kindle.exe'"

Kindle for パソコンを起動し、ログイン ID、パスワードを入力します。

  • 初回の同期時に Kindle for パソコン が落ちることがあります。再度起動すれば大丈夫です。

備考

  • wine、winetricks は、Xserver に接続していないと実行できません
    • docker build 時は、/tmp/.X11-unix をマウントできません(=Xserver に接続できない)
    • よって、Kindle for パソコン、フォントは、docker build 後に docker run でインストールします

Kindle 実行

kindle

xhost +si:localuser:#2000
docker_kindle /bin/bash -c "wine '/home/wineuser/.wine/dosdevices/c:/Program Files (x86)/Amazon/Kindle/Kindle.exe'"

xhost +si:localuser:#2000 は、Crostini 起動ごとに必要になります。
おまけに記載の起動スクリプトを使うことをおすすめします。

Kindle for パソコンを起動して、読書を楽しめます。

参考記事

おまけ

デスクトップのメニューから Kindle for パソコン を起動する方法

kindle menu

~/projects/kindle_docker/start_kindle.sh
#!/usr/bin/env bash

xhost +si:localuser:#2000

docker run --rm -u 2000:2000 -e DISPLAY=${DISPLAY} -v "/tmp/.X11-unix/:/tmp/.X11-unix:rw" -v winehome:/home/wineuser --ipc host kindle_img /bin/bash -c "wine '/home/wineuser/.wine/dosdevices/c:/Program Files (x86)/Amazon/Kindle/Kindle.exe'"

xhost -si:localuser:#2000
chmod u+x ~/projects/kindle_docker/start_kindle.sh

Kindle for パソコンを起動するスクリプトを用意します。

mkdir -p ~/.local/share/applications
~/.local/share/applications/kindle.desktop
[Desktop Entry]
Name=Kindle for PC
Exec=bash -c "${HOME}/projects/kindle_docker/start_kindle.sh"
Comment=Kindle for PC
Terminal=false
Type=Application

メニュー用の設定ファイルを用意します。

Exec=bash -c "${HOME}/projects/kindle_docker/start_kindle.sh" のパスを、自身の環境に合わせて修正します。

脚注
  1. ちなみに、ASUS Chromebox 3 では Google Play 対応にもかかわらず、Kindle アプリをインストールできませんでした。 ↩︎

Discussion