2P by GN⁺ | ★ favorite | 댓글 1개
  • Kindle Paperwhite 3에서 macOS 화면을 캡처해 전송·표시하는 방식으로 3.5fps e-ink 모니터 데모를 구현함
  • Kindle에는 포트 8000에서 이미지를 받는 Go 리스너 서버를 두고, 수신한 JPG를 내장 유틸리티 eips로 화면에 그림
  • macOS에서는 screencapture, ImageMagick, netcat을 조합해 화면 캡처·변환·usbnet 전송을 처리함
  • 매 프레임 전체 JPG를 보내는 구조라 텍스트 편집기처럼 변화가 적은 화면에서는 전송 낭비가 크고 개선 여지가 많음
  • 별도 코덱이나 VNC 구현 없이도 기존 도구 조합만으로 e-ink 보조 모니터 실험을 빠르게 만들 수 있음을 보여줌

탈옥과 루트 셸 확보

  • 첫 단계는 Kindle을 탈옥해 어떤 방식으로든 root shell에 접근하는 것임
  • 관련 자료는 mobileread.com에서 찾을 수 있으며, LanguageBreak thread의 지침을 참고할 수 있음
  • 구현자는 LanguageBreak 지침을 그대로 따르지는 않았지만, LanguageBreak GitHub 저장소를 디버깅에 유용하게 활용함
  • 탈옥 방식 자체보다 중요한 조건은 Kindle에서 루트 셸을 얻는 것임

Kindle 리스너 서버와 eips 출력

  • Kindle 쪽에는 포트 8000에서 파일을 받는 Go 프로그램을 작성함
  • 리스너는 수신한 JPG를 저장한 뒤 Kindle 내장 화면 출력 유틸리티인 eips 를 호출함
  • 예시 흐름:
    • Go 프로그램이 JPG 파일을 수신함
    • /tmp/img.jpg에 저장함
    • 다음 명령으로 화면에 그림
eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
  • 이 명령은 partial update로 이미지를 표시함
  • full update는 결과가 좋지 않았고, eips 플래그 의미는 eips wiki에서 확인할 수 있음
  • 첫 프레임 전에는 eips -c로 화면을 지울 수 있음
  • Go 소스 코드는 유실됐지만, 30줄 미만의 단순한 코드였음

macOS 화면 캡처와 이미지 변환

  • macOS에서는 screencapture로 화면을 반복 캡처해 PNG 파일로 저장함
  • 캡처 이미지는 ImageMagick으로 Kindle 화면에 맞게 회전·리사이즈·그레이스케일 변환함
  • 변환된 JPG는 netcat으로 usbnet을 통해 Kindle 리스너 서버로 전송함
/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는 화면을 /tmp/orig.png로 캡처함
  • convert는 이미지를 270도 회전하고 810x1448로 리사이즈한 뒤, 8비트 그레이스케일·256색 JPG로 변환함
  • nc는 변환된 /tmp/gray.jpg192.168.15.244:8000으로 전송함
  • 해상도는 사용하는 Kindle 장치에 맞춰 바꿔야 하며, 포트도 Kindle 리스너 서버 설정과 일치해야 함

성능과 사용성의 한계

  • 이 구현은 전날 밤 재미로 빠르게 만든 해킹이며, 성능과 사용성 모두 개선 여지가 큼
  • 매 프레임마다 전체 JPG 파일을 보내는 방식은 낭비가 큼
  • 연속 프레임 사이의 변화량은 대부분 작고 압축하기 쉬울 가능성이 있음
    • 특히 텍스트 편집기처럼 화면 일부만 바뀌는 사용에서는 이 특성이 더 두드러질 수 있음
  • h.264 같은 코덱이나 VNC 같은 프로토콜을 새로 만들지 않아도, 이미 있는 도구만으로 빠르게 개선할 수 있을 것으로 봄

참고 자료

댓글과 토론

