Meine eInk-Uhr ist so praktisch, da möchte ich am liebsten in jedem Raum eine haben.
Da ich noch einen alten Kindle (oder ein altes Kindle?) der vierten Generation rumliegen habe, welches mangels Touchfunktionalität und Beleuchtung niemand mehr nutzen möchte, hatte ich die Überlegung, das ePaper-Display auszubauen und an einen Raspberry Pi zu hängen.
Doch zum Glück stieß ich darauf, dass man ein Kindle ja auch jailbreaken/rooten und dank Linux-Untergrund jedes beliebige Skript darauf laufen lassen kann.

Also Verkaufsanzeige bei ebay-kleinanzeigen gelöscht, Kindle aus dem Schrank geholt und wie folgt "zur besseren Verwendbarkeit modifiziert".

Ãœberblick

Erste Anlaufstelle für Infos und Fragen ist das mobileread-Forum, wo auch alle notwendigen Downloads zu finden sind.
Hier in der Wiki ist auch ein hilfreicher Artikel zum Thema Jailbreak. Eigentlich müsste ich hier gar nichts weiter erklären... ;-)
Viele Dateien, die ich benötigt hatte, hatte ich von diesem Threak heruntergeladen.

In meinem Fall handelte es sich um ein Kindle 4 (nachfolgend als K4 bezeichnet) mit Firmwareversion 4.1.3 Рaber auch so gut wie alle anderen Kindle-Modelle k̦nnen gejailbreakt werden.
Eine Übersicht, wie man an Hand der Seriennummer die Modellnummer seines Kindle herausbekommt und wie das Modell im Forum abgekürzt genannt wird, ist hier zu finden.

Der Kindle funktioniert nach dem Jailbreak wie bisher, nur dass man damit nachher noch weitere Dinge anstellen kann, wie etwa per Shell im System rumfuhrwerken oder bash/python-Skripte laufen lassen kann.

Folgene Schritte werde ich durchführen:

  • Eigentlicher Jailbreak
  • KUAL installieren – Der "App Launcher" für alle Apps und Skripte, die man nach dem Jailbreak nutzen möchte. KUAL wird im Kindle als Buch dargestellt, welches man dann wie jedes andere Buch öffnen kann
  • Weitere Tools installieren, wie etwa Python3 und usbnetwork, um per Shell auf den Kindle zugreifen zu können

Ich übernehme wie immer bei solchen hackereien keine Verantwortung, sollte etwas schief gehen und der Kindle unbrauchbar werden.

Jailbreak

Zuerst: Flugmodus aktivieren und/oder Internetzugriff sperren!
Ich schreibe später etwas dazu, unter welchen Umständen man ihn wieder aktivieren kann.
Auf jeden Fall hatte ich bei mir die ganze Zeit den Flugmodus drinnen und ihn nur für etwa 5 Sekunden mal draußen, schon funktionierte KUAL nicht mehr, weil Amazon da irgendetwas gemacht hat.

Best Practice wäre, vor dem jailbreaken das WLAN einzurichten und dann auf dem Router den Internetzugriff für das Gerät zu kappen. Die FritzBox kann zum Beispiel je WLAN-Gerät mit Hilfe der "Kindersicherung" den Internetzugriff sperren.

Und dann kann's losgehen...

  1. kindle-k4-jailbreak-1.8.N.zip aus diesem Thread herunterladen.
    Hier steht zwar für Firmwareversionen 4.0.x – 4.1.2; hatte aber auch bei meiner Firmware 4.1.3 funktioniert.
  2. Datei entpacken, Kindle per USB an den Computer stöpseln
  3. data.tar.gz, ENABLE_DIAGS und den Ordner diagnostic_logs direkt auf die oberste Ebene des Kindle-Volumes kopieren
  4. Kindle-Volume auswerfen/sicher entfernen und Kindle neustarten (Menu -> Einstellungen -> Menu -> Neustart)
  5. Das Kindle sollte nach dem Start einen Diagnostik-Modus anzeigen. Hierbei Folgendes mit den 5-Wege-Tasten auswählen:
    • "D) Exit, Reboot or Disable Diags"
    • "R) Reboot System"
    • "Q) To continue"

Das kann nun ein bisschen dauern. Danach sollte der Kindle normal starten und ein neues Buch "You are Jailbroken" in der Bibliothek angezeigt werden.
Damit war der Jailbreak erfolgreich.
 

KUAL – Kindle Unified Application Launcher

Kann von diesem Thread heruntergeladen werden.

Für mein Kindle 4 war die Datei KUAL-KDK-1.0.azw2 relevant, welche ich in den /documents-Ordner des Kindles geschoben haben (über die USB-Verbindung).

Nun sollte ein weiteres Buch "KUAL" in der Bibliothek des Kindles erscheinen. Öffnet man dieses Buch, öffnet sich der Launcher, welcher alle im /extensions-Ordner vorhandenen Programme anzeigt.

