- 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.jpg를 192.168.15.244:8000으로 전송함
- 해상도는 사용하는 Kindle 장치에 맞춰 바꿔야 하며, 포트도 Kindle 리스너 서버 설정과 일치해야 함
성능과 사용성의 한계
- 이 구현은 전날 밤 재미로 빠르게 만든 해킹이며, 성능과 사용성 모두 개선 여지가 큼
- 매 프레임마다 전체 JPG 파일을 보내는 방식은 낭비가 큼
- 연속 프레임 사이의 변화량은 대부분 작고 압축하기 쉬울 가능성이 있음
- 특히 텍스트 편집기처럼 화면 일부만 바뀌는 사용에서는 이 특성이 더 두드러질 수 있음
- h.264 같은 코덱이나 VNC 같은 프로토콜을 새로 만들지 않아도, 이미 있는 도구만으로 빠르게 개선할 수 있을 것으로 봄
참고 자료