2 points par GN⁺ 2024-08-05 | 1 commentaires | Partager sur WhatsApp
  • Une démo de moniteur e-ink à 3,5 fps a été réalisée sur un Kindle Paperwhite 3 en capturant l’écran de macOS, puis en le transmettant et en l’affichant
  • Sur le Kindle, un serveur d’écoute en Go reçoit les images sur le port 8000, puis affiche le JPG reçu à l’écran avec l’utilitaire intégré eips
  • Sur macOS, screencapture, ImageMagick et netcat sont combinés pour gérer la capture d’écran, la conversion et la transmission via usbnet
  • Comme chaque frame envoie un JPG complet, il y a beaucoup de gaspillage de transfert sur les écrans qui changent peu, comme un éditeur de texte, et de nombreuses pistes d’amélioration
  • Cela montre qu’il est possible de prototyper rapidement un moniteur auxiliaire e-ink avec une simple combinaison d’outils existants, sans codec dédié ni implémentation VNC

Jailbreak et obtention d’un shell root

  • La première étape consiste à jailbreaker le Kindle afin d’accéder, d’une manière ou d’une autre, à un shell root
  • Des ressources sur le sujet sont disponibles sur mobileread.com, et l’on peut se référer aux instructions du fil LanguageBreak
  • L’auteur de l’implémentation n’a pas suivi les instructions de LanguageBreak à la lettre, mais a trouvé le dépôt GitHub de LanguageBreak utile pour le débogage
  • Le point important n’est pas tant la méthode de jailbreak elle-même que le fait d’obtenir un shell root sur le Kindle

Serveur d’écoute Kindle et sortie eips

  • Côté Kindle, un programme Go a été écrit pour recevoir des fichiers sur le port 8000
  • Le listener enregistre le JPG reçu, puis appelle eips, l’utilitaire intégré du Kindle pour l’affichage à l’écran
  • Exemple de flux :
    • Le programme Go reçoit un fichier JPG
    • Il l’enregistre dans /tmp/img.jpg
    • Il l’affiche à l’écran avec la commande suivante
eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
  • Cette commande affiche l’image via une mise à jour partielle
  • La mise à jour complète ne donnait pas de bons résultats, et la signification des options de eips peut être consultée dans le wiki eips
  • Avant la première frame, on peut effacer l’écran avec eips -c
  • Le code source Go a été perdu, mais il s’agissait d’un code simple de moins de 30 lignes

Capture d’écran macOS et conversion d’image

  • Sur macOS, l’écran est capturé en boucle avec screencapture et enregistré sous forme de fichier PNG
  • L’image capturée est tournée, redimensionnée et convertie en niveaux de gris avec ImageMagick pour correspondre à l’écran du Kindle
  • Le JPG converti est envoyé avec netcat au serveur d’écoute du Kindle via usbnet
/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 capture l’écran dans /tmp/orig.png
  • convert applique une rotation de 270 degrés, redimensionne l’image en 810x1448, puis la convertit en JPG 8 bits en niveaux de gris avec 256 couleurs
  • nc envoie le fichier converti /tmp/gray.jpg vers 192.168.15.244:8000
  • La résolution doit être adaptée au modèle de Kindle utilisé, et le port doit correspondre à la configuration du serveur d’écoute sur le Kindle

Limites de performance et d’utilisabilité

  • Cette implémentation est un hack réalisé rapidement la veille au soir pour s’amuser, et les performances comme l’utilisabilité peuvent largement être améliorées
  • La méthode consistant à envoyer un fichier JPG complet à chaque frame est très coûteuse
  • La quantité de changements entre deux frames consécutives est généralement faible et probablement facile à compresser
    • Cette caractéristique peut être particulièrement marquée dans des usages où seule une partie de l’écran change, comme dans un éditeur de texte
  • Même sans créer un codec comme h.264 ni un protocole comme VNC, l’auteur estime qu’il devrait être possible d’améliorer rapidement le système avec des outils déjà existants

Ressources de référence

