Skip to content

Instantly share code, notes, and snippets.

@adtac
Last active October 27, 2024 08:53

Revisions

  1. adtac revised this gist Aug 5, 2024. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,7 @@
    ## using your Kindle as an e-ink monitor
    ## [🖥️ See Demo](https://x.com/adtac_/status/1820127470613622950)

    demo: https://x.com/adtac_/status/1820127470613622950 (3.5 fps, Paperwhite 3)
    > 3.5 fps, Paperwhite 3
    > [@adtac_](https://x.com/adtac_)
    ### step 1: jailbreak your Kindle

  2. adtac revised this gist Aug 4, 2024. No changes.
  3. adtac revised this gist Aug 4, 2024. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion README.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    ## using your Kindle as an e-ink monitor

    demo: https://x.com/adtac_/status/1820127470613622950 (Paperwhite 3)
    demo: https://x.com/adtac_/status/1820127470613622950 (3.5 fps, Paperwhite 3)

    ### step 1: jailbreak your Kindle

  4. adtac revised this gist Aug 4, 2024. 1 changed file with 9 additions and 1 deletion.
    10 changes: 9 additions & 1 deletion README.md
    Original file line number Diff line number Diff line change
    @@ -46,4 +46,12 @@ it's super wasteful to send a full jpeg file for each frame when the delta betwe

    without reinventing codecs like h.264 and protocols like vnc, it should be possible to quickly improve this with just the tools we already have

    have fun!
    have fun!

    ### other useful resources

    https://www.sixfoisneuf.fr/posts/kindle-hacking-deeper-dive-internals/

    https://github.com/NiLuJe/KindleTool

    https://www.mobileread.com/forums/showthread.php?t=356766 - the vulnerability that makes LanguageBreak possible
  5. adtac revised this gist Aug 4, 2024. 1 changed file with 13 additions and 1 deletion.
    14 changes: 13 additions & 1 deletion README.md
    Original file line number Diff line number Diff line change
    @@ -22,6 +22,8 @@ eips -g /tmp/img.jpg -w gc16 -x 128 -y 0

    read the [eips wiki](https://wiki.mobileread.com/wiki/Eips) for details on what the flags mean

    you may want to clear the screen with a `eips -c` before the first frame

    unfortunately I lost the Go source code, but it was pretty simple, like under 30 lines

    ### step 3: screencapture + imagemagick
    @@ -34,4 +36,14 @@ convert /tmp/orig.png -rotate 270 -resize '810x1448!' -type GrayScale -depth 8 -
    cat /tmp/gray.jpg | nc -w 0 192.168.15.244 8000
    ```

    change the resolution to match your device and port to match the listener server
    change the resolution to match your device and port to match the listener server

    ### step 4: ???

    I hacked this together last night for fun and obviously there's a lot of room for improvement here, both in terms of performance and usability

    it's super wasteful to send a full jpeg file for each frame when the delta between consecutive frames is mostly going to be empty and very compressible (like when you're using a text editor)

    without reinventing codecs like h.264 and protocols like vnc, it should be possible to quickly improve this with just the tools we already have

    have fun!
  6. adtac revised this gist Aug 4, 2024. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -26,11 +26,11 @@ unfortunately I lost the Go source code, but it was pretty simple, like under 30

    ### step 3: screencapture + imagemagick

    I wrote a script to use `screencapture` on macOS to repeatedly capture the screen into a png file, which is then converted into a shape, size and color the Kindle likes, and then transferred over usbnet
    I wrote a script to use `screencapture` on macOS to repeatedly capture the screen into a png file, which is then converted into a shape, size and color the Kindle likes using imagemagick, and then transferred over usbnet using netcat

    ```sh
    /usr/sbin/screencapture -C -x /tmp/orig.png
    magick /tmp/orig.png -rotate 270 -resize '810x1448!' -type GrayScale -depth 8 -colors 256 /tmp/gray.jpg
    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
    ```

  7. adtac created this gist Aug 4, 2024.
    37 changes: 37 additions & 0 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    ## using your Kindle as an e-ink monitor

    demo: https://x.com/adtac_/status/1820127470613622950 (Paperwhite 3)

    ### step 1: jailbreak your Kindle

    [mobileread.com](https://www.mobileread.com/forums) is your best resource here, follow the instructions from [the LanguageBreak thread](https://www.mobileread.com/forums/showthread.php?t=356872)

    I didn't really follow the LanguageBreak instructions because I didn't care about most of the features + I was curious to do it myself, but the LanguageBreak github repo was invaluable for debugging

    it doesn't matter how you jailbreak your device as long as you get to a root shell somehow

    ### step 2: listener server on the Kindle

    I wrote a Go program to receive files on port 8000 and then invoke `eips`, which is Kindle's built-in utility to draw images on the screen

    for example, if the Go program received a JPG file and saved it under /tmp/img.jpg, the following command would draw the image with a partial update (full update looks awful):

    ```sh
    eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
    ```

    read the [eips wiki](https://wiki.mobileread.com/wiki/Eips) for details on what the flags mean

    unfortunately I lost the Go source code, but it was pretty simple, like under 30 lines

    ### step 3: screencapture + imagemagick

    I wrote a script to use `screencapture` on macOS to repeatedly capture the screen into a png file, which is then converted into a shape, size and color the Kindle likes, and then transferred over usbnet

    ```sh
    /usr/sbin/screencapture -C -x /tmp/orig.png
    magick /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
    ```

    change the resolution to match your device and port to match the listener server