最近在手机上安装了最新版本 (2026.03版) 的KOReader, 在KOReader强大的PDF裁剪/排版能力下读文献效果绝佳.

想起吃灰多年的Kindle也能越狱后安装KOReader, 为了让老设备换发第二春, 故来试试.

Kindle越狱

主要参考https://bookfere.com/post/1075.html

我的Kindle为Kindle paperwhite 3, 我尝试成功的固件版本为5.15.1.1和5.16.2.1.1.

首先要备份Kindle里的书籍. 越狱可能会”格式化”Kindle内部存储.

如果曾经有过失败的越狱尝试, 需要重装系统. 先在设备选项 > 设备信息里查找固件版本, 在https://bookfere.com/update查找对应固件并下载. 在设置里面点设备选项 > 重置, 重置一遍Kindle, 待Kindle重启后使用数据线导入下载好的bin文件至Kindle根目录, 随后点设备选项 > 高级选项 > 更新我的Kindle, 等待Kindle重启.

在Kindle主页搜索框中输入;enter_demo, 随后在设置中点设备选项 > 重启, 进入演示模式.

如果无法正常进入演示模式, 可以考虑退出亚马逊账号、开启飞行模式后重试.

跳过WiFi设置, 在商店名称里面随便写个字符, 随后依次点击继续跳过Standard完成. 等待Kindle完成配置进入屏保.

点击屏保进入配置设备 (展示机无内容或未连接网络) 界面, 双指同时点按住屏幕右下角随后向左滑动一段距离来跳过该界面.

如果无法跳过跳过这个界面, 需要多次、反复尝试上述手势. 或者双指点按后改单指左滑来尝试.

在Kindle主页搜索框中输入;demo, 等待设备进入”演示菜单, 选择导入内容. 下载越狱包https://github.com/notmarek/LanguageBreak/releases. 解压后找到LanguageBreak文件夹, 将文件夹内的documents文件夹和DONT_CHECK_BATTERYjbpatchedUks.sqsh文件全部使用数据线导入Kindle根目录, 断开Kindle与电脑连接后点完成回到”演示菜单”.

点击销售设备 > 销售, 等待Kindle关机.

