← На главную

Взлом Kindle Paperwhite для Rust: Slint GUI и код на crates.io

27.05.2026 19:51 · hackernews

Владелец Kindle Paperwhite 7-го поколения взломал устройство, чтобы использовать его как ночные часы, но в итоге решил пойти дальше и запустить на нём Rust. Заодно захотел сделать дашборд для Home Assistant. Для начала нужно было собрать код под Kindle — это ARMv7 с musl libc. Ставить тулчейн прямо на Kindle бессмысленно, поэтому использовали cargo-zigbuild. Zig поставляется с собственным линкером и встроенными заголовками musl для всех архитектур, так что cargo zigbuild --release --target armv7-unknown-linux-musleabihf сработал сразу.

Доступ к шеллу получили через USBNetwork — он поднимает SSH по USB или Wi-Fi. Ключи скопировали в /mnt/us/usbnet/etc/authorized_keys, ssh-copy-id не завёлся. С hello-world всё заработало, но выводить текст по SSH — не дело. Нужен GUI.

Из графических библиотек выбрали Slint — у неё лёгкий software renderer. На Kindle экран e-ink, вывод — через файл /dev/fb0, который memory-map'ится. Slint отдаёт строки через LineBufferProvider с process_line(), их конвертировали в градации серого и писали во framebuffer. Обновление экрана — через ioctl() с libc, передавали dirty region, который Slint сам вычисляет.

С сенсорным вводом помогла философия «всё — файл»: тачскрин виден как /dev/input/event1, читается через read(). Данные приходят в виде struct с timestamp, типом события, кодом и значением. Kindle использует multi-touch protocol type B: идут события X, Y, tracking ID, потом SYNC_REPORT. Когда tracking ID = -1 — палец убран (PointerReleased). Первый sync после касания — PointerPressed, остальные — PointerMoved. Всё остальное Slint обрабатывает сам.

После долгой отладки (ничего не видно, мерцание, двойные нажатия) заработал простой счётчик с кнопкой. Автор вынес код в отдельную библиотеку и опубликовал на crates.io. Доделать дашборд — в следующий раз.

Читать оригинал →