ChromeOS Flex で Docker 内に Kindle for PC をインストールする
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
本記事で使用するコードは以下にあります。
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 のインストール
$ docker --version
Docker version 20.10.17, build 100c701
インストール
使用する 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 実行
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 パソコン を起動する方法
#!/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
[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"
のパスを、自身の環境に合わせて修正します。
-
ちなみに、ASUS Chromebox 3 では Google Play 対応にもかかわらず、Kindle アプリをインストールできませんでした。 ↩︎
Discussion