待Kindle关机后多等1分钟, 随后长按电源键开机, 语言选择简体中文. 待Kindle完全重启后, 将越狱包 (https://github.com/notmarek/LanguageBreak/releases) 中的Update_hotfix_languagebreak-en-US.bin (或者重启后Kindle系统语言对应的bin文件) 用数据线导入至Kindle根目录, 随后点设备选项 > 高级选项 > 更新我的Kindle, 等待Kindle重启.

至此越狱完毕. 可以在Kindle主页搜索框中输入;log runme来确认是否越狱成功, 如果越狱成功会在左上角出现No user script found.

安装KOReader

安装KUAL

参考https://www.mobileread.com/forums/showthread.php?t=203326

https://www.mobileread.com/forums/showthread.php?t=225030下载最新版本MR Package Installer (名如kual-mrinstaller-1.7.N-r19303.tar.xz), 解压后将extensionsmrpackages两个文件夹用数据线导入Kindle根目录.

在上述页面 (https://www.mobileread.com/forums/showthread.php?t=225030) 下载最新版本KUAL (名如KUAL-v2.7.37-gfcb45b5-20250419.tar.xz), 解压后将KUAL-KDK-2.0.azw2用数据线导入Kindle的documents目录, 将Update_KUALBooklet_vx.x.xx_install.bin数据线导入Kindle的mrpackages目录.

断开Kindle与电脑的连接后, 在Kindle主页搜索框中输入;log mrpi, 等待Kindle重启即可完成KUAL安装. 此时应该能在图书馆下看到KUAL.

安装KPV Booklet

https://github.com/koreader/kpvbooklet/releases下载最新版 KPV Booklet并解压, 将update_kpvbooklet_0.x.x_install.bin文件用数据线导入Kindle的mrpackages目录, 断开Kindle与电脑的连接.

在Kindle图书馆下点开KUAL > Helper > Install MR Packages, 等待Kindle重启即可完成KPV Booklet安装.

安装KOReader

https://github.com/koreader/koreader/releases找到并下载koreader-kindlepw2-vxxxx.xx.zip, 解压后将koreaderextensions目录用数据线导入Kindle根目录.

断开Kindle与电脑的连接后, 应该能在Kindle图书馆下的KUAL中找到KOReader.

KOReader使用优化

词典/翻译

KOReader支持Stardict格式的词典, 在http://download.huzheng.org/zh_CN/下载自己需要的词典文件, 解压后将整个词典文件夹 (内含dzidxifo三个文件) 用数据线导入Kindle的koreader/data/dict/下即可使用.

KOReader的在线翻译功能默认使用谷歌翻译, 在中国大陆会失灵. 可以用插件KOReader Custom Translator来修改为基于大模型的中国大陆可用的翻译.

https://github.com/Tokisaki-Galaxy/kindle-koreader-custom-translator/releases下载源码压缩包, 解压后将kindle-koreader-custom-translator文件夹 (内有bin文件夹的那个) 直接用数据线导入Kindle的extensions/下. 随后断开Kindle与电脑的连接, 在KUAL中点击KOReader Custom Translator > Install, 随后重启KOReader即可使用在线翻译功能.

网盘传书

在KOReader的文件管理器界面, 单击屏幕上沿打开菜单, 在第三个图标下有云存储选项, 点左上角+里面可以设置FTP或者WebDAV网盘. 按照说明填好网盘网址和账户信息就可以在KOReader里面访问网盘, 下载网盘中的文档. 下载的文档默认保存在koreader/news.

阅读进度同步

KOReader支持多设备用户依靠网络在设备直接互相同步阅读进度.

需要自己拥有服务器来架设阅读进度同步服务. 在服务器上安装docker, 随后sudo docker pull koreader/kosync:latest来安装同步服务. 如果遇到dockerhub无法访问的情况, 可以使用镜像, 比如sudo docker pull docker.1panel.live/koreader/kosync:latest. 随后新建两个目录, 一个log目录一个data目录, 再新建log目录相对路径/redisdata目录相对路径/redis. 用下述命令启动服务 (可能需要管理员权限):

docker run -d -p 7200:7200 -v log目录绝对路径/a/app/koreader-sync-server/logs -v log目录相对路径/redis:/var/log/redis  -v data目录绝对路径/redis:/var/lib/redis koreader/kosync:latest

如果前文是使用镜像下载的, 需要更改命令为:

docker run -d -p 7200:7200 -v log目录绝对路径/a/app/koreader-sync-server/logs -v log目录相对路径/redis:/var/log/redis  -v data目录绝对路径/redis:/var/lib/redis docker.1panel.live/koreader/kosync:latest

防火墙放行7200端口, 在浏览器中输入https://服务器地址:7200来验证是否安装成功, 安装成功的话会返回: (因为这里使用了自签名加密证书, 浏览器会报错说不安全, 在高级选项里面选择继续访问即可)

{"code":101,"message":"Invalid Accept header format."}

在KOReader中单击屏幕上边沿打开菜单, 在第四个图标下面找到进度同步, 在其中选择自定义服务器, 将https://服务器地址:7200填入, 随后在下方设置主机名, 选择注册或是登录, 根据需要打开自动同步文档. 注意KOReader的进度同步服务只同步阅读进度, 不同步文件具体内容.

阅读在线内容

KOReader支持RSS订阅. 但是国内网站少有支持RSS的, 不过可以使用RSSHub来抓取相关内容, 转为RSS链接提供给KOReader.

同样需要一台服务器来架设RSSHub. 同样需要安装docker, 然后用docker pull拉取diygod/rsshubbrowserless/chromeredis, 如果遇到网络问题可以使用镜像. 注意去默认源拉取diygod/rsshub时候会自动将依赖都拉取, 如果使用镜像源, 最好额外单独拉取两个依赖.

使用dockerhub默认源:

docker pull diygod/rsshub

使用镜像源, 以docker.1panel.live为例:

docker pull docker.1panel.live/diygod/rsshub
docker pull docker.1panel.live/browserless/chrome
docker pull docker.1panel.live/redis

为RSSHub新建目录, 在其中创建配置文件docker-compose.yml, 写入:

services:
    rsshub:
        # two ways to enable puppeteer:
        # * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
        # * (consumes more disk space and memory) leave everything unchanged
        image: diygod/rsshub # 如果使用了镜像, 注意在前面加上镜像地址/
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
            PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' # marked
        healthcheck:
            test: ['CMD', 'curl', '-f', 'http://localhost:1200/healthz']
            interval: 30s
            timeout: 10s
            retries: 3
        depends_on:
            - redis
            - browserless # marked

    browserless: # marked
        image: browserless/chrome # 如果使用了镜像, 注意在前面加上镜像地址/
        restart: always # marked
        ulimits: # marked
            core: # marked
                hard: 0 # marked
                soft: 0 # marked
        healthcheck: # marked
            test: ['CMD', 'curl', '-f', 'http://localhost:3000/pressure'] # marked
            interval: 30s # marked
            timeout: 10s # marked
            retries: 3 # marked

    redis:
        image: redis:alpine # 如果使用了镜像, 注意在前面加上镜像地址/
        restart: always
        volumes:
            - redis-data:/data
        healthcheck:
            test: ['CMD', 'redis-cli', 'ping']
            interval: 30s
            timeout: 10s
            retries: 5
            start_period: 5s

volumes:
    redis-data:

使用docker compose -f docker-compose.yml文件路径 up -d来允许RSSHub, 防火墙放行1200端口. 在浏览器中输入http://服务器地址:1200来验证是否安装成功, 安装成功的话会显示RSSHub主页.

很多网站需要登录才能拉取信息, 这就需要我们再浏览器登录后按F12, 在cookie里面查找登录的令牌填入RSSHub的配置文件中. 以知乎为例, 在浏览器中查找到z_c0的cookie项, 将其值复制.

在上述配置文件修改为:

services:
    rsshub:
        # two ways to enable puppeteer:
        # * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
        # * (consumes more disk space and memory) leave everything unchanged
        image: docker.1panel.live/diygod/rsshub # or ghcr.io/diygod/rsshub
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
            PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' # marked
            ZHIHU_COOKIES: 'z_c0=复制的cookie值'  #新增
        healthcheck:
            test: ['CMD', 'curl', '-f', 'http://localhost:1200/healthz']
            interval: 30s
            timeout: 10s
            retries: 3
       (后文省略)

重新启动RSSHub服务器.

在KOReader中单击屏幕上边沿打开菜单, 在第四个图标下面找到新闻下载器 > 编辑新闻源 > 添加新源 > URL, 根据https://docs.rsshub.app/routes/写入对应的RSS链接. 设置好后可以使用新闻下载器 > 编辑新闻源来下载内容, 默认保存在koreader/news.

以知乎为例, 可以将自己的账户收藏 (http://服务器地址:1200/zhihu/people/allCollections/用户ID, 用户ID可以在个人主页的URL末尾查找) 设置为RSSHub链接导入KOReader. 这样自己在手机上看到长文想要转入KOReader继续看的时候, 只要收藏一下, 过一两分钟再同步到KOReader上就好了.

在docker上关闭已有容器的方法: docker ps查找目标容器的CONTAINER ID, 随后使用docker stop ID来关闭对应容器.



software

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!