在 Kobo 閱讀器上使用 KOReader
有關 Kobo 閱讀器
我的電子書閱讀器是8吋的 Kobo forma。雖然現在已經是停賣的老機子了, 有著開機鍵難按、傳輸接口還停留在 Micro USB 等小缺點, 但總體來說我還是相當滿意的。200g 以下的重量、超長的待機時間、電子墨水的護眼效果等, 都讓我十分有把它帶出門的動力,其結果是紙本閱讀量比起過去幾年有了顯著的成長。 只不過閱讀器畢竟不是手機或者是 PC,使用方式還是有很大的差異。這也是為什麼要特別寫一篇心得的原因。
以開發者角度來說,Kobo 生產的閱讀器有一些特點:
- 它使用 Linux 系統。更準確的說,若在系統中執行
uname -a
取得核心編譯資訊,其輸出是:Linux kobo 4.1.15-00287-gc98fdced63d6 #81 SMP PREEMPT Mon Mar 29 10:04:24 CST 2021 armv71 GNU/Linux
- 為了符合 Kobo firmware 的許可證,Kobo 官方有公開的 GitHub repo:
- 使用者可以將特定版本的 firmware 檔案放置在
.kobo
目錄中,在拔掉連接線後機器會重新啟動, 並自動解壓縮相關檔案進行安裝,更多說明可以參考維基頁面: https://wiki.mobileread.com/wiki/Kobo_Firmware - 預設的「操作介面」是 Nickel,雖 Kobo 幾乎沒有在網路上或使用介面中提到這個名字,
不過可以在系統中找到一些它的相關訊息:
既然上面的查詢結果和> grep -ir nickel #在系統中尋找含有 Nickel 這個單字的檔案 ./etc/mdev.conf:mmcblk([0-9])p([0-9]) root:root 666 *echo sd $ACTION /dev/$MDEV >> /tmp/nickel-hardware-status & ./etc/init.d/rcS:mkfifo /tmp/nickel-hardware-status ./etc/init.d/rcS:export NICKEL_HOME=/mnt/onboard/.kobo ./etc/init.d/rcS:LIBC_FATAL_STDERR_=1 /usr/local/Kobo/nickel -platform kobo -skipFontLoad & ./etc/init.d/rcK:kill -SIGSTOP `pidof nickel` ./etc/udhcpc.d/default.script:echo network $1 ip="$ip" broadcast="$broadcast" subnet="$subnet" router="$router" domain="$domain" dns="$dns" lease="$lease" > /tmp/nickel-hardware-status ./etc/init.d/on-animator.sh:# 37s for Nickel to show up. ./etc/init.d/on-animator.sh:# where Nickel *might* have been relying on pickel to setup the fb...
/etc/init.d/
有關,可以知道Nickel 這個元件是和硬體深入綁定的, 在開機時會自動啟動,而且環境變數NICKEL_HOME
正是我們熟悉的.kobo
(用來存放各種設定和升級系統的目錄) - 使用傳輸線接上設備後,Nickel 會提示「已偵測到電腦」,若選擇「連接/Connect」,
它會將
/mnt/onboard
這個路徑掛載到電腦上。 - 在掛載路徑中的
.adds/
資料夾放入 epub 檔案,系統會在重啟後自動將書籍匯入 Nickel, 並紀錄在/mnt/onbard/.kobo/KoboReader.sqlite
這個 sqlite 資料庫中。
上面說了這麼多,重點是什麼呢? 就是 Nickel 這個預設的操作介面並不好用! 除了強迫要登入 Kobo 帳號外,在使用上也有著種種限制:
- 無法直接與檔案系統互動:使用者購買或匯入的書籍,只能在「我的書籍」介面中存取
- 明明有網卡可以使用 wifi,卻一定要有線連接才能用電腦傳輸資料
- 螢幕截圖功能明明有做,但卻需要手動修改
/mnt/onboard/.kobo/KOBO/Kobo eReader.conf
1 這個設定檔,才能開啟。上面也提到過 Nickel 中無法直接與檔案系統互動, 所以為了開啟這項功能,要先有線連接後才可以用文字編輯器修改設定檔。 - 無法自訂手勢:在預設的操作介面下,有很多功能需要兩三次點選才能達成。 例如退出閱讀中的書籍,要先點選螢幕上邊緣或下邊緣叫出選單, 才能再點選「返回首頁」退出。
就算列出這麼多缺點,但無奈 Nickel 與 firmware 深度綁定, 在開機時 kobo 閱讀器一定會自動進入 Nickel 介面。 因此想要在閱讀器上加入第三方功能,只能先過 Nickel 這一關。
NickelMenu
所幸在開源世界中,早有 NickelMenu 這個工具可以修改 Nickel 的介面:
https://pgaskin.net/NickelMenu/
簡單來說,雖然 NickelMenu 本身不提供任何實際功能, 但它可以為 Nickel 的操作介面增加一個選單,並利用選單為系統啟動各種功能或第三方軟體。
下面要介紹的 KOReader 這個操作介面,就可以在安裝後透過 NickelMenu 開啟。
有關 KOReader
KOReader 其實並不是專為 Kobo 閱讀器設計的操作介面,而是針對市場上使用電子墨水的各種閱讀器, 官網上是這樣描述的:
KOReader is a document viewer for E Ink devices.
基本上在大部分 Unix 系統都可以安裝它,包括:Android, Amazon 的 Kindle, Linux, Mac OS 等。 KOReader 自 2011 年開始開發,至今已有龐大的使用者與社群,基本上不用擔心其品質與開發能量。
相比於陽春限制又多的 Nickel,KOReader 可就厲害多了!功能包括但不限於:
- 支援各種電子書軟體
- 自訂手勢
- 字體設定
- 與其它閱讀軟體/來源的整合:包括 Calibre, RSS feed, Wallabag, Wikipedia, FTP, WebDAV 等
- SSH server
- Terminal Emulator
後面會詳細說說幾種重要的功能。
安裝 KOReader
有關安裝步驟,其實在官方的 Github Wiki 上就有詳細介紹,這邊就提供連結不再贅述。 既然上面都知道了 NickelMenu 的原理,則可以選擇基於 NickelMenu 的安裝方法,不需要其它來源的安裝腳本:
安裝完成後,應該就可以在右下角的 NickelMenu 中啟動 KOReader 了。
手勢
手勢可以說是 KOReader 最重要的功能了,在上方選單裡
要注意到,在檔案瀏覽器和閱讀模式下,手勢的設定是分開的!所以設定時不要以為之前的設定被改掉了。 以下是我的設定:
共通設定
- 短按
- 左下:開啟背光調節
- 長按
- 右下:休眠
- 左下:閱讀歷史
- 單指滑動
- 斜向:開啟選單
- 兩指滑動
- 擴張:打開先前閱讀的書籍
閱讀模式
- 短按
- 右上:切換書籤
- 長按
- 右上:書籍資訊
- 左上:螢幕截圖
- 單指滑動
- 右邊緣往上:Book Map
- 右邊緣往下:Page Browser
- 兩指滑動
- 下拉:快覽文件
- 上拉:切換自動旋轉
- 縮小:跳出閱讀模式,回到檔案瀏覽器
- 往右:書籍目錄
- 往左:書籤
檔案瀏覽器
- 長按
- 右上:開啟 Terminal Emulator
- 左上:關閉 Koreader,回到 Kobo 預設介面
- 單指滑動
- 右側邊緣:全螢幕重新整理
- 兩指滑動
- 下拉:重新啟動裝置
- 上拉:顯示網路資訊
- 縮小:上一層目錄
- 往右:切換 Wifi
- 往左:切換 SSH Server
其它
將 Kobo 中購買的書籍轉檔為 epub
基本上從 Kobo 商店中購買的書籍,大致上都會是 Kobo 開發的 kepub
格式2,
雖說和一般的 epub 檔案相比,在 Nickel 上有著開啟速度快,自訂性高等優勢,
但除了少部分試讀書籍外,大部分都是伴隨著 DRM 的。不論是在 Kobo 閱讀器中或導出到其它平台,
在 Nickel 以外的介面都是無法直接閱讀的。
也就是說,你在 Kobo 商店買了書,在去除 DRM 之前是無法在 KOReader 中閱讀的。
官網雖然有在提到如何去除 DRM3,但需要滿足好幾個條件:
- 在瀏覽器中登入 kobo.com,並手動下載
.acsm
檔案 - 註冊一個 Adobe 帳號
- 下載 Adobe Digital Editions
可想而知,光是花在不同平台轉來轉去的時間就夠受的了, 更何況 Adobe Digital Editions 根本沒有 Linux 版本,對我而言根本就是他媽的爛方法!
所幸開源的世界早就有相應的解決方法了,這邊可以用 DeDRM 這項工具中,
專門處理 kepub
格式的 Obok
來去除 DRM:
# 雖然 Obok plugin 是給 Calibre 這套電子書管理軟體所用的套件
# 但我們也可以直接在命令行環境下使用腳本
git clone https://github.com/apprenticeharper/DeDRM_tools
cd DeDRM_tools/Obok_plugin/obok
# 這邊的<PATH_TO_YOUR_KOBO>,即是有線連接後掛載的路徑
# 但也可以讓 KOReader 開啟 SSH server,再使用 sshfs 進行掛載
# 在區域網路用 wifi 連線可以省了不少有線連接的時間!
python ./obok.py --devicedir <PATH_TO_YOUR_KOBO>
執行腳本後,obok.py
會自動列出 KOBO 管理的版權書籍,接著自行選擇要去除 DRM 的書籍即可。
在 Nickel 中開啟開發者功能
在搜索欄中輸入 devmodeon
並按確定,即可開啟 Nickel 下的各種體驗版功能。4
包含一些小遊戲,繪畫板(原來 forma 也可以畫圖啊!)和一些開發者選項。
-
而且,這些購買過的書籍藏得有點深,位於
.kobo/kepub
中, 並且檔名等同於acsm
(Adobe Content Server Message) 的 uuid,完全沒加上副檔名來標明自己是kepub
。 在 Nickel 中可能是根據.kobo/KobrReader.sqlite
資料庫來辨識檔案的。 ↩︎ -
https://www.adobe.com/ca/solutions/ebook/digital-editions/download.html# ↩︎
-
https://goodereader.com/blog/kobo-ereader-news/how-to-access-the-secret-kobo-developer-options ↩︎