Par Christophe CONIGLIO
Avec deux jeunes enfants à la maison, une bonne organisation s'impose. Entre les rendez-vous médicaux, le télétravail et le travail sur site des deux parents, il faut constamment garder un œil sur l’agenda familial. Courses à faire, tâches domestiques, rendez-vous chez le pédiatre... autant de notes éparpillées sur une liste de courses ou un calendrier affiché sur le frigo. Les outils numériques comme Google Keep ou Google Calendar ont été essayés, le traditionnel calendrier au frigo aussi. Mais aucune de ces solutions ne nous a convaincus : mettre à jour une liste sur l’application n'a que guère de plus-value, pas de notifications lisibles sur petit écran, et le calendrier physique n’était jamais là où il fallait au bon moment.
C’est ainsi qu’est née l’idée d’un dashboard familial affiché en permanence sur un écran e-ink. J'étais intrigué par ces écrans qui présentent l’avantage d’une consommation électrique minime et d’une lisibilité dans le style page d'un livre sans rétroéclairage qui éclaire une pièce, idéal pour un affichage constant des informations utiles. Le problème : les écrans e-ink disponibles sur le marché sont chers, petits, et difficiles à trouver, pas du tout clé en main. En cherchant un peu, je comprends que pour une trentaine d’euros, on peut dénicher une liseuse Kindle de 2012 et la hacker/modifier pour en faire un écran déporté. L’appareil a beau être vieux de plus de dix ans, son écran 6 pouces reste adapté à un tel projet.
→ C’est donc le point de départ de ce projet : recycler un vieux Kindle en tableau de bord familial intelligent, visible de tous, complètement autonome sans interaction nécessaire, et on le verra plus tard mais même agrémenté d’une touche d’IA pour le côté ludique.
La première étape a consisté à jailbreaker le Kindle, c’est-à-dire déverrouiller le système pour pouvoir y installer des scripts et des applications non officielles. Le modèle choisi est un Kindle 4. Des tutoriels existent sur les forums spécialisés pour installer des outils comme KUAL ou le hack USBNetwork ouvrant l’accès en SSH. En théorie, KUAL permet de lancer n’importe quel script ou programme sur la liseuse, ce qui aurait été la porte d’entrée idéale pour mon tableau de bord. Cependant, pirater un Kindle ancien s’est avéré moins facile que prévu. Malgré le suivi scrupuleux de plusieurs guides et l’installation répétée de packages de jailbreak, impossible d’obtenir un Kindle réellement “ouvert”. Le lanceur KUAL refusait de se lancer malgré des dizaines de tentatives. La communauté de hackers sur ces vieux modèles n’est plus très active en 2025, ce qui compliquait la tâche pour trouver de l’aide. Après une bonne dizaine d’heures à enchaîner échecs et redémarrages, le constat était décourageant : le Kindle restait fermé aux modifications, et l’application KUAL, pourtant cruciale, demeurait ininstallable. Ces tentatives infructueuses n’ont pas été totalement vaines. En fouillant dans les fichiers des hacks, il était évident que certains éléments avaient tout de même pu s’ajouter à la liseuse. Par exemple, l’installation de USBNetwork laissait des traces et des fichiers de configuration permettant théoriquement d’activer une connexion SSH. Dans les faits, la connexion SSH n’a jamais fonctionné, mais ces bribes d’accès ont donné une lueur d’espoir.
La bible du hack Kindle pour les curieux :
https://www.mobileread.com/forums/showthread.php?t=225030
Plutôt que d'abandonner, j'ai changé d'approche en exploitant directement les failles du système du Kindle. Les solutions clé en main refusant de fonctionner correctement, j'ai décidé d'écrire mon propre script de démarrage.
Tout d'abord, je lance le Kindle en mode diagnostic via un hack opérationnel( une fonctionnalité intégrée destinée initialement à des fins de dépannage et de maintenance). C'est précisément ce mode qui constitue ma porte d'entrée vers les modifications profondes du système, car il permet d'exécuter du code avec les privilèges root.
Comprendre la structure des partitions du Kindle était crucial. En creusant, j'ai réalisé que le Kindle possède plusieurs partitions distinctes : une réservée au mode normal et une autre dédiée au mode diagnostic (peut être d’autres ). Cette séparation m'a permis de manipuler la partition en mode diagnostic sans risquer immédiatement de corrompre le mode normal, limitant ainsi les risques de briquer définitivement l'appareil, puis plus tard de modifier la partition principale étant le graal. Je me suis appuyé sur le hack USBNetwork, une solution permettant normalement d'activer une connexion réseau via USB au démarrage du Kindle. Toutefois, au lieu de l'installer complètement, je l'ai volontairement laissé dans un état incomplet, avec sa configuration désactivée (« not enabled »). Dans cet état précis, le hack USBNetwork vérifie juste s' il doit se lancer (et donc ne se lance pas).
J'ai profité de cette situation pour détourner uniquement le script de lancement fourni par USBNetwork. En modifiant ce script, j'ai ajouté une commande pointant vers mon propre script personnalisé, stocké directement sur la mémoire USB du Kindle. Cette méthode est plus sûre, car elle évite de toucher directement aux scripts système essentiels, ce qui aurait augmenté considérablement le risque de le “casser”..
Afin d'assurer une sécurité supplémentaire, mon script personnalisé s'exécute en tâche de fond avec un délai volontaire (très important). Ainsi, en cas de problème au démarrage, je conserve une fenêtre temporelle pour intervenir et annuler son exécution.
Cette approche, constitue la percée technique que j'avais ENFIN besoin (ouuuuuf): mon Kindle exécute désormais automatiquement mon script personnalisé dès son démarrage, ouvrant enfin la voie aux modifications nécessaires pour le transformer en écran de dashboard interactif.
Ce script commence par effectuer quelques vérifications, puis remplace un script existant lié à usbnet par une version modifiée que j’ai adaptée pour lancer mon propre programme, TaaaaDa
#!/bin/sh
OUTFILE="/mnt/us/initd_listing2.txt"
TMPMOUNT="/tmp/main"
SRCFILE="usbnet"
SRC_LOCAL="/mnt/us/RES/${SRCFILE}"
DEST_FILE="$TMPMOUNT/etc/init.d/${SRCFILE}"
echo ">>> TABLE DES PARTITIONS (fdisk -l)" > "$OUTFILE"
fdisk -l /dev/mmcblk0 >> "$OUTFILE" 2>&1
echo "\n>>> SYSTÈMES DE FICHIERS MONTÉS (mount)" >> "$OUTFILE"
mount >> "$OUTFILE" 2>&1
# Remonter / en lecture/écriture si nécessaire
IS_RO=$(mount | grep ' on / ' | grep '(ro,')
if [ -n "$IS_RO" ]; then
echo "\n>>> / est en lecture seule, tentative de remount en rw..." >> "$OUTFILE"
mount -o remount,rw / >> "$OUTFILE" 2>&1
else
echo "\n>>> / est déjà en lecture/écriture" >> "$OUTFILE"
fi
# Vérifie la présence du fichier source à copier
if [ ! -f "$SRC_LOCAL" ]; then
echo "\n>>> Fichier source introuvable : $SRC_LOCAL" >> "$OUTFILE"
exit 1
fi
# Monter la partition principale
echo "\n>>> MONTAGE de la partition principale (mmcblk0p1) sur $TMPMOUNT" >> "$OUTFILE"
mkdir -p "$TMPMOUNT"
mount /dev/mmcblk0p1 "$TMPMOUNT" >> "$OUTFILE" 2>&1
# Vérifie que la destination existe
if [ -d "$TMPMOUNT/etc/init.d" ]; then
echo "\n>>> Copie de $SRC_LOCAL vers $DEST_FILE" >> "$OUTFILE"
cp -f "$SRC_LOCAL" "$DEST_FILE" >> "$OUTFILE" 2>&1
chmod +x "$DEST_FILE"
echo "\n>>> Copie terminée et droits ajustés" >> "$OUTFILE"
else
echo "\n>>> Dossier $TMPMOUNT/etc/init.d introuvable !" >> "$OUTFILE"
fi
# Démontage
umount "$TMPMOUNT" >> "$OUTFILE" 2>&1
Maintenant que le Kindle obéit aux commandes, l’objectif est de l’utiliser comme un écran qui affiche en continu une page web avec les informations familiales. Deux problèmes devaient être résolus à ce stade : empêcher la liseuse de se mettre en veille automatiquement, et afficher le contenu en plein écran sans barre d’outils ni adresse.
Désactivation de la veille et de l’économiseur d’écran. Par défaut, les Kindle se mettent en veille au bout de quelques minutes d'inactivité et affichent un écran de veille (souvent une image aléatoire). Pour un tableau de bord, c’est évidemment indésirable. Grâce à l’accès root, ce comportement neutralisable. Mon script lancé au démarrage envoie régulièrement une commande au système pour inhiber la mise en veille. Le résultat, c’est que l’écran reste allumé en permanence sur la dernière image affichée, sans jamais basculer en mode veille. Étant donné la nature de l’e-ink, cela ne consomme de l’énergie que lors des rafraîchissements d’écran, ce qui l'objectif
Premier script exécuté en tâche de fond en boucle sur le Kindle
#!/bin/sh
echo "coucou2" > /mnt/us/a_log_v2_routine_1_init.txt
sleep 90
echo "coucou2" > /mnt/us/a_log_V2_routine_1_lance.txt
# Boucle infinie qui maintient le Kindle réveillé
while true; do
# Empêche l'affichage du screensaver
lipc-set-prop com.lab126.powerd preventScreenSaver 1
# Empêche la mise en veille profonde
echo -n "off" > /sys/class/graphics/fb0/blank 2>/dev/null
# Toutes les 60 secondes, on rafraîchit l'ordre
sleep 120
done
Affichage d’une page web en plein écran. Le Kindle dispose d’un « navigateur expérimental » caché dans ses menus. Ce navigateur WebKit rudimentaire est capable d’afficher des pages HTML, ce qui est parfait pour créer un dashboard personnalisé. En revanche, il n’a pas de mode plein écran officiel et son interface minimale (barre d’adresse, statut Wi-Fi, etc.) occupe une partie de l’écran. La solution trouvée : par script, cacher l’interface du navigateur après le chargement de la page. On peut en ligne de commande appeler une fonction qui trace du texte sur l'écran. Ce n'est pas parfait, mais avec les bonnes positions, je peux effacer la partie qui ne m'intéresse pas. J'en ai profité pour afficher TODO en ASCII art. Ce n'est pas parfait, mais toute amélioration aurait demandé d'installer des modules supplémentaires et revenir au plan B.
Second script exécuté en tâche de fond en boucle sur le Kindle
#!/bin/sh
echo "coucou2" > /mnt/us/a_log_v2_routine_2_init.txt
sleep 90
echo "coucou2" > /mnt/us/a_log_V2_routine_2_lance.txt
while true; do
eips 0 0 " "
eips 0 1 " |_ _|/ _ /| / / _ / "
eips 0 2 " --- | | | (_) | |) | (_) | --- "
eips 0 3 " |_| ___/|___/ ___/ "
eips 0 4 " "
sleep 120
done
Pour rendre le tout viable sur la durée, quelques compromis ont été faits. Initialement, le plan était de couper le Wi-Fi entre deux rafraîchissements de la page pour économiser encore plus d’énergie, voire de mettre le Kindle en veille profonde et le réveiller via un timer. Malheureusement, aucune de ces solutions n’a fonctionné : il n’existe pas de réveil automatique depuis la veille sur ce modèle, et désactiver le Wi-Fi faisait planter le navigateur (qui ne supporte visiblement pas de perdre la connexion en cours de route). Finalement, le Kindle reste connecté en Wi-Fi en permanence et ne dort jamais... ce qui n’est pas si dramatique, car la consommation reste très faible. L’appareil étant branché sur secteur en continu, après quelques calcul (avec chatGPT) le coût énergétique semble revenir à seulement quelques euros par an, ce qui reste dans l'objectif de départ. Par ailleurs, le système s’est montré remarquablement stable : aucune fuite de mémoire à l’horizon, le Kindle peut tourner plusieurs semaines d’affilée sans broncher.
Avoir du hardware, c’est bien, mais il fallait maintenant le contenu à afficher. L’objectif du dashboard est de montrer les tâches et les événements familiaux à venir. Plutôt que de développer une application Web de zéro, le choix s’est porté sur une solution existante, légère et gratuite : MyTinyTodo. Il s’agit d’une petite application web (PHP/MySQL) permettant de gérer des listes de tâches. Elle offre une interface simple accessible depuis un navigateur sur mobile ou ordinateur, ce qui est parfait pour que les deux parents puissent ajouter éléments et rendez-vous facilement ((utilisé en tant que back-office, un sur iphone l'autre sur android, c'est du web donc pas de dev en plus,
MyTinyTodo ne gère pas un calendrier à proprement parler, mais il permet d’assigner des dates limites (due dates) aux tâches. Je l'ai donc configuré avec deux listes : une liste TODO pour les tâches courantes (courses, tâches ménagères, etc.), et une liste Événements pour tout ce qui est daté (par exemple "Pédiatre – 11h mercredi 10" avec la date de l’événement renseignée). Grâce à un accès direct à la base de données MySQL, le script qui génère la page du Kindle peut facilement récupérer d’un côté la liste des tâches à faire et de l’autre les prochains événements à venir.
Cette approche présente l’avantage de la simplicité : nul besoin de coder une interface d’édition dédiée ni de développer une API complexe. Le Kindle se contente d’afficher une page web générée à partir de ces données. En pratique, un petit serveur maison génère régulièrement la page HTML du dashboard en allant lire la base de données de MyTinyTodo. Notons que MyTinyTodo n’offre pas la notion d’événements sur plusieurs jours (par exemple des vacances du 1er au 15 du mois), mais pour un usage familial simple cela n’a pas posé problème. Le choix d’une application existante a fait gagner un temps précieux et assure que chacun peut mettre à jour les infos via une interface conviviale, sans avoir à toucher au Kindle lui-même.
Lien vers mytinytodo https://www.mytinytodo.net/
Il restait à concevoir la présentation visuelle du tableau de bord, en tenant compte des contraintes techniques de la liseuse. Le Kindle 4 de 2012 affiche en 600 × 800 pixels, en niveaux de gris uniquement. Le navigateur ne supporte qu’un sous-ensemble de HTML/CSS/JS (à peine 55 points sur 555 au test HTML5 selon les forums). Exit les images lourdes, le design sophistiqué ou les animations : il faut du sobre et efficace.
Le cœur du dashboard est une page web simple générée dynamiquement. Par sécurité, elle est intégrée dans une iframe qui se recharge toutes les deux heures (le rechargement périodique intégré directement dans la page dashboard avait tendance à bloquer en cas de perte de connexion, le conteneur externe permet de réinitialiser proprement la session de temps en temps). En clair, toutes les deux heures le Kindle rafraîchit la page pour afficher des données à jour, ce qui est suffisant pour un usage quotidien.
Choix de design et informations affichées. La première version du tableau de bord misait sur la lisibilité de loin : de gros textes pour les tâches et les rendez-vous. Mais à l’usage, ce n’était ni esthétique ni vraiment utile – on ne lit pas son agenda familial à 5 mètres de distance. Un réagencement s’est imposé pour enrichir le contenu et le rendre plus attrayant. Deux mini-calendriers (le mois en cours et le suivant) ont été ajoutés, afin de visualiser d’un coup d’œil les jours avec un événement prévu. Lorsqu’une tâche datée ou un rendez-vous est programmé à une date précise, le jour correspondant apparaît en surbrillance sur le calendrier (fond noir et texte clair par exemple). Cela permet de repérer facilement les prochaines échéances sur les semaines à venir. La date du jour et le jour de la semaine sont bien mis en avant en tête d’écran. Un petit encart « météo » bonus que j'ai ajouté vers la fin "qui permet d'éviter de regarder son téléphone le matin pour choisir les habits des enfants."
Une touche d’IA dans la todo list. L’élément le plus original est sans doute la manière dont la liste de tâches (todo) est affichée. Plutôt que de simplement lister les 10 ou 20 tâches en cours (ce qui serait illisible sur 6 pouces), j'ai choisi de résumer intelligemment les tâches. Pour ce faire, le système envoie toutes les tâches non terminées à GPT-4 en lui demandant de les compiler en un court paragraphe. L’assistant génère alors un texte concis tenant en quelques lignes, qui regroupe les tâches par thèmes et les présente de façon humoristique, comme si le tableau de bord avait sa propre personnalité. Par exemple, au lieu d’afficher : "acheter du lait, acheter des œufs, racheter des couches, changer l’ampoule", l’IA pourrait produire un message du style : « Liste de corvées : Pensez à ravitailler le frigo (lait, œufs) Cela apporte une touche ludique tout en gardant le caractère informatif. Techniquement, cette intégration de GPT-4 se fait via l’API d’OpenAI : le serveur qui génère la page envoie le prompt avec la liste des tâches, reçoit la réponse de l’IA, puis l’insère dans le HTML envoyé au Kindle. Le résultat est un dashboard vivant et un peu espiègle, qui donne "envie" d’être lu chaque matin.
Après de nombreuses soirées de labeur (environ 30 heures du moment où le Kindle a été récupéré jusqu’à la version finale), le projet de tableau de bord familial e-ink est terminé et répond au besoin initial sans gros compromis. L’appareil trône désormais dans la maison
Points positifs : Le résultat final est entièrement fonctionnel, pratique au quotidien et économique (moins de 50 € tout compris). Il centralise efficacement l’organisation familiale tout en recyclant un appareil obsolète. Ce projet m'a aussi permis de mieux comprendre les mécanismes derrière les hacks, une expérience plutôt cool.
Points négatifs : La route pour en arriver là a été semée d’embûches. Le mur d’apprentissage technique était élevé, et il a fallu une bonne dose d’acharnement pour franchir chaque étape, du jailbreak capricieux aux subtilités du navigateur Kindle. Par ailleurs il n’a pas été possible d’implémenter toutes les optimisations imaginées au départ, comme la gestion fine de la veille ou du Wi-Fi, faute de compatibilité avec le Kindle 4. Enfin, le temps investi est conséquent pour un objet de ce type
Petit Tips :
Je n'avais pas encore abordé la question de la présentation et de son support. Je le fais ici. Pendant le développement, le Kindle reposait sur un support en bois IKEA, et tenait deux jours sans recharge, suffisant pour les tests. J’avais percé le support pour y faire passer un câble micro-USB coudé, pensant le laisser en usage fixe (visible sur les photos). Mais à l’usage, j’ai réalisé qu’on perdait un aspect essentiel : sa mobilité. Il était en fait très pratique de l’attraper pour l’utiliser sur le canapé, comme support d’organisation. Prochaine étape : un support magnétique. On trouve des kits micro-USB aimantés à 5 € sur AliExpress, parfaits pour redonner cette souplesse.
Vous avez aimé ? christophe.coniglio@gmail.com