5P by GN⁺ 23시간전 | ★ favorite | 댓글 2개
  • 구형 Kindle Touch 4세대를 개조해 NJ Transit 버스 도착 시간을 1분마다 갱신하는 전자잉크 대시보드로 전환
  • Jailbreak, KUAL, MRPI, SSH 설정을 통해 커스텀 앱 실행 환경을 구축하고, Node 기반 서버에서 이미지를 생성해 Kindle에 표시
  • 서버는 GraphQL API로 버스 데이터를 가져와 HTML로 포맷한 뒤, wkhtmltoimage로 PNG를 생성해 Kindle이 주기적으로 불러옴
  • KUAL 앱을 직접 만들어 메뉴 버튼으로 대시보드를 종료할 수 있게 하고, bash traprtcwake로 전원 관리 및 자동 갱신 제어
  • 약 5일의 배터리 지속시간과 화면 잔상 문제를 개선할 여지가 있으며, 전자잉크 디스플레이의 실시간 정보 활용 가능성을 보여줌

Kindle을 버스 도착 정보 디스플레이로 전환

  • Kindle Touch 4세대를 실시간 버스 도착 정보판으로 개조
    • 1분마다 화면을 새로고침하며, 메뉴 버튼으로 대시보드 모드를 종료 가능
    • 상용 제품 TRMNL과 유사한 기능을 무료로 구현

1. Kindle Jailbreak

  • Kindle의 펌웨어 버전을 확인하고, 해당 버전에 맞는 tar 파일을 다운로드해 Jailbreak 절차 수행
  • 성공 후 KUALMRPI 설치 단계로 진행

2. KUAL 및 MRPI 설치

  • KUAL은 커스텀 앱 런처, MRPI는 앱 설치 도구로 사용
  • 설치 전 Hotfix 설정을 반드시 수행해야 함
  • 설치 후 OTA 업데이트 비활성화로 자동 업데이트 차단

3. SSH 설정

  • USBNetwork 확장을 통해 Kindle에 SSH 접속 가능
  • 외부 블로그 가이드를 참고해 USB 기반 SSH 연결 설정
  • 연결 성공 시 컴퓨터 네트워크 탭에 Kindle이 새 장치로 표시됨

4. 서버 구축 및 이미지 생성

  • NJ Transit GraphQL API를 이용해 버스 도착 정보를 가져옴
    • getBusArrivalsByStopID 쿼리로 노선, 도착 시간, 혼잡도 등 데이터 수집
  • puppeteer 대신 wkhtmltoimage를 사용해 HTML을 PNG로 변환
    • 서버는 3분마다 새 이미지를 생성하고 Kindle이 이를 요청
    • 관련 코드는 GitHub 저장소 kindle-hax/server에 공개
  • Kindle 화면 해상도(예: 600x800)에 맞춰 이미지 회전 및 정렬 조정
    • transform: rotate(90deg) translateX(-100px) translateY(-100px);로 세로 방향 표시 구현

5. KUAL 앱 제작

  • 대시보드 시작/종료 제어를 위한 커스텀 KUAL 확장 생성
    • /mnt/us/extensions/에 폴더 배치 후 KUAL에서 ‘Start dashboard’ 메뉴 표시
  • start.sh 스크립트는 신호 무시(trap '' HUP, trap '' TERM)로 안정적 실행 유지
    • refresh_screen() 함수가 서버 이미지 다운로드 후 eips 명령으로 표시
    • 상단에 날짜, Wi-Fi 상태, 배터리 잔량 표시
  • evtest로 메뉴 버튼 입력(code 102 (Home), value 1) 감지 시 stop.sh 실행
    • 대시보드 종료 및 Kindle UI 재시작 수행

6. 실행 결과 및 개선점

  • 5일간 배터리 지속, 야간 전원 차단 시 2일 연장 가능
  • 화면 잔상(color bleeding) 문제는 완전한 흑백 플래시로 개선 가능성 있음
  • 매일 사용 중이며, 캘린더·날씨·할 일 등 다양한 정보 표시 확장 가능성 확인

