Kindle端末のフォントを筑紫明朝から別のフォントに差し替える

初代PaperWhiteなどは自由にフォントを追加できるようですが,
最近のKindle端末はそれが出来なくなってるようです.
しかし,筑紫明朝のファイルの中身を差し替えると好きなフォントにできるようでした.

Kindle端末の/system/fonts/ja.fontはcramfsで作られたファイルシステムイメージのようです.

この差し替え作業,面倒なのでスクリプトにしました.

これを使うためには
  1. Linuxで,かつgvfsが使える
  2. gvfsでKindleをマウントしている
これらを満たしている場合に,引数に差し替えたいフォントへのパスを指定し実行すると,
なんやかんややってフォント差し替えをしてくれます.


#!/bin/bash
if [ $# != 1 ]; then
echo "Usage: $0 <path to trutype font>"
exit 0
fi
original_font="/run/media/$USER/Kindle/system/fonts/ja.font"
if [ ! -e ${original_font} ]; then
echo "mount Kindle on your PC, using gvfs"
exit 0
fi
mkdir -p kindle_pw_font
cd kindle_pw_font
[ ! -e ja.font ] && cp ${original_font} ./
fsck.cramfs --extract=kvfont ja.font
rm ./kvfont/fonts/TsukuMinPr5-Medium.ttf
cp "$1" ./kvfont/fonts/TsukuMinPr5-Medium.ttf
mkfs.cramfs kvfont ja.font.new
original_size=$(ls -l ${original_font} | awk -F" " '{print $5}')
mod_size=$(ls -l | grep 'ja\.font\.new' | awk -F" " '{print $5}')
dd if=/dev/zero of=./ja.font.mod bs=1 seek=${mod_size} count=$(expr $original_size - $mod_size )
cat ja.font.new dummy > ja.font.mod
touch -r ${original_font} ja.font.mod
cp -a ja.font.mod ${original_font}
view raw mkkindleft.sh hosted with ❤ by GitHub
ちなみに紹介すると,やってることは,cramfsを展開し,ファイルを差し替え,cramfsを作りなおし,足りないサイズをzero fillで足し,ctimeをオリジナルに合わせる,というだけです.