VK-Sight

两台墨水屏,一套 KOReader:开机直进、自动调光、进度互通

目录

上一篇讲 booklib 时,我把"几台设备同步阅读进度"列进了做不到的事:Kindle 和掌阅的自带阅读器各管各的,没有互通的路。后来我把 Kindle Paperwhite 12 代签名版和掌阅 Ocean 5 Pro 都换成了开源阅读器 KOReader,两台读 booklib 生成的同一份 EPUB,这件事就有了解法。

但 KOReader 装上去只是开始。真用起来,问题一个接一个:

  • 两台设备,同样的字体、页边距、手势,要在两台上各调一遍,调完还记不住当初改了哪些;
  • 每次开机先进自带系统,再点开 KOReader,退出又回到自带系统;
  • 前光要自己拧:白天嫌亮、夜里嫌冷,Kindle 自带的自动亮度在 KOReader 下还不灵了;
  • Kindle 上 KOReader 开着的时候插 USB 线,它会直接崩溃;
  • 掌阅的暖光,KOReader 根本调不了。

koreader-setup 是我为这两台设备攒的一套"配置即代码":设置、补丁、自己写的插件都放在电脑上的一个文件夹里,一条命令下发到设备。这篇不讲代码,只讲它做了什么、为什么这样做。

一张图看懂

一张图看懂:电脑上一份配置,两台阅读器各装一份

日常就两条命令:

./apply.sh kindle-pw12-sig            # 只列出会改什么,不碰设备
./apply.sh kindle-pw12-sig --write    # 确认无误后真的写进去

另外两台各有一个一次性的安装脚本,让它们开机直接进 KOReader,后面细说。

先说三条规矩

  • 真机上看过才算完成。 一台设备上没问题,不代表另一台也没问题;"代码里看着对"更不算数。文末有一张表,列出哪些在真机上验证过。
  • 写坏了一定能退回。 每次写入前先备份,每写一个文件就读回来逐字节核对,任何一步失败就把已写的全部还原。
  • 别人的东西原样用。 从社区拿来的补丁、插件一个字不改,许可证一起收着;要改它的行为,就另写一个补丁包在外面。

设置:一份配置,两台共用

KOReader 的设置存在设备上一个叫 settings.reader.lua 的文件里。koreader-setup 不整个覆盖它,而是分三层往上叠:

设置分三层叠上去,没写到的一律不动

  • 个人设置两台共用:排版、页边距、界面字体、状态栏、要停用哪些插件。改一处,两台都跟上。
  • 文字书方案管读小说时的习惯:注释用弹窗显示、比正文小一号;跳到注释后右滑回原处;每 16 页全刷一次清残影。
  • 设备差异只放两台真不一样的东西:字号、正文字体、文件路径、插件开关。

最省心的是"只算真正的改动":同一份配置下发两遍,第二遍一个键都不改。如果我在设备上随手改了什么(比如字号),试运行时会把它列出来,我决定是收进配置还是改回去,不会被悄悄盖掉。

开机直接进 KOReader

开机直接进 KOReader:两台的做法不一样

Kindle 上,开机后后台启动 KOReader,同时停掉亚马逊自带的界面,省内存也省电,屏幕和按键都归 KOReader。

麻烦在"退出"。KOReader 自带的做法是退出时把亚马逊界面拉回来,可我在真机上反复试,发现一次开机里第三次拉回时,亚马逊的主界面程序会一直白屏,十分钟后被系统杀掉。翻了社区,Kindle 改机的论坛和几个开源项目里都有同样的报告,没人找到原因——问题在亚马逊的闭源程序里。

最后的办法是绕开它:退出 KOReader 就整机重启。这样亚马逊界面一次也不用"拉回",白屏的条件就没了。重启后停在自带界面,正好用来插线拷书、做维护;想再进 KOReader,书库里点一下"KOReader(独占)"这本"书"(其实是个脚本)。万一 KOReader 卡死,长按电源键重启,下次开机会自动跳过一次,不会困在死循环里。

掌阅的路不一样。它的设置里看不到"开发者选项",乍看没法连电脑调试。我写了个小应用直接打开被藏起来的系统页面,结果发现掌阅只是藏了入口,页面都还在;打开 USB 调试后,电脑上的调试命令行直接就是 root 权限。

