<!--
title: "在 Kobo 閱讀器上使用 KOReader"
summary: "紀錄一些使用心得"
date: 2023-02-15T13:12:12+08:00
categories: How I Work
toc: true
-->

## 有關 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
   ```
1. 為了符合 Kobo firmware 的許可證，Kobo 官方有公開的 [GitHub repo](https://github.com/kobolabs/Kobo-Reader)
1. 使用者可以將特定版本的 firmware 檔案放置在 `.kobo` 目錄中，在拔掉連接線後機器會重新啟動，
   並自動解壓縮相關檔案進行安裝，更多說明可以參考維基頁面：
   https://wiki.mobileread.com/wiki/Kobo_Firmware
1. 預設的「操作介面」是 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`（用來存放各種設定和升級系統的目錄）
1. 使用傳輸線接上設備後，Nickel 會提示「已偵測到電腦」，若選擇「連接/Connect」，
   它會將 `/mnt/onboard` 這個路徑掛載到電腦上。
1. 在掛載路徑中的 `.adds/` 資料夾放入 epub 檔案，系統會在重啟後自動將書籍匯入 Nickel，
   並紀錄在 `/mnt/onbard/.kobo/KoboReader.sqlite` 這個 sqlite 資料庫中。

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

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

就算列出這麼多缺點，但無奈 Nickel 與 firmware 深度綁定，
在開機時 kobo 閱讀器一定會自動進入 Nickel 介面。
因此想要在閱讀器上加入第三方功能，只能先過 Nickel 這一關。


## NickelMenu

所幸在開源世界中，早有 NickelMenu 這個工具可以修改 Nickel 的介面：  
https://pgaskin.net/NickelMenu/

![](https://pgaskin.net/NickelMenu/screenshots/v0.3.2/fw15505/screen_003.png)

簡單來說，雖然 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 最重要的功能了，在上方選單裡

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


### 共通設定

- 短按
    - 左下：開啟背光調節
- 長按
    - 右下：休眠
    - 左下：閱讀歷史
- 單指滑動
    - 斜向：開啟選單
- 兩指滑動
    - 擴張：打開先前閱讀的書籍


### 閱讀模式

- 短按
    - 右上：切換書籤
- 長按
    - 右上：書籍資訊
    - 左上：螢幕截圖
- 單指滑動
    - 右邊緣往上：Book Map
    - 右邊緣往下：Page Browser
- 兩指滑動
    - 下拉：快覽文件
    - 上拉：切換自動旋轉
    - 縮小：跳出閱讀模式，回到檔案瀏覽器
    - 往右：書籍目錄
    - 往左：書籤


### 檔案瀏覽器

- 長按
    - 右上：開啟 Terminal Emulator
    - 左上：關閉 Koreader，回到 Kobo 預設介面
- 單指滑動
    - 右側邊緣：全螢幕重新整理
- 兩指滑動
    - 下拉：重新啟動裝置
    - 上拉：顯示網路資訊
    - 縮小：上一層目錄
    - 往右：切換 Wifi
    - 往左：切換 SSH Server


## 其它


### 在 Nickel 中開啟開發者功能

在搜索欄中輸入 `devmodeon` 並按確定，即可開啟 Nickel 下的各種體驗版功能。[^devmode]
包含一些小遊戲，繪畫板（原來 forma 也可以畫圖啊！）和一些開發者選項。

[Kobo forma]: https://wiki.mobileread.com/wiki/Kobo_Forma
[KOReader]: https://koreader.rocks/
[DeDRM]: https://github.com/apprenticeharper/DeDRM_tools

[^devmode]: https://goodereader.com/blog/kobo-ereader-news/how-to-access-the-secret-kobo-developer-options
[^screenshot]: https://www.nico.hk/screen-capture-from-kobo-ereader/
[^kepub]: 而且，這些購買過的書籍藏得有點深，位於 `.kobo/kepub` 中，
          並且檔名等同於 `acsm`(Adobe Content Server Message) 的 uuid，完全沒加上副檔名來標明自己是 `kepub`。
          在 Nickel 中可能是根據 `.kobo/KobrReader.sqlite` 資料庫來辨識檔案的。
[^DRM]: https://www.adobe.com/ca/solutions/ebook/digital-editions/download.html#
