TOPO.TW

在 Kobo 閱讀器上使用 KOReader

有關 Kobo 閱讀器

我的電子書閱讀器是8吋的 Kobo forma。雖然現在已經是停賣的老機子了, 有著開機鍵難按、傳輸接口還停留在 Micro USB 等小缺點, 但總體來說我還是相當滿意的。200g 以下的重量、超長的待機時間、電子墨水的護眼效果等, 都讓我十分有把它帶出門的動力,其結果是紙本閱讀量比起過去幾年有了顯著的成長。 只不過閱讀器畢竟不是手機或者是 PC,使用方式還是有很大的差異。這也是為什麼要特別寫一篇心得的原因。

以開發者角度來說,Kobo 生產的閱讀器有一些特點:

  1. 它使用 Linux 系統。更準確的說,若在系統中執行 uname -a 取得核心編譯資訊,其輸出是:
    Linux kobo 4.1.15-00287-gc98fdced63d6 #81 SMP PREEMPT Mon Mar 29 10:04:24 CST 2021 armv71 GNU/Linux
    
  2. 為了符合 Kobo firmware 的許可證,Kobo 官方有公開的 GitHub repo:
  3. 使用者可以將特定版本的 firmware 檔案放置在 .kobo 目錄中,在拔掉連接線後機器會重新啟動, 並自動解壓縮相關檔案進行安裝,更多說明可以參考維基頁面: https://wiki.mobileread.com/wiki/Kobo_Firmware
  4. 預設的「操作介面」是 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(用來存放各種設定和升級系統的目錄)
  5. 使用傳輸線接上設備後,Nickel 會提示「已偵測到電腦」,若選擇「連接/Connect」, 它會將 /mnt/onboard 這個路徑掛載到電腦上。
  6. 在掛載路徑中的 .adds/ 資料夾放入 epub 檔案,系統會在重啟後自動將書籍匯入 Nickel, 並紀錄在 /mnt/onbard/.kobo/KoboReader.sqlite 這個 sqlite 資料庫中。

上面說了這麼多,重點是什麼呢? 就是 Nickel 這個預設的操作介面並不好用! 除了強迫要登入 Kobo 帳號外,在使用上也有著種種限制:

  1. 無法直接與檔案系統互動:使用者購買或匯入的書籍,只能在「我的書籍」介面中存取
  2. 明明有網卡可以使用 wifi,卻一定要有線連接才能用電腦傳輸資料
  3. 螢幕截圖功能明明有做,但卻需要手動修改 /mnt/onboard/.kobo/KOBO/Kobo eReader.conf1 這個設定檔,才能開啟。上面也提到過 Nickel 中無法直接與檔案系統互動, 所以為了開啟這項功能,要先有線連接後才可以用文字編輯器修改設定檔。
  4. 無法自訂手勢:在預設的操作介面下,有很多功能需要兩三次點選才能達成。 例如退出閱讀中的書籍,要先點選螢幕上邊緣或下邊緣叫出選單, 才能再點選「返回首頁」退出。

就算列出這麼多缺點,但無奈 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 可就厲害多了!功能包括但不限於:

  1. 支援各種電子書軟體
  2. 自訂手勢
  3. 字體設定
  4. 與其它閱讀軟體/來源的整合:包括 Calibre, RSS feed, Wallabag, Wikipedia, FTP, WebDAV 等
  5. SSH server
  6. Terminal Emulator

後面會詳細說說幾種重要的功能。

安裝 KOReader

有關安裝步驟,其實在官方的 Github Wiki 上就有詳細介紹,這邊就提供連結不再贅述。 既然上面都知道了 NickelMenu 的原理,則可以選擇基於 NickelMenu 的安裝方法,不需要其它來源的安裝腳本:

https://github.com/koreader/koreader/wiki/Installation-on-Kobo-devices#alternative-manual-installation-method-based-on-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,但需要滿足好幾個條件:

  1. 在瀏覽器中登入 kobo.com,並手動下載 .acsm 檔案
  2. 註冊一個 Adobe 帳號
  3. 下載 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 也可以畫圖啊!)和一些開發者選項。


  1. https://www.nico.hk/screen-capture-from-kobo-ereader/ ↩︎

  2. 而且,這些購買過的書籍藏得有點深,位於 .kobo/kepub 中, 並且檔名等同於 acsm(Adobe Content Server Message) 的 uuid,完全沒加上副檔名來標明自己是 kepub。 在 Nickel 中可能是根據 .kobo/KobrReader.sqlite 資料庫來辨識檔案的。 ↩︎

  3. https://www.adobe.com/ca/solutions/ebook/digital-editions/download.html# ↩︎

  4. https://goodereader.com/blog/kobo-ereader-news/how-to-access-the-secret-kobo-developer-options ↩︎