有了这个,就能把默认桌面换成我写的「KOReader 桌面」——一个几十 KB 的小应用,唯一的作用是"回桌面时打开 KOReader",不显示界面、不常驻、不联网、不要任何权限。再停掉掌阅桌面、掌阅阅读器、应用市场等 13 个用不上的系统应用。开机、退出、回桌面,看到的都是 KOReader。所有停用都能一条命令恢复原样。

Kindle 不重启也能拷书

KOReader 有个绕不开的问题:它的程序文件放在 Kindle 的书库分区里,一插 USB 线,系统就把这个分区交给电脑,KOReader 读不到自己的文件,当场崩溃。

Kindle 不重启拷书:「USB 传书」

所以我写了个「USB 传书」插件:点一下,KOReader 先存好进度再退出(这次不重启),后台脚本等你插线,替停着的亚马逊界面"回话"让系统打开 USB 存储,拷完拔线,KOReader 自己起回来。

这里的前提是关掉设备密码。我顺着系统日志查了一整轮才找到原因:设了密码时,系统要等锁屏界面确认"密码正确"才开 USB 存储,可 KOReader 独占时根本没有锁屏,于是永远等不到。代价是谁拿到这台 Kindle 都能打开。

前光:不用再手动拧

前光:Kindle 跟环境光和太阳,掌阅跟太阳

Kindle 有光线传感器,亮度就该跟它走:传感器量的就是纸面上有多亮,阴天、拉窗帘、开台灯它都知道。但在 KOReader 独占时,Kindle 自带的自动亮度失灵了——系统里那个光照读数停在旧值不再刷新。好在传感器芯片本身照样实时,我的「自动前光」插件就直接读芯片,每 15 秒一次,读一次约 12 毫秒,不卡界面。

亮度曲线是"两头低、中间高":全黑时留够能读的光,昏暗室内补得最多,到了窗边几乎关掉——墨水屏靠反射光,环境越亮前光越没用。为了不一惊一乍,它取最近 5 次读数的中位数:差得多马上调,只差一点要持续约两分钟才调。手挡一下、翻身的影子,灯都不会变。

色温跟太阳走:传感器分不出白天的日光灯和夜里的台灯,色温本该跟着昼夜。插件按所在城市的经纬度算太阳高度,日落后慢慢变暖。

掌阅没有光线传感器,KOReader 也调不了它的暖光,所以另写了「按太阳调前光」:太阳高度分深夜、夜、晨昏、日出日落、白天 5 档,冷光、暖光各有一个值,跨档前后约 18 分钟里慢慢过渡。调灯走的是掌阅自己的系统服务,普通应用就能调。

两台有几条共同的规矩:

  • 一档一档渐变,升快降慢。 这个速度不是拍脑袋定的:我写了个测量脚本,在亚马逊界面下量了 Kindle 自带自动亮度怎么变——升亮度每档约半秒、降每档约一秒——两个插件都照这个来。
  • 完全接管。 灯灭着也会按环境点亮;我手动调过,过一会儿会被拉回目标值。
  • 存为本档。 觉得某一档不合适,先手动调到满意,一分钟内点「把现在的灯存为本档」,以后这一档就按我的来。

还有一个小坑:Kindle 独占时没人在休眠时关前光(平时是亚马逊界面关的),书合上了灯还亮着。于是又加了个「休眠关前光」插件:休眠时记下亮度再关灯,唤醒时自己恢复,不闪。

进度同步:在哪台读到哪,换一台接着读

进度同步:在哪台读到哪,换一台接着读

KOReader 自带进度同步功能,但官方服务器有段时间连不上,我就自己写了一个同步服务器,和这个博客跑在同一台小 VPS 上。

它按文件名认书,不按内容。因为 booklib 改了处理规则会重新生成书,内容一变,按内容认就对不上了。代价是两台上的文件名必须一样,这成了两个项目之间的一条约定:booklib 生成的文件名要稳定。

两台联网的方式不一样。Kindle 上,同步前 KOReader 自己打开 Wi-Fi,闲 5 分钟自动关,省电。掌阅上起初每次唤醒都弹出系统的 Wi-Fi 设置页——原来安卓上 KOReader 所谓的"打开 Wi-Fi"就是弹设置页,而唤醒后一秒就要同步时网还没连上。改成"安静等系统自己重连"后,不再打扰。

字体和界面

字体分工:菜单、正文、状态栏各司其职