Hacker News 의견들
  • 어떻게 했는지 공유하고, 짧은 글용 플랫폼이 아닌 곳에 올렸다면 훨씬 더 흥미로웠을 듯함

    • 지금 빠르게 GitHub gist를 쓰는 중이고, 몇 분 안에 여기 링크를 올리겠음
      수정: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
    • 나였으면 더 거칠게 말했을 텐데, 꽤 건설적으로 표현한 듯함. X/Twitter에 긴 글을 올리는 걸 정말 싫어함
      모르는 사람을 위해 덧붙이면, 트윗에 @threadreaderapp unroll이라고 답글을 달면 재구성된 문서를 받을 수 있음. 봇은 펼치기가 끝난 뒤 본인에게만 직접 답글을 줌
    • HN을 짧은 글용 플랫폼으로 본다는 점이 흥미로움
  • 비슷한 프로젝트로 HDMI 입력을 해봤음
    https://hackaday.com/2021/01/08/old-kindle-shows-hdmi-video-...
    그래서 OK Monitor를 만들었음: https://barwap.com/projects/okmonitor/

    • 참고로, 그냥 바로 동작하는 기성품 버전이 있다면 비용을 내고 사고 싶음
      사업성이 있다고 보진 않음. 매출이 수천~수만 달러 수준일 것 같아서 이윤율을 어떻게 잡아도 들인 시간이나 비용 이상을 회수하긴 어려울 듯함. 그래도 취미 프로젝트에서는 영향력을 위해 그런 식으로 진행되는 경우를 가끔 봤음
      컴퓨터용 무선 전자잉크 디스플레이가 있으면 좋겠고, 이상적으로는 USB-C 동글로 영상과 전원을 같이 받는 형태면 좋겠음. HDMI + USB 전원이어도 괜찮음
  • 최근 며칠 동안 범용 기기로 Android + Kaleido3를 테스트했고, Termux-X11도 써봤음
    Kaleido3는 꽤 쓸 만함. 최신 파형과 올바른 디더링 알고리즘 덕분에 제한적인 타협만으로 영상 시청도 가능하고 프레임률도 높음. 코딩도 충분히 가능했으며, 컴파일러와 인터프리터는 Termux가 제공했음
    Termux-X11을 쓰면 Android 기기에서 데스크톱 Linux를 네이티브로 띄울 수 있음. 그래서 전자잉크를 모니터 장치의 일부로 쓸 필요 없이, 태블릿에 내장된 능동 컴퓨터 화면으로 바로 활용할 수도 있음

  • Kindle을 탈옥하려는 사람이라면 mobileread 포럼에서 시작하는 게 좋음

  • 전자잉크 디스플레이는 언젠가 싸질 수 있을까? 이제 기본 특허들은 만료될 때가 된 것 같은데

    • 경쟁 제품도 여전히 꽤 비쌈. 내 디지털 달력에 쓰는 전자종이 디스플레이는 알기로는 E Ink 제품이 아니지만, 낱개로 사면 약 50유로임: https://www.waveshare.com/7.5inch-e-paper-hat.htm
      내 달력에서 가장 큰 원가 요인이고, 사실상 가격대를 강제로 결정함: https://shop.invisible-computers.com/products/invisible-cale...
    • https://news.ycombinator.com/item?id=26143779
    • 특허는 별 상관없음. E Ink가 비싼 이유는 규모가 작은 틈새 제품이기 때문임. LCD 화면은 분기마다 수십억 개씩 생산되고, 각자 LCD가 들어간 기기를 여러 대씩 갖고 있을 가능성이 큼
      E Ink가 하는 일 대부분은 LCD로 대체 가능하고, LCD보다 비싸니 굳이 쓰려는 곳이 적음
      “특허”는 뚜렷한 근거 없이 나오는 음모론에 가까움. E Ink에는 경쟁 제품도 있음, 예를 들면 DES/Display Electronic Slurry 화면이 있음. E Ink corp가 바가지를 씌우고 있었다면 GoodDisplay가 이미 시장을 빼앗았을 것임
      정확히 말하면 E Ink 특허가 존재한다는 게 음모론은 아님. 일부는 만료됐고, E Ink corp도 혁신하면서 새 특허를 계속 등록함. LCD 특허도 엄청 많음. 음모론인 부분은 특허 때문에 가격 인상과 높은 가격이 생기고, 그래서 기술 보급이 막힌다는 주장임
  • 왜 탈옥까지 함? Kindle 내장 브라우저로 데스크톱 스크린샷 스트리밍을 하면 되지 않나

    • 그게 훨씬 단순하긴 함. 다만 모든 프레임이 네트워크 → DOM → 브라우저 앱 메모리 → 프레임버퍼를 거쳐야 해서, 브라우저가 쓸 만한 프레임률을 감당할 만큼 강력한지는 회의적임
      Kindle 브라우저는 Kindle store나 Goodreads도 겨우 따라가는 수준이지만, 반대로 증명되면 좋겠음. 그러면 새 Kindle에서도 기본 상태로 훨씬 쉽게 구현할 수 있으니까
  • GitHub에 올라온 내용: “아쉽게도 Go 소스 코드를 잃어버렸다”

    • 이어서 “그래도 꽤 단순했고, 30줄 미만이었다”고 했음
      그렇게 단순했다면 바로 다시 작성해서 GitHub에 추가하지 못한 게 오히려 이상함
  • 이걸 쉽게 하려면 Boox 리더에 Superdisplay 앱을 쓰면 됨

  • 가장 중요한 질문에 답하지 않았음: 해볼 만한 가치가 있었나?

    • 아직 판단하긴 이름. 주 모니터로는 유용하지 않지만, 보조 모니터로는 훌륭함
      현재 형태에서는 프레임률은 좋지만 지연 시간이 끔찍함. 그래서 타이핑 경험은 나쁘지만, 타이핑이 필요 없는 용도는 많음
      채팅 창처럼 낮은 지연의 타이핑 피드백이 중요한 경우에도 입력 텍스트 박스는 LCD 모니터에 두고, 대부분 정적인 채팅 기록만 Kindle에 띄우면 됨. 거기까지 가려면 작업이 더 필요하지만, 지금으로서는 좋은 출발점임