오래된 Kindle을 해킹해 버스 도착 시간을 표시하기

2 days ago 4

  • 구형 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) 문제는 완전한 흑백 플래시로 개선 가능성 있음
  • 매일 사용 중이며, 캘린더·날씨·할 일 등 다양한 정보 표시 확장 가능성 확인

Read Entire Article