界面字体我照着电脑上的习惯分了三组:常规用更纱黑体 UI,标题和粗体用它的粗体,输入框和代码用等距更纱黑体(汉字正好两个字母宽,中英文对得齐)。之前界面用的字体只有一个字重,标题就不粗了;KOReader 只给自带的 Noto 字体找粗体文件,别的字体要加粗时是把笔画描粗,糊而且变宽。我加了个小补丁,让它直接用更纱的粗体文件。

正文两台各有偏好:Kindle 用霞鹜新致宋+,掌阅用霞鹜新晰黑+。读繁体书换思源宋體 TC 或霞鶩文楷 TC(台湾字形,收全 Big5 汉字),读英文书换 Literata 或 Charis,都在书里切换,KOReader 按书记住。Kindle 系统自带的六十多个字体全挤在字体菜单里,我用补丁把它们藏了,只留 Bookerly;文件一个没删。

其他几处观感上的调整:

  • 手势:四个角各有点一下和长按两种动作——左上回书架、长按退出;右上目录、长按休眠;左下防误触、长按截屏;右下长按全刷。左边缘上下滑调亮度,右边缘调暖光。
  • 书架:封面网格两台都是每页 3×3,原来的 5×5 封面太小、书名挤成两行。文件夹也显示封面(第一本书的封面),文件夹后面显示连子目录在内一共多少本书。
  • 界面大小:两台屏幕都是 7 英寸 300ppi,我把 KOReader 里的屏幕 DPI 设成 240,图标缩小两成,界面字号整体小两号,一屏能放更多东西。

词典

KOReader 只认 StarDict 格式的词典,网上流传的《牛津高阶双解》《现代汉语词典》StarDict 版都是未经授权的转制。我手上有正版的 MOBI 版,就在 booklib 里写了个转换工具,用自己的 MOBI 转成 StarDict,只自己用。查词时连异体字也认得,比如查"㕑"会跳到"厨"。

几个踩过的坑

  • 退到根目录就卡死。 从社区拿来的"文件夹显示总书数"补丁会钻进每个子目录数书,退到系统根目录时,它会一头扎进 /proc、/sys 这些系统目录,里面的链接绕成圈,界面直接卡死。别人的补丁不改,所以另写了个护栏:只在存书的地方往下数,别处照原样只数一层。
  • 图标全变成方块。 有一次 Kindle 上 KOReader 自带的字体文件夹不知怎么没了,菜单箭头、电池图标都变成了方块。好在 Kindle 上留着一份安装包,按文件清单比一遍,缺的从里面拷回来就好了。
  • 改了书架设置又被改回去。 书架的行列数存在一个小数据库里,它会先把改动记到一个日志文件里。只换数据库主文件的话,KOReader 一打开就用日志里的旧值盖回去了,得连日志一起处理。

在两台真机上验证过什么

功能Kindle掌阅
开机直接进 KOReader✓✓
退出即重启、脚本书再进✓—
USB 传书(不重启)✓—
前光自动调、渐变、跨档过渡✓✓
休眠关前光、唤醒不闪✓—
能进根目录不卡死✓✓
书架 3×3待看✓
唤醒不弹 Wi-Fi 设置页—待看
更纱界面字体待看✓
字体菜单只留 Bookerly待看—

"—"是这台用不上的功能。标着"待看"的,配置已经下发,还等我在设备上亲眼确认。

做不到的事

  • KOReader 开着时直接插 USB:Kindle 上绕不开,只能先让它退出。
  • 按书的语言自动换字体:电脑上繁体网页会自动换成繁体字形,KOReader 没有这个功能,读繁体书得在书里手动换一次。
  • 漫画铺满屏幕:KOReader 里漫画四周总有空白,所以漫画还是用两台各自的自带阅读器看,booklib 给它们各生成了贴边的版本。
  • KOReader 不认 Kindle 的 AZW3:两台的 KOReader 都读 EPUB,AZW3 只留给 Kindle 自带阅读器。

最后

koreader-setup 说穿了是把"在两台设备上点来点去"换成了"在电脑上改一个文本文件"。设置有版本、有备份、能退回;前光、开机、拷书、进度这些每天都会碰到的小事,不用再操心。

这一路最大的体会是:墨水屏上很多"理所当然"的事,背后都是厂商系统替你做的。你把系统换成 KOReader,就得一件件自己接过来:谁在休眠时关灯,谁在插线时让出存储,谁在回桌面时打开阅读器。这些都是在真机上一次次试、一行行翻系统日志才弄清楚的。如果你也在两台以上的设备上用 KOReader,希望这些经验对你有用。

添加新评论