2 pontos por GN⁺ 2024-08-05 | 1 comentários | Compartilhar no WhatsApp
  • Foi implementada uma demonstração de monitor e-ink a 3,5 fps capturando, transmitindo e exibindo a tela do macOS em um Kindle Paperwhite 3
  • No Kindle, há um servidor listener em Go na porta 8000 para receber imagens, e o JPG recebido é desenhado na tela com o utilitário embutido eips
  • No macOS, screencapture, ImageMagick e netcat são combinados para fazer a captura de tela, a conversão e a transmissão via usbnet
  • Como a estrutura envia o JPG inteiro a cada frame, há muito desperdício de transferência em telas com pouca mudança, como editores de texto, e existe bastante espaço para melhorias
  • Mostra que é possível criar rapidamente um experimento de monitor auxiliar e-ink apenas combinando ferramentas existentes, sem implementar um codec separado ou VNC

Jailbreak e obtenção de shell root

  • O primeiro passo é fazer jailbreak no Kindle e obter acesso a um shell root de alguma forma
  • Materiais relacionados podem ser encontrados em mobileread.com, e é possível seguir as instruções da thread do LanguageBreak
  • O autor não seguiu exatamente as instruções do LanguageBreak, mas aproveitou bem o repositório GitHub do LanguageBreak para depuração
  • Mais importante do que o método de jailbreak em si é conseguir um shell root no Kindle

Servidor listener no Kindle e saída com eips

  • No lado do Kindle, foi escrito um programa em Go que recebe arquivos na porta 8000
  • O listener salva o JPG recebido e depois chama o utilitário embutido de saída de tela do Kindle, o eips
  • Fluxo de exemplo:
    • O programa em Go recebe um arquivo JPG
    • Salva em /tmp/img.jpg
    • Exibe a imagem na tela com o comando abaixo
eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
  • Esse comando exibe a imagem com partial update
  • O full update não deu bons resultados, e o significado das flags do eips pode ser visto na wiki do eips
  • Antes do primeiro frame, é possível limpar a tela com eips -c
  • O código-fonte em Go se perdeu, mas era um código simples com menos de 30 linhas

Captura de tela no macOS e conversão de imagem

  • No macOS, a tela é capturada repetidamente com screencapture e salva como arquivo PNG
  • A imagem capturada é rotacionada, redimensionada e convertida para escala de cinza com ImageMagick para se ajustar à tela do Kindle
  • O JPG convertido é enviado ao servidor listener do Kindle via usbnet usando netcat
/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 captura a tela e salva em /tmp/orig.png
  • convert gira a imagem em 270 graus, redimensiona para 810x1448 e a converte em um JPG de escala de cinza de 8 bits e 256 cores
  • nc envia o /tmp/gray.jpg convertido para 192.168.15.244:8000
  • A resolução deve ser ajustada de acordo com o modelo de Kindle em uso, e a porta também precisa corresponder à configuração do servidor listener no Kindle

Limites de desempenho e usabilidade

  • Esta implementação foi um hack rápido feito por diversão na noite anterior, e ainda há bastante espaço para melhorar tanto desempenho quanto usabilidade
  • Enviar o arquivo JPG inteiro a cada frame é bastante ineficiente
  • Entre frames consecutivos, a maior parte das mudanças tende a ser pequena e provavelmente fácil de comprimir
    • Isso pode ficar ainda mais evidente em usos como editores de texto, em que só partes da tela mudam
  • Mesmo sem criar do zero um codec como h.264 ou um protocolo como VNC, parece possível melhorar bastante rapidamente apenas com ferramentas já existentes

Materiais de referência

