- Kindle Paperwhite 3でmacOSの画面をキャプチャして転送・表示する方式により、3.5fpsのe-inkモニターデモを実装した
- Kindle側にはポート8000で画像を受け取るGoリスナーサーバーを置き、受信したJPGを内蔵ユーティリティ
eipsで画面に描画する
- macOSでは
screencapture、ImageMagick、netcatを組み合わせて、画面キャプチャ・変換・usbnet転送を処理する
- 毎フレーム全体のJPGを送る構造のため、テキストエディタのように変化が少ない画面では転送の無駄が大きく、改善の余地が多い
- 専用コーデックやVNC実装がなくても、既存ツールの組み合わせだけでe-ink補助モニターの実験を素早く作れることを示している
脱獄とroot shellの確保
- 最初の段階はKindleを脱獄し、何らかの方法でroot shellにアクセスすること
- 関連資料はmobileread.comで見つけられ、LanguageBreak threadの手順を参考にできる
- 実装者はLanguageBreakの手順をそのまま踏んだわけではないが、LanguageBreak GitHubリポジトリをデバッグに有用活用した
- 脱獄の方法そのものより重要なのは、Kindleでルートシェルを得ること
Kindleリスナーサーバーとeips出力
- Kindle側ではポート8000でファイルを受け取るGoプログラムを書いた
- リスナーは受信したJPGを保存した後、Kindle内蔵の画面出力ユーティリティである**
eips**を呼び出す
- 例の流れ:
- GoプログラムがJPGファイルを受信する
/tmp/img.jpgに保存する
- 次のコマンドで画面に描画する
eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
- このコマンドはpartial updateで画像を表示する
- full updateは結果がよくなく、
eipsフラグの意味はeips wikiで確認できる
- 最初のフレームの前には
eips -cで画面を消去できる
- Goソースコードは失われたが、30行未満のシンプルなコードだった
macOS画面キャプチャと画像変換
- macOSでは
screencaptureで画面を繰り返しキャプチャしてPNGファイルとして保存する
- キャプチャ画像はImageMagickでKindle画面に合わせて回転・リサイズ・グレースケール変換する
- 変換後のJPGは
netcatでusbnet経由でKindleリスナーサーバーへ送信する
/usr/sbin/screencapture -C -x /tmp/orig.png
convert /tmp/orig.png -rotate 270 -resize '810x1448!' -type GrayScale -depth 8 -colors 256 /tmp/gray.jpg
cat /tmp/gray.jpg | nc -w 0 192.168.15.244 8000
screencapture -C -xは画面を/tmp/orig.pngとしてキャプチャする
convertは画像を270度回転し、810x1448にリサイズした後、8ビットグレースケール・256色のJPGに変換する
ncは変換後の/tmp/gray.jpgを192.168.15.244:8000へ送信する
- 解像度は使用するKindleデバイスに合わせて変更する必要があり、ポートもKindleリスナーサーバーの設定と一致させる必要がある
性能と使い勝手の限界
- この実装は前夜に遊びで素早く作ったハックであり、性能と使い勝手の両方に改善の余地が大きい
- 毎フレームごとにJPGファイル全体を送る方式は無駄が大きい
- 連続フレーム間の変化量は大半が小さく、圧縮しやすい可能性がある
- 特にテキストエディタのように画面の一部だけが変わる用途では、この特性がより顕著になるかもしれない
- h.264のようなコーデックやVNCのようなプロトコルを新たに作らなくても、既存のツールだけで素早く改善できると見ている
参考資料
1件のコメント
Hacker News のコメント
どうやったのかを共有して、短文投稿向けプラットフォームではない場所に載せていたら、ずっと面白かっただろう
追記: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
知らない人向けに補足すると、ツイートに
@threadreaderapp unrollと返信すれば、再構成された文書を受け取れる。ボットは展開が終わった後、本人にだけ直接返信してくれる似たようなプロジェクトで HDMI 入力を試したことがある
https://hackaday.com/2021/01/08/old-kindle-shows-hdmi-video-...
それで OK Monitor を作った: https://barwap.com/projects/okmonitor/
事業性があるとは思わない。売上は数千〜数万ドル程度になりそうで、どんな利益率にしても、かけた時間や費用以上を回収するのは難しそう。それでも趣味プロジェクトでは、影響力のためにそういう進め方をする例をたまに見かける
コンピュータ用のワイヤレス電子インクディスプレイがあるとよく、理想的にはUSB-C ドングルで映像と電源を一緒に受ける形がいい。HDMI + USB 給電でも構わない
ここ数日、汎用機として Android + Kaleido3 をテストし、Termux-X11 も使ってみた
Kaleido3 はかなり実用的。最新の波形と適切なディザリングアルゴリズムのおかげで、限られた妥協だけで動画視聴も可能で、フレームレートも高い。コーディングも十分可能で、コンパイラとインタプリタは Termux が提供してくれた
Termux-X11 を使うと、Android 端末上でデスクトップ Linux をネイティブに動かせる。そのため電子インクをモニター装置の一部として使う必要はなく、タブレットに内蔵されたアクティブなコンピュータ画面としてそのまま活用することもできる
Kindle を脱獄したい人は、
mobilereadフォーラムから始めるのがよい電子インクディスプレイはいつか安くなるのだろうか。そろそろ基本特許は失効している頃だと思うのだが
自分のカレンダーで最大の原価要因であり、実質的に価格帯を強制的に決めている: https://shop.invisible-computers.com/products/invisible-cale...
E Ink が担う用途の大半は LCD で代替可能で、LCD より高いので、あえて使おうとする場所は少ない
「特許」は、はっきりした根拠なしに出てくる陰謀論に近い。E Ink には競合製品もあり、たとえば DES/Display Electronic Slurry の画面がある。E Ink corp がぼったくっていたなら、GoodDisplay がとっくに市場を奪っていたはずだ
正確に言うと、E Ink の特許が存在すること自体は陰謀論ではない。一部は失効しており、E Ink corp も革新しながら新しい特許を登録し続けている。LCD の特許も非常に多い。陰謀論に当たるのは、特許のせいで値上げや高価格が生じ、そのために技術の普及が妨げられているという主張だ
なぜわざわざ脱獄するのか。Kindle 内蔵ブラウザでデスクトップのスクリーンショットをストリーミングすればよいのでは
Kindle ブラウザは Kindle store や Goodreads にもかろうじて付いていく程度だが、逆にそれが証明されるならうれしい。そうすれば新しい Kindle でも、標準状態でずっと簡単に実装できるからだ
GitHub に載っていた内容: 「残念ながら Go のソースコードを失くしてしまった」
それほど単純だったなら、すぐに書き直して GitHub に追加できなかったことのほうがむしろ不思議だ
これを簡単にやるなら、Boox リーダーで Superdisplay アプリを使えばよい
最も重要な問いに答えていない: やってみる価値はあったのか?
現在の形ではフレームレートは良いが、遅延がひどい。そのためタイピング体験は悪いが、タイピングを必要としない用途は多い
チャットウィンドウのように低遅延のタイピングフィードバックが重要な場合でも、入力テキストボックスは LCD モニターに置き、ほとんど静的なチャット履歴だけを Kindle に表示すればよい。そこまで行くにはさらに作業が必要だが、現時点では良い出発点だ