저도 최근에 비슷한 작업을 했는데, 위에 URL바를 보는게 거슬리지 않는다면 그냥 웹페이지를 로드해도 됩니다.
킨들은 기본적으로 웹브라우저에서 URL접속이 가능해서 거기서 대시보드를 불러오면 됩니다.
회사에선 킨들로, 집에선 페이퍼 라이트 구세대로 같은 페이지를 로딩하고 있어서 나름 크로스플랫폼 이네요 ㅎㅎ

물론 킨들도 계속 켜져 있는 모드를 위해서는 루팅 또는 비슷한 작업을 해야합니다.
페이퍼라이트는 루팅 까지는 필요없고, adb 연결만 열어주고 거기서 스크린세이버를 끄는 동작을 해야합니다.

Hacker News 의견들
  • 예전에 Kindle 전력 소비 관련 작업을 했던 사람으로서, 가장 큰 전력 소모원은 WiFi 연결이었음
    WiFi가 AP에 주기적으로 응답해야 연결이 끊기지 않기 때문임
    WiFi를 끈 상태에서는 약 700uA, 켠 상태에서는 약 1.5mA 정도였던 것으로 기억함
    페이지 변경 시에는 수백 mA 단위로 전력이 순간적으로 올라갔고, 고스팅 현상을 줄이기 위해 일정 페이지마다 전체 화면 새로고침이 이루어졌음

    • 나는 배터리를 제거하고 Kindle의 USB 단자에서 다이오드를 거쳐 5V를 공급했음
      순간적으로 1.5A 정도를 공급할 수 있는 전원이 필요했는데, 오래된 전원 공급형 USB 허브를 라즈베리파이에 연결해 SSH로 제어하니 WiFi 없이도 수개월간 안정적으로 작동했음
    • 내 RM2는 WiFi를 전혀 연결하지 않는데, 몇 달 동안 충전하지 않아도 됨
      사용 빈도는 한 달에 30회 미만이지만, WiFi가 꺼져 있으면 배터리 효율이 놀라울 정도로 좋음
      Paperwhite Kindle은 아직 개조하지 않았지만, 최소한 잠금 화면 광고는 제거할 예정임
    • WiFi를 꺼두고 새로고침 주기를 2분으로 늘려서 배터리 수명을 테스트해볼 생각임
      이제야 비행기 모드에서 배터리가 오래 가는 이유를 확실히 이해하게 되었음
    • Kindle 주변에 비정질 실리콘 태양전지를 붙이면 5일마다 충전하지 않아도 될지 궁금함
  • 나는 더 단순한 방법을 썼음
    Jailbreak 후 SSH로 접속해 1분마다, 30분마다 실행되는 두 개의 스크립트를 만들었음
    두 스크립트 모두 같은 이미지를 표시하지만, 30분마다 전체 새로고침을 추가함
    라즈베리파이에서 rsync로 이미지를 전송하고, Python 스크립트가 공기질 데이터를 MySQL에서 가져와 이미지를 조합함
    Kindle은 단순히 이미지를 표시하는 역할만 하므로 매우 안정적으로 동작함

    • “더 단순한 방법”이라면서 rsync, Python, MySQL을 언급하는 부분에서 미소가 나왔음
    • 단순히 비트맵을 수신해 표시만 하는 eInk 디스플레이가 있다면 많은 용도에 충분할 것 같음
      TLS 같은 안전한 연결만 지원하면 됨
    • 나도 비슷하게 Kindle을 Jailbreak해서 버스에서 ePub을 읽고, Siri에게 다음 버스를 물어보는 식으로 사용함
    • 복잡한 프레임워크 대신 간단한 스크립트 두 개로 문제를 해결하는 게 정말 만족스러움
  • Kindle 해킹은 정말 재미있는 작업임
    eBay에서 15~20유로면 구형 Kindle을 구할 수 있고, 나도 작년에 같은 실험을 하며 즐거웠음
    자세한 과정은 내 블로그 글에 정리했음

    • AliExpress에서 Xteink4라는 ESP32 기반 e-ink 보드를 살 수 있음
      크기는 작지만 Crosspoint 펌웨어를 올리면 휴대용 e-ink 리더기로 쓸 수 있음
      YouTube 영상, Crosspoint GitHub
    • 리버스 엔지니어링이 부담스럽다면, Raspberry Pi DSI 포트에 꽂는 e-ink 디스플레이도 있음
      가격은 약간 더 비싸지만 Kindle 화면을 재활용한 제품일 수도 있음
    • 다른 사람이 같은 목표를 다른 방식으로 달성한 과정을 보는 게 즐거움
      이 글을 보고 Cloudflare Workers 같은 플랫폼을 더 실험해보고 싶어졌음
    • Jailbreak를 바로 시작할 수 있는지, 아니면 초기 설정 시 Amazon 계정 연결이 필요한지 궁금함
  • 나는 오래된 Kindle을 AI 생성 그림 프레임으로 바꿨음
    몇 시간마다 새 그림이 생성되고, 프롬프트에는 날씨·동물·국가·뉴스 제목 등을 포함할 수 있음
    모든 처리는 집의 ollama + stable-diffusion-webui 서버에서 로컬로 수행됨
    다만 뉴스 기반 그림은 너무 우울해져서, AI에게 긍정적인 톤으로 바꾸도록 지시함
    비 오는 날엔 그림 속에도 비가 내리고, 겨울엔 눈이 오는 식으로 동작함
    배터리도 몇 주씩 지속되고, Online Screensaver extension을 수정해 비행기 모드로 자동 전환되게 했음

    • 음성 인식을 이용해 대화 내용을 그림으로 시각화하는 것도 재미있을 듯함
    • e-ink는 생성형 아트와 묘하게 잘 어울리는 매체임
  • 내가 만든 Kindle 대시보드 버전은 GitHub에 공개되어 있음
    로컬 날씨와 미디어 서버의 음악 정보를 표시함
    화면의 ghosting 문제는 eips -f 명령으로 주기적 전체 새로고침을 하면 해결됨

    • Rust로 작성된 걸 보고 감탄했음
      처음으로 Rust를 배우고 싶다는 생각이 들었음
  • 호주 퀸즐랜드에서는 태양광 e-paper 버스 정류장 안내판을 운영 중임
    Kindle보다 훨씬 크지만 원리는 비슷함
    프로젝트 소개, 시연 영상

  • 이 프로젝트를 보니 SystemSix 프로젝트가 떠올랐음

    • 정말 멋짐. 나도 커스텀 마운트를 만들어보고 싶어졌음
  • 요즘 다들 이런 식으로 Kindle 개조 프로젝트를 하는 것 같음
    나도 K4NT를 개조해 가족 일정표를 표시하는 서버를 만들었음
    AI의 도움을 조금 받았고, Ikea 액자에 3D 프린팅 인서트를 넣고 MagSafe 보조배터리를 부착했음
    5일마다 전원 버튼만 눌러주면 되고, 내부 배터리는 교체 예정임
    유선 연결은 내 환경에서는 불가능했음

  • 네트워크를 새로고침 사이에 꺼두면 배터리 수명이 확실히 늘어남
    나는 밤 10시부터 새벽 6시까지는 업데이트를 막아두었음
    GitHub에는 배터리 절약용 스크립트가 많음
    예전에 Raspberry Pi Zero + 2인치 e-ink로 GTFS 기반 대중교통 표시기를 만든 적도 있음
    Kindle 대시보드 글, Transit Pi 프로젝트

    • 세탁기 남은 시간과 포켓몬 아이콘을 함께 표시하는 대시보드 아이디어가 너무 귀여움
      이런 식의 스마트 가전 시각화는 정말 매력적임
  • 나는 Kindle을 단일 목적 디스플레이로 쓰는 걸 좋아함
    오히려 eInk보다 LCD Kindle Fire를 선호함
    개발자 모드로 전환하면 웹페이지를 계속 띄워두고 광고 없이 사용할 수 있음
    Kindle Fire HD10은 약 40달러면 구할 수 있음

    • Kindle Fire 정보 고마움
      고스팅이 없고 어두운 곳에서도 읽을 수 있는 LCD는 대시보드용으로 훌륭한 업그레이드임