1 commentaires

 
GN⁺ 2024-08-05
Avis sur Hacker News
  • Cela aurait été beaucoup plus intéressant s’il avait expliqué comment il s’y était pris, et publié ça ailleurs que sur une plateforme de billets courts

    • Je suis en train de rédiger rapidement un GitHub gist, je posterai le lien ici dans quelques minutes
      Édit : https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
    • J’aurais formulé ça de manière plus rude, mais c’est plutôt constructif. Je déteste vraiment les longs textes sur X/Twitter
      Pour celles et ceux qui ne connaissent pas : si vous répondez @threadreaderapp unroll à un tweet, vous recevez le document reconstitué. Une fois le déroulage terminé, le bot ne répond directement qu’à vous
    • C’est intéressant de voir HN comme une plateforme de billets courts
  • J’ai fait quelque chose de similaire avec une entrée HDMI
    https://hackaday.com/2021/01/08/old-kindle-shows-hdmi-video-...
    C’est comme ça que j’ai créé OK Monitor : https://barwap.com/projects/okmonitor/

    • À titre indicatif, s’il existait une version prête à l’emploi qui fonctionne tout de suite, je serais prêt à payer pour l’acheter
      Je ne pense pas que ce soit viable commercialement. Le chiffre d’affaires serait probablement de l’ordre de quelques milliers à quelques dizaines de milliers de dollars, donc quel que soit le niveau de marge, il serait difficile de récupérer plus que le temps et les coûts investis. Cela dit, dans des projets hobby, j’ai déjà vu ce genre d’approche adoptée pour avoir de l’impact
      J’aimerais avoir un écran e-ink sans fil pour ordinateur, idéalement sous forme de dongle USB-C recevant à la fois la vidéo et l’alimentation. HDMI + alimentation USB conviendrait aussi
  • Ces derniers jours, j’ai testé Android + Kaleido3 comme appareil polyvalent, et j’ai aussi essayé Termux-X11
    Kaleido3 est plutôt utilisable. Grâce aux formes d’onde récentes et à un algorithme de dithering correct, on peut même regarder des vidéos avec seulement des compromis limités, et le taux de rafraîchissement est élevé. Coder était tout à fait possible aussi, les compilateurs et interpréteurs étant fournis par Termux
    Avec Termux-X11, on peut lancer un Linux de bureau nativement sur un appareil Android. Il n’est donc pas nécessaire d’utiliser l’e-ink comme partie d’un dispositif de moniteur : on peut aussi s’en servir directement comme écran d’ordinateur actif intégré à la tablette

  • Si vous voulez jailbreaker un Kindle, le mieux est de commencer par les forums mobileread

  • Les écrans e-ink deviendront-ils un jour bon marché ? Il me semble que les brevets de base devraient bientôt expirer

    • Les produits concurrents restent eux aussi assez chers. L’écran e-paper que j’utilise pour mon calendrier numérique n’est, à ma connaissance, pas un produit E Ink, mais à l’unité il coûte environ 50 euros : https://www.waveshare.com/7.5inch-e-paper-hat.htm
      C’est le plus gros poste de coût de mon calendrier, et il impose pratiquement à lui seul la gamme de prix : https://shop.invisible-computers.com/products/invisible-cale...
    • https://news.ycombinator.com/item?id=26143779
    • Les brevets n’ont pas grand-chose à voir avec ça. Si E Ink est cher, c’est parce que c’est un produit de niche à faible volume. Des milliards d’écrans LCD sont produits chaque trimestre, et il est probable que chacun possède plusieurs appareils équipés d’un LCD
      La plupart des usages d’E Ink peuvent être remplacés par du LCD, et comme c’est plus cher que le LCD, peu d’acteurs choisissent de l’utiliser
      L’argument des « brevets » ressemble surtout à une théorie du complot sans base solide. E Ink a des concurrents, par exemple les écrans DES/Display Electronic Slurry. Si E Ink Corp pratiquait des prix abusifs, GoodDisplay aurait déjà conquis le marché
      Pour être précis, l’existence de brevets E Ink n’est pas une théorie du complot. Certains ont expiré, et E Ink Corp continue d’innover et de déposer de nouveaux brevets. Il existe aussi énormément de brevets sur les LCD. La partie conspirationniste, c’est l’idée que les brevets provoquent la hausse et le maintien de prix élevés, et empêchent donc la diffusion de la technologie
  • Pourquoi aller jusqu’au jailbreak ? Il suffirait de faire du streaming de captures d’écran du bureau dans le navigateur intégré du Kindle, non ?

    • Ce serait effectivement beaucoup plus simple. Mais chaque frame devrait passer par réseau → DOM → mémoire de l’application navigateur → framebuffer, donc je doute que le navigateur soit assez puissant pour gérer un taux de rafraîchissement utilisable
      Le navigateur du Kindle a déjà du mal avec le Kindle Store ou Goodreads, mais j’aimerais qu’on me prouve le contraire. Cela permettrait de mettre en place quelque chose de beaucoup plus facilement, sans modification, même sur les nouveaux Kindle
  • D’après ce qui est sur GitHub : « malheureusement, j’ai perdu le code source Go »

    • Il ajoute ensuite : « mais c’était assez simple, moins de 30 lignes »
      Si c’était aussi simple, il est plutôt étrange de ne pas l’avoir réécrit immédiatement pour l’ajouter à GitHub
  • Pour faire ça facilement, il suffit d’utiliser l’app Superdisplay sur une liseuse Boox

  • La question la plus importante n’a pas été traitée : est-ce que ça en valait la peine ?

    • Il est encore trop tôt pour le dire. Ce n’est pas utile comme écran principal, mais c’est excellent comme écran secondaire
      Dans sa forme actuelle, le taux de rafraîchissement est bon, mais la latence est catastrophique. L’expérience de frappe est donc mauvaise, mais il existe beaucoup d’usages qui ne nécessitent pas de taper
      Même dans les cas où le retour de frappe à faible latence est important, comme une fenêtre de chat, on peut garder le champ de saisie sur un écran LCD et afficher seulement l’historique de conversation, essentiellement statique, sur le Kindle. Il reste du travail pour en arriver là, mais pour l’instant c’est un bon point de départ