2 ポイント 投稿者 GN⁺ 2024-08-05 | 1件のコメント | WhatsAppで共有
  • Kindle Paperwhite 3でmacOSの画面をキャプチャして転送・表示する方式により、3.5fpsのe-inkモニターデモを実装した
  • Kindle側にはポート8000で画像を受け取るGoリスナーサーバーを置き、受信したJPGを内蔵ユーティリティeipsで画面に描画する
  • macOSではscreencaptureImageMagicknetcatを組み合わせて、画面キャプチャ・変換・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.jpg192.168.15.244:8000へ送信する
  • 解像度は使用するKindleデバイスに合わせて変更する必要があり、ポートもKindleリスナーサーバーの設定と一致させる必要がある

性能と使い勝手の限界

  • この実装は前夜に遊びで素早く作ったハックであり、性能と使い勝手の両方に改善の余地が大きい
  • 毎フレームごとにJPGファイル全体を送る方式は無駄が大きい
  • 連続フレーム間の変化量は大半が小さく、圧縮しやすい可能性がある
    • 特にテキストエディタのように画面の一部だけが変わる用途では、この特性がより顕著になるかもしれない
  • h.264のようなコーデックやVNCのようなプロトコルを新たに作らなくても、既存のツールだけで素早く改善できると見ている

参考資料

1件のコメント

 
GN⁺ 2024-08-05
Hacker News のコメント
  • どうやったのかを共有して、短文投稿向けプラットフォームではない場所に載せていたら、ずっと面白かっただろう

    • 今急いで GitHub gist を書いているところで、数分以内にここへリンクを貼るつもり
      追記: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
    • 自分ならもっときつい言い方をしていただろうが、かなり建設的に表現していると思う。X/Twitter に長文を投稿するのは本当に嫌い
      知らない人向けに補足すると、ツイートに @threadreaderapp unroll と返信すれば、再構成された文書を受け取れる。ボットは展開が終わった後、本人にだけ直接返信してくれる
    • HNを短文投稿向けプラットフォームと見なしている点が興味深い
  • 似たようなプロジェクトで 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 フォーラムから始めるのがよい

  • 電子インクディスプレイはいつか安くなるのだろうか。そろそろ基本特許は失効している頃だと思うのだが

    • 競合製品も依然としてかなり高い。自分のデジタルカレンダーで使っている電子ペーパーディスプレイは、知る限り E Ink 製品ではないが、単品で買うと約 50ユーロする: https://www.waveshare.com/7.5inch-e-paper-hat.htm
      自分のカレンダーで最大の原価要因であり、実質的に価格帯を強制的に決めている: https://shop.invisible-computers.com/products/invisible-cale...
    • https://news.ycombinator.com/item?id=26143779
    • 特許はあまり関係ない。E Ink が高い理由は、規模の小さいニッチ製品だからだ。LCD 画面は四半期ごとに何十億枚も生産されており、各自が LCD 搭載機器を何台も持っている可能性が高い
      E Ink が担う用途の大半は LCD で代替可能で、LCD より高いので、あえて使おうとする場所は少ない
      「特許」は、はっきりした根拠なしに出てくる陰謀論に近い。E Ink には競合製品もあり、たとえば DES/Display Electronic Slurry の画面がある。E Ink corp がぼったくっていたなら、GoodDisplay がとっくに市場を奪っていたはずだ
      正確に言うと、E Ink の特許が存在すること自体は陰謀論ではない。一部は失効しており、E Ink corp も革新しながら新しい特許を登録し続けている。LCD の特許も非常に多い。陰謀論に当たるのは、特許のせいで値上げや高価格が生じ、そのために技術の普及が妨げられているという主張だ
  • なぜわざわざ脱獄するのか。Kindle 内蔵ブラウザでデスクトップのスクリーンショットをストリーミングすればよいのでは

    • それはずっと単純ではある。ただし、すべてのフレームがネットワーク → DOM → ブラウザアプリのメモリ → フレームバッファを経由しなければならないので、ブラウザが実用的なフレームレートを処理できるほど強力かどうかは疑わしい
      Kindle ブラウザは Kindle store や Goodreads にもかろうじて付いていく程度だが、逆にそれが証明されるならうれしい。そうすれば新しい Kindle でも、標準状態でずっと簡単に実装できるからだ
  • GitHub に載っていた内容: 「残念ながら Go のソースコードを失くしてしまった」

    • 続けて「それでもかなり単純で、30行未満だった」と言っていた
      それほど単純だったなら、すぐに書き直して GitHub に追加できなかったことのほうがむしろ不思議だ
  • これを簡単にやるなら、Boox リーダーで Superdisplay アプリを使えばよい

  • 最も重要な問いに答えていない: やってみる価値はあったのか?

    • まだ判断するには早い。メインモニターとしては有用ではないが、サブモニターとしては素晴らしい
      現在の形ではフレームレートは良いが、遅延がひどい。そのためタイピング体験は悪いが、タイピングを必要としない用途は多い
      チャットウィンドウのように低遅延のタイピングフィードバックが重要な場合でも、入力テキストボックスは LCD モニターに置き、ほとんど静的なチャット履歴だけを Kindle に表示すればよい。そこまで行くにはさらに作業が必要だが、現時点では良い出発点だ