Kindle Status Display

My Bitcoin Status Display made with a jailbroken Kindle. Original idea and setup taken from @naltatis' kindle-display.

Framed

General

This is a two part setup: The hacked Kindle pulls a screenshot that is taken from the webpage the server displays. The server updates this screenshot in regular intervals and the Kindle also updates regularly.

+------+   update X minutes    +------+
|      |  ------------------>  |      |
|      |         wifi          |      |
|      |  <------------------  |      |
+------+    greyscale image    +------+
 kindle                         server

Server

The code in this repository is my personal setup which pulls in data from my own network. I recommend you fork this repository and modify the ./data.sh and visual representation to fit your needs.

Prerequisites

  • Node.js (assembles the data and runs the webserver)
  • firefox (takes the screenshot of the webpage)
  • pngcrush (converts the screenshot to a greyscale image)
  • jq (to process the JSON data)
  • jo (to generate the JSON data file)

Installation

# Clone the repository
git clone git@github.com:username/kindle-display.git

# Go to the server directory
cd kindle-display/server

# Copy sample env file and adapt the settings
cp .env.sample .env

# Install the dependencies
npm install

# Start the server
npm start

# Update data and create the screenshot
./cron.sh

# Preview the greyscale in your browser
open http://localhost:3030/display.png

Once everything works, deploy the server app and setup a cronjob to trigger the cron.sh script regularly.

Kindle

Prerequisites

You need to jailbreak your Kindle using the packages from the mobileread forum.

I installed these according to the info in their particular READMEs:

  1. Jailbreak
  2. USBNetwork
  3. MKK
  4. KUAL

Installation

# Connect your Kindle via usb and ssh into it
ssh root@kindle

# Make the Kindle file system writable
mntroot rw

# Create the mnt/base-us scripts according to the files in the kindle directory
vi /mnt/base-us/RUNME.sh

# Set the BASE according to your local network setup to address the server
vi /mnt/base-us/update.sh

# Create a cronjob to run the update script in regular intervals
#
# For instance:
# */5 6-22 * * * /mnt/us/update.sh
# 0 23,0,5 * * * /mnt/us/update.sh
vi /etc/crontab/root

# Execute the init script and trigger an the first render
sh /mnt/base-us/RUNME.sh

Notes regarding USB Network

Some hints via openoms) and grnqrtr, also see the mobileread forum.

Unmount and eject your Kindle. Also unplug it, as some devices behave strangely when toggling usbnet/usbms while plugged in.

Toggle USBnetwork ON in the launcher and plug in the cable again. Kill any automation or configure your Kindle to do so.

sudo ip link set up dev usb0 (It may already be up)
sudo ip address add 192.168.15.201 peer 192.168.15.244 dev usb

Use the networking until your done (telnet 192.168.15.244). Un-plug cable and toggle USBnetwork OFF in launcher.

You'll need to be in debug mode to run private commands. So, on the Home screen, bring up the search bar (by hitting [DEL] on devices with a keyboard, or the keyboard key on a K4, for example), and enter:

;debugOn

# now we can enable usbnet
~usbNetwork

On the desktop:

dmesg | grep usb0

# example output
> [367478.835928] cdc_subset 1-2:1.1 enp0s20u2i1: renamed from usb0

Use ifconfig enp0s20u2i1 192.168.15.201

To log in ssh root@192.168.15.244 and just press enter.

Images

Framing

Jailbreak 1

Jailbreak 2

Credits

naltatis

Matthew Petroff

hahabird