文章

把旧 Kindle 变成家庭公告板

家里有一台闲置的 Kindle Paperwhite 3。电子墨水屏不需要持续发光,画面静止时耗电很低,很适合用来显示一条长期可见的家庭公告。

我想要的使用方式很简单:在手机网页上写好内容并发布,远端 Kindle 自动同步、全屏显示;公告结束后恢复正常使用;需要调试时,短按一次电源键就能退出。

这个小项目后来有了名字:Inkboard

最终效果

日常使用只需要打开一个网页。页面里保留标题、正文、发布密码、Kindle 预览和发布按钮,没有账号系统,也没有复杂操作。

整个过程可以概括为:

手机网页 → Inkboard 服务 → Kindle 定时检查 → FBInk 全屏显示

这里没有真正的“推送”。Kindle 主动访问服务器,所以两边不需要在同一个家庭网络,也不用修改父母家的路由器。

准备工作

这次实测使用的环境是:

  • Kindle Paperwhite 3;

  • 固件 5.12.2.2;

  • 已完成越狱并安装 KUAL;

  • 一台可以运行 Linux、systemd 和 Nginx 的服务器;

  • 一个带有效 HTTPS 证书的域名。

越狱和系统修改必须与 Kindle 型号、固件版本严格匹配。开始前应备份用户分区,并了解系统升级可能导致插件失效。Inkboard 本身不负责越狱,它只是一个 KUAL 扩展。

最终版本不依赖 Python、KOReader 或 ScreenSavers Hack。显示图片使用的是 FBInk 的 PW2/PW3 完整版。

网页端

原型验证完成后,我把网页端改成了一个很小的 Go 服务,并部署到自己的服务器。它不使用数据库,只保存当前公告图片和一个状态文件。

发布页面在浏览器中直接生成一张 1072 × 1448 的 PNG。服务端收到图片后更新版本号,Kindle 只在版本变化时下载新图片。

服务需要两个不同的秘密值:

INKBOARD_LISTEN=127.0.0.1:18083
INKBOARD_DATA_DIR=/var/lib/inkboard
INKBOARD_ADMIN_PASSWORD=发布密码
INKBOARD_DEVICE_TOKEN=Kindle 只读令牌

发布密码只用于手机网页;设备令牌只能读取公告,不能发布。服务监听本机地址,由 Nginx 负责公网 HTTPS。

网页端保持克制:一个可执行文件、一份状态数据、一张当前图片。这样资源占用低,升级和排查也更直接。

Kindle 插件

插件放在 Kindle 的扩展目录中:

Kindle/extensions/family-notice/

首次使用时,只需要在配置文件中填写服务地址和设备令牌:

DEVICE_API_BASE="https://example.com/api/device"
DEVICE_TOKEN="与服务器一致的设备令牌"
CHECK_INTERVAL=3600
DEBUG_NO_SUSPEND=0

安全弹出 Kindle 后,打开 KUAL 就能看到 Inkboard。先运行一次“立即同步”,确认网络、令牌和图片显示都正常,再启用自动同步。

同步与功耗

每个同步周期只做几件事:

  1. 唤醒 Wi-Fi;

  2. 读取远端版本号;

  3. 与本地版本比较;

  4. 仅在版本变化时下载 PNG;

  5. 校验文件后用 FBInk 显示;

  6. 设置 RTC,进入深度休眠。

大部分时间里,设备并没有常驻联网,也不需要监听触屏。每小时检查一个很小的状态文件,只有内容变化时才下载图片,这对旧 Kindle 的续航更友好。

短按电源键退出

调试过程中,最麻烦的不是下载图片,而是如何自然退出。

早期版本会停止 Kindle 主界面,再由 FBInk 独占屏幕。虽然公告可以显示,但短按电源键后恢复很慢,看起来像系统重启。

最终方案保留 Kindle 主界面,让设备先进入原生屏保状态,再用 FBInk 覆盖显示公告。RTC 唤醒时继续同步;用户短按电源键时,插件识别到设备已回到活动状态,立即停止并返回首页。

这样既不需要监听触屏,也不会破坏 Kindle 原有的电源管理流程。

几个真机踩坑

FBInk 必须支持图片。 Kindle 中已有的 FBInk 可能只有文字功能,显示 PNG 时会提示图片支持未启用。换用作者发布的 PW2/PW3 完整版后,PNG 可以正常显示。

网络失败时保留缓存。 下载失败不能删除上一张成功显示的公告,否则一次短暂断网就可能留下空白页面。排查“为什么还是旧公告”时,要同时检查远端版本、本地版本和同步日志。

USB 模式下插件目录不可用。 Kindle 作为 U 盘连接电脑时,设备自己暂时无法访问 /mnt/us。修改完成后必须先安全弹出,再测试插件。

全屏刷新可以减少残影。 原生屏保切换到公告时可能留下浅色残影。最终版本先显示 PNG,再执行一次全屏刷新。屏幕短暂黑白闪烁是电子墨水屏正常的刷新过程。

安全取舍

Inkboard 面向私人家庭使用,因此没有加入 OAuth、短信验证码或复杂的用户系统。简单并不等于明文暴露:

  • 全程使用 HTTPS;

  • 发布密码和设备令牌必须不同;

  • 两者都使用足够长的随机值;

  • 不把环境文件和填写过令牌的配置上传到公开仓库。

最后

现在的日常操作只有一步:打开手机网页,写下内容并发布。

父母端不用打开网页,也不用操作 Kindle。公告会自动出现;需要退出时,短按一下电源键即可回到首页。

旧 Kindle 不一定只能继续读书。电子墨水屏、深度休眠和一个很小的自托管服务组合起来,也可以成为安静、低功耗的家庭信息终端。

License:  CC BY 4.0