Damit man KUAL aber tatsächlich verwenden kann, muss noch das Mobileread Kindlet Kit installiert werden. Siehe übernächstes Kapitel "Weitere Tools installieren".

 

KUAL-Applikationen erstellen

Kurz umrissen besteht eine KUAL-Applikation aus einem Ordner mit zwei Config-Dateien und mindestens einem Skript, welches irgendwas ausführen soll.

Der Ordner muss sich im Verzeichnis /extensions auf der obsersten Ebene des Kindle-Verzeichnisses befinden, welches zu sehen ist, wenn man den Kindle per USB mit dem Computer verbindet.

Ordner <app-name>
    -   config.xml
    -   menu.json
    -   <weitere Ordner mit Resourcen, Skripte, etc>

config.xml
<?xml version="1.0" encoding="UTF-8"?>
<extension>
    <information>
        <name>Hallo Welt</name>
        <version>0.1</version>
        <author>apfelz</author>
        <id>hallowelt</id>
    </information>
    <menus>
        <menu type="json" dynamic="true">menu.json</menu>
    </menus>
</extension>

Achtung: Die <id/> muss dem Ordnernamen "app-name" entsprechen!

menu.json
{
    "items": [{
        "name": "Hallo Welt",
        "priority": -999,
        "exitmenu": false,
        "refresh": false,
        "status": false,
        "action": "./bin/hallo.sh"
    }, {
        "name": "Hallo Welt, die Zweite",
        "priority": -998,
        "exitmenu": false,
        "refresh": false,
        "status": false,
        "action": "./bin/nochnenhallo.sh"
    }]
}

Hier würden im KUAL zwei Einträge "Hallo Welt" und "Hallo Welt, die Zweite" auftauchen, welche nach dem Auswählen eines der beiden Skripte im Unterordner bin ausführen.

Interessant ist bei der Erstellung von Skripten das Shell-Kommando eips, über welches Text auf dem eInk-Bildschirm ausgegeben werden kann. Alle Infos zu diesem Befehl sind hier zu finden.
Natürlich gibt es noch weitere Möglichkeiten, Texte und Bilder auf dem Display darzustellen. Dazu mehr in einem anderen Artikel.

 

Weitere Tools installieren

Desweiteren habe ich noch folgende Tools installiert, welche man sich allesamt von diesem Thread herunterladen kann:
  • Mobileread Kindlet Kit (ohne dieses wollte KUAL bei mir nicht funktionieren; Datei am besten aufbehalten – siehe "Hilfe, KUAL geht nicht mehr")
  • Python 3.9 (für mein ePaper-Uhr-Programm, welches im mal für den Raspberry in Python geschrieben hatte)
  • USBNetwork Hack (um per Shell auf den Kindle zu kommen)

Immer schön darauf achten, die K4-Version zu installieren.

Es ist immer ein gut dokumentiertes Readme vorhanden, wie man das Tool installieren muss.
An sich bekommt man bei jedem Tool eine .bin-Datei geliefert, die man (immer nur eine nach der anderen) in die oberste Ebene des Kindle-Volumes (welches auf dem Computer erscheint, wenn man es per USB verbindet) kopiert und dann auf dem Kindle die Menütaste drücken -> Einstellungen -> Nochmals Menütaste -> Kindle Updaten

USBNetwork verwenden

USBNetwork Bedarf vielleicht noch einer kleinen Erklärung.

Ist der USBNetwork Hack auf dem Kindle installiert, sollte man das Kindle nochmals neu starten, ohne dass es per USB-Kabel mit dem Computer verbunden ist.

Es sollte danach einerseits in KUAL einen Programmpunkt gebe, um USBNetwork zu aktivieren, man kann als umständliche Lösung USBNetwork auch starten, indem man die Kindle-Suchleiste aktiviert (Tastatur-Taste drücken) und dann erst folgenden Befehl eingibt:

;debugOn

Enter für Suchen. Dann nochmals die Suchleiste öffnen und Folgendes eingeben:

~usbNetwork

Enter für Suchen.

Dies ist auf dem Kindle 4 natürlich ziemlich umständlich einzugeben.

Nach aktiviertem USBNetwork kann man nun den Kindle per USB-Kabel mit dem Computer verbinden.

Am Mac sollte dann unter Systemeinstellungen > Netzwerk eine neue Verbindung "RNDIS" auftauchen.
Hier IPv4 auf "Manuell" stellen und folgendes in die ersten beiden Felder eintragen:
IP Adresse:    192.168.15.201
Teilnetzmaske: 255.255.255.0

Danach sollte das Kindle unter der IP 192.168.15.244 zu erreichen sein. Die beiden IPs sind fest durch den USBNetwork-Hack vorgegeben.
Der Benutzername für einen ssh-Zugriff ist root, das Passwort entweder mario oder über die Seriennummer des Kindles auf dieser Seite in Erfahrung zu bringen.