1 comentários

 
GN⁺ 2024-08-05
Comentários do Hacker News
  • Se tivesse compartilhado como fez isso e publicado em algum lugar que não fosse uma plataforma de textos curtos, teria sido bem mais interessante

    • Estou escrevendo um GitHub gist rapidinho agora e vou colocar o link aqui em alguns minutos
      Edit: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
    • Eu teria sido mais ríspido, mas isso foi expresso de forma bem construtiva. Eu realmente odeio textões no X/Twitter
      Para quem não conhece, se você responder a um tweet com @threadreaderapp unroll, recebe um documento reorganizado. O bot responde em privado só para você depois de terminar de expandir a thread
    • Acho interessante considerar o HN como uma plataforma de textos curtos
  • Já fiz um projeto parecido com entrada HDMI
    https://hackaday.com/2021/01/08/old-kindle-shows-hdmi-video-...
    Então criei o OK Monitor: https://barwap.com/projects/okmonitor/

    • Só para constar, se existisse uma versão pronta de prateleira que simplesmente funcionasse, eu pagaria para comprar
      Não acho que isso tenha viabilidade comercial. Parece algo que geraria de alguns milhares a algumas dezenas de milhares de dólares em receita, então, independentemente da margem, seria difícil recuperar o tempo ou o custo investido. Ainda assim, às vezes vejo projetos de hobby seguirem por esse caminho por causa do impacto
      Seria legal ter um display e-ink sem fio para computador e, idealmente, no formato de um dongle USB-C que recebesse vídeo e energia juntos. HDMI + alimentação por USB também serviria
  • Nos últimos dias testei Android + Kaleido3 em um dispositivo de uso geral e também usei o Termux-X11
    O Kaleido3 é bastante utilizável. Graças às formas de onda mais recentes e ao algoritmo de dithering correto, dá até para assistir vídeos com concessões limitadas, e a taxa de quadros é alta. Também foi totalmente viável para programar, e o compilador e o interpretador vieram do Termux
    Com o Termux-X11, dá para rodar Linux de desktop nativamente em um dispositivo Android. Assim, em vez de usar e-ink como parte de um dispositivo monitor, você pode aproveitá-lo diretamente como uma tela de computador ativa embutida no tablet

  • Se alguém quiser fazer jailbreak no Kindle, é melhor começar pelo fórum mobileread

  • Será que os displays e-ink algum dia vão ficar baratos? Parece que as patentes básicas já deveriam estar perto de expirar

    • Mesmo os produtos concorrentes continuam bem caros. Pelo que sei, o display de papel eletrônico que uso no meu calendário digital não é da E Ink, mas custa cerca de 50 euros comprado avulso: https://www.waveshare.com/7.5inch-e-paper-hat.htm
      É o maior fator de custo no meu calendário e basicamente define a faixa de preço: https://shop.invisible-computers.com/products/invisible-cale...
    • https://news.ycombinator.com/item?id=26143779
    • Patentes não têm muito a ver com isso. A E Ink é cara porque é um produto de nicho de pequena escala. Telas LCD são produzidas na casa dos bilhões por trimestre, e é bem provável que cada pessoa tenha vários dispositivos com LCD
      A maior parte do que a E Ink faz pode ser substituída por LCD e, como custa mais caro que LCD, há poucos motivos para usá-la
      “Patentes” chega perto de ser uma teoria da conspiração repetida sem base clara. Há produtos concorrentes à E Ink, como as telas DES/Display Electronic Slurry. Se a E Ink corp estivesse cobrando preços abusivos, a GoodDisplay já teria tomado o mercado
      Para ser exato, não é teoria da conspiração dizer que existem patentes da E Ink. Algumas expiraram, e a E Ink corp continua inovando e registrando novas patentes. Também há muitas patentes de LCD. A parte conspiratória é afirmar que as patentes causam aumentos de preço e preços altos e, por isso, impedem a adoção da tecnologia
  • Por que fazer jailbreak afinal? Não daria para fazer streaming de screenshots pelo navegador embutido do Kindle?

    • Isso é muito mais simples. Só que todos os frames teriam de passar por rede → DOM → memória do app do navegador → framebuffer, então tenho dúvidas se o navegador é forte o bastante para aguentar uma taxa de quadros aceitável
      O navegador do Kindle mal consegue acompanhar a Kindle Store ou o Goodreads, mas adoraria estar errado. Isso permitiria fazer algo muito mais facilmente em Kindles novos, no estado padrão
  • O que foi colocado no GitHub: “infelizmente eu perdi o código-fonte em Go

    • Em seguida disse: “mesmo assim era bem simples, com menos de 30 linhas
      Se era tão simples assim, é até estranho não ter reescrito na hora e adicionado ao GitHub
  • Para fazer isso com facilidade, basta usar um Boox reader com o app Superdisplay

  • A pergunta mais importante não foi respondida: valeu a pena?

    • Ainda é cedo para dizer. Não é útil como monitor principal, mas é excelente como monitor secundário
      No estado atual, a taxa de quadros é boa, mas a latência é horrível. Então a experiência de digitação é ruim, mas há muitos usos que não exigem digitação
      Mesmo em casos como uma janela de chat, em que o feedback de digitação com baixa latência é importante, dá para deixar a caixa de texto em um monitor LCD e mostrar no Kindle só o histórico de chat, que é mais estático. Ainda falta trabalho para chegar lá, mas por enquanto é um bom ponto de partida