在 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. 支援各種電子書軟體 1. 自訂手勢 1. 字體設定 1. 與其它閱讀軟體/來源的整合:包括 Calibre, RSS feed, Wallabag, Wikipedia, FTP, WebDAV 等 1. SSH server 1. 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 最重要的功能了,在上方選單裡

要注意到,在檔案瀏覽器和閱讀模式下,手勢的設定是分開的!所以設定時不要以為之前的設定被改掉了。 以下是我的設定:

共通設定

閱讀模式

檔案瀏覽器

其它

在 Nickel 中開啟開發者功能

在搜索欄中輸入 devmodeon 並按確定,即可開啟 Nickel 下的各種體驗版功能。2 包含一些小遊戲,繪畫板(原來 forma 也可以畫圖啊!)和一些開發者選項。


  1. https://www.nico.hk/screen-capture-from-kobo-ereader/
  2. https://goodereader.com/blog/kobo-ereader-news/how-to-access-the-secret-kobo-developer-options