Das System ist im ReadOnly-Modus gemountet und muss mit dem Befehl mntroot rw in den ReadWrite-Modus geschalten werden, sollte man irgendetwas an Konfigurations-Dateien ändern wollen.
Die Freigabe, die zu sehen ist, wenn man das Kindle sonst per USB mit dem Computer verbindet, ist an dieser Stelle zu finden: /mnt/base-us/

Möchte man die SSH-Authentifizierung durch Schlüssel verwenden, um sich die lästige Passworteingabe zu ersparen, muss der lokale Schlüssel an einem andere Ort als ~/.ssh auf dem Kindle abgelegt werden:

cat ~/.ssh/id_rsa.pub | ssh root@192.168.15.244 'cat – >> /mnt/base-us/usbnet/etc/authorized_keys'

Don't phone home! Oder: Wieso man nicht online gehen sollte

Ich habe sämtliche Internetzugriffe für das Kindle auf meiner FritzBox gesperrt. Damit es trotzdem eine vernünftige Uhrzeit anzeigen kann, habe ich als NTP-Server meine FritzBox hinterlegt.

Dazu per usbNetwork/ssh verbinden, System in ReadWrite-Modus schalten und /etc/sysconfig/ntp öffnen:

mntroot rw
nano /etc/sysconfig/ntp

Hier nun den NTP_SERVER auf die IP der FritzBox umstellen. Z.B.

NTP_SERVER=192.168.178.1

Mit ctrl-O speichern und ctrl-X schließen.

Danach das Filesystem wieder in den ReadOnly-Mode schalten:

mntroot ro

Dummerweise denkt entweder das Kindle, in einer anderen Zeitzone zu leben. Die Uhr weicht immer um zwei Stunden von der mitteleuropäischen Zeit ab. Dies kann ich durch setzen der Variable TZ ändern – dies gilt dann aber nur für die aktuelle Shell-Session

TZ="UTC-2"; export TZ

Damit dies bei jedem Neustart Anwendung findet, sollte man die Zeile in die .profile-Datei schreiben.

mntroot rw
nano /etc/profile
#TZ="UTC-2"; export TZ ans Ende der Datei hinzufügen
mntroot ro

Problem:
Damit mein WLAN-Schlüssel überhaupt im Kindle gespeichert werden konnte, musste ich den Internetzugang doch anfangs kurz zulassen...diese paar Sekunden hatten schon gereicht, dass mir Amazon ein ominöses Dokument "Test-Kindle Installationsergebnis" in die Bibliothek hinzugefügt hatte und sich KUAL nicht mehr starten ließ.

Nach diesen Erkenntnissen könnte es sehr hilfreich sein, noch folgende beiden Befehle in der Shell des Kindle einzugeben, bevor man das WLAN einrichten möchte:

touch /mnt/us/WIFI_NO_NET_PROBE
restart wifid

Dies sollte die Netzwerk-Validierung deaktivieren und es sollte sich auch ein Netzwerk hinzufügen lassen, welches keinen direkten Internetzugang bietet (also wenn z.B. auf der FritzBox der Internetzugang gesperrt ist).

Allerdings führte das bei mir persönlich dazu, dass der Kindle mal kurz WLAN hatte und danach nicht mehr wollte. Sagte immer wieder "Verbindung fehlgeschlagen", obwohl die FritzBox behauptet, er sei erfolgreich verbunden. Musste ihn wieder komplett auf Werkseinstellungen zurücksetzen, damit ich das WLAN wieder einrichten konnte (dieses Mal am besten vor dem Jailbreak).

Also nochmals kurz zusammengefasst:

  • Kindle am besten nur im Flugmodus verwenden, sonst pfuscht Amazon rum
  • Benötigt man einen Netzwerkzugang, aber der Zugriff auf das Intranet reicht aus, kann man den Internetzugang für das Gerät auf dem Router sperren; am besten richtet man das WLAN vor dem jailbreaken ein
  • Benötigt man einen vollen Internetzugang, sollte man vorher etwas googeln, wie man den Amazon-Updatemechanismus auf dem Kindle deaktiviert und/oder einen Proxy wie PiHole verwenden

Hilfe, KUAL geht nicht mehr

Ist das Kind(le) in den Brunnen gefallen und KUAL lässt sich mit der Meldung "Dieses Gerät wurde vom Entwickler dieses Inhalts nicht als Test-Kindle autorisiert. Wenden Sie sich bitte an den Entwickler", bringt es natürlich nicht viel, sich an den Entwickler zu wenden (der kann da nichts dafür), sondern man bekommt das Problem zum Glück recht einfach in Griff, indem man das Mobileread Kindlet Kit nochmals neu installiert.
 

Nächster Schritt

Bei mir ging es dann damit weiter, meine eInk-Uhr/Wetterstation als "KUAL-App" zu schreiben.
Ein Artikel hierzu folgt in Kürze.

Da es sich um Linux handelt, muss man sich nicht unbedingt mit einer KUAL-App abgeben Рman k̦nnte auch Skripte im crontab hinterlegen.