# reMarkable 電子書閱讀器中文支援問題規避教學
說明如何使您的 [reMarkable 電子書閱讀器](https://remarkable.com/)支援顯示中文文字
<https://hackmd.io/@brlin/remarkable-chinese-support-tutorial>
## {內容大綱|Table of contents}
[TOC]
## {問題|Problem}
reMarkable 電子書閱讀器預設沒有內建中文字型,故除有內嵌字型之 PDF 文件外所有的中文字元都會顯示為方塊{字形|glyph}(俗稱{豆腐|tofu}):
的算繪結果範例照片")
## {問題規避方案|Workaround}
使用原廠系統軟體提供之 SSH 服務與 root 管理者密碼透過 SFTP 客戶端軟體將中文字型安裝進去之後使用 SSH 客戶端軟體取得 reMarkable 的{命令列操作介面|command-line interface}進行進一步設定使 reMarkable 的主應用程式可以讀得到中文字型。
## {先決條件|Prerequisites}
以下為完成本教學所需要滿足之先決條件:
* 您需要有一台電腦(支援 USB OTG 功能之手機或平板電腦應該也可以)
* 您需要已安裝一個:
+ SSH 客戶端軟體(如 [OpenSSH](https://www.openssh.com/)、[MobaXterm](https://mobaxterm.mobatek.net/download.html)、[Remmina](https://remmina.org/) 或是 [PuTTY](https://www.putty.org/))
+ SFTP 客戶端軟體(如 [OpenSSH](https://www.openssh.com/) 與 [FileZilla](https://filezilla-project.org/))
:::info
**注意:** SFTP 是指「SSH 文件傳輸協議(SSH File Transfer Protocol)」,非「過 TLS/SSL 加密的 FTP 傳輸協議(FTPS)」。
:::
* (如果是 reMarkable Paper Pro 產品)需要[啟用{開發者模式|Developer mode}](https://support.remarkable.com/s/article/Developer-mode)
:::warning
**警告:** 啟用開發者模式有可能會**影響您的產品硬體保固權利**,請在評估利弊得失後才進行。
:::
## {設定流程|Setup process}
以下說明設定問題規避方案的具體流程:
### 將 reMarkable 連接至電腦(或相容的裝置)
為了您的資訊安全 reMarkable 的 SSH 服務預設僅對其透過 USB 模擬之{乙太網路|Ethernet}{網路介面|network interface}提供服務,故需要先將其透過 USB 傳輸線連接至電腦。
(如您已經啟用 SSH 服務監聽 Wi-Fi 網路介面支援的話可以跳過此步驟)
將 reMarkable 連接至電腦後您應可以在電腦的網路介面查詢/列舉介面中發現一個新的乙太網路介面:

(其他作業系統之操作步驟參考[這篇 ChatGPT 大語言模型回應的說明](https://chatgpt.com/share/67fb2a7b-c764-8012-9630-e9dea44fb4e6))
此網路介面應會自動完成連線設定但沒有{網際網路|Internet}存取能力,它僅是讓您能夠存取 reMarkable 電子書閱讀器預設禁用之 Web 操作介面與 SSH 服務用的。
### 查詢登入 reMarkable 的 SSH 服務所需的必要資訊
於 reMarkable 主選單 > Settings > General > Help > About > Copyrights and licenses 頁面中的 GPLv3 Compliance 節中獲取 reMarkable 電子書閱讀器的 root 管理者帳號的身份驗證密碼:
")
:::warning
**注意:** 請避免任意地公開此密碼(尤其是在您啟用了 SSH 服務 Wi-Fi 網路介面監聽設定之後),避免您的裝置遭到同網路的攻擊者入侵。
:::
:::info
**提示:** 如您有啟用 SSH 服務 Wi-Fi 網路介面監聽設定您亦可於此章節獲取登入 reMarkable 的 SSH 服務所需之裝置 IP 地址。
:::
### 存取 reMarkable 裝置的 SFTP 服務
接下來啟動您的 SFTP 客戶端軟體,輸入下列資訊後登入您的 reMarkable 電子書閱讀器:
* {通訊協議|Protocol}:SFTP
* {主機地址|Host address}: `10.11.99.1` (或是如您已經啟用 SSH 服務監聽 Wi-Fi 網路介面支援時,您於先前步驟中查詢到的 reMarkable 裝置 IP 地址)
* {通訊埠號|Port}:`22`
* {使用者名稱|Username}: `root`
* {密碼|Password}:(您於先前步驟中查詢到的 root 管理者帳號密碼)
參考操作畫面(以 FileZilla 為例):
")
如果您的 SFTP 客戶端軟體彈出類似像是下列這樣的警告視窗代表您的 reMarkable 裝置 SSH 服務的{公鑰|public key}尚未被您的 SSH 客戶端設定為可信任:

如您為透過 `10.11.99.1` IP 地址進行登入因該連線沒有遭受[{中間人攻擊|MitM attack}](https://zh.wikipedia.org/zh-tw/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB)的疑慮則可以直接選擇「(永遠)信任」;如果您為透過 Wi-Fi 網路連線建議先取消登入,透過 USB 連線登入 SSH 服務後參閱[查詢 SSH 服務的公鑰指紋 | 維運猿的共同筆記](https://hackmd.io/@ops-notes-tw/query-ssh-public-key-fingerprints)文章的說明查詢並紀錄 SSH 服務的公鑰指紋以供未來比對使用。
:::danger
**警告:** 如果未比對公鑰指紋就登入 SSH 服務則有機會遭受到中間人攻擊(Man-in-the-middle(MitM) attack),即您與 SSH 服務的通訊(包含但不限於裝置登入的密碼與傳輸的文件等)將會被攻擊者竊聽,且攻擊者有機會竊取裝置的完整權限於日後遠端存取該裝置之資料。
:::
登入後您應可於 SFTP 客戶端之「遠端站台」面板看到 reMarkable 裝置內的檔案:

### 安裝中文字型至 reMarkable
於 SFTP 客戶端之「遠端站台」面板繼續進行下列操作:
1. 確保 /home/root/.local/share/fonts 資料夾已建立。
1. 將要安裝的字型檔案拖曳到 /home/root/.local/share/fonts 資料夾中。
如果沒有想裝的字型推薦使用 [Noto Sans Traditional Chinese](https://fonts.google.com/noto/specimen/Noto+Sans+TC) 字型中的 NotoSansTC-Regular.ttf 字型檔案。
### 登入 reMarkable 的命令列操作介面
接下來啟動您的 SSH 客戶端軟體,輸入下列資訊後登入並取得 reMarkable 的命令列操作介面:
* {通訊協議|Protocol}:SSH
* {主機地址|Host address}: `10.11.99.1` (或是如您已經啟用 SSH 服務監聽 Wi-Fi 網路介面支援時,您於先前步驟中查詢到的 reMarkable 裝置 IP 地址)
* {通訊埠號|Port}:`22`
* {使用者名稱|Username}: `root`
* {密碼|Password}:(您於先前步驟中查詢到的 root 管理者帳號密碼)
參考操作畫面(以 Putty 為例):
")
參考操作畫面(以 Remmina 為例):


如果您的 SSH 客戶端軟體彈出類似像是下列這樣的警告視窗代表您的 reMarkable 裝置 SSH 服務的{公鑰|public key}尚未被您的 SSH 客戶端設定為可信任:

如您為透過 `10.11.99.1` IP 地址進行登入因該連線沒有遭受[{中間人攻擊|MitM attack}](https://zh.wikipedia.org/zh-tw/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB)的疑慮則直接選擇「(永遠)允許」即可;如果您為透過 Wi-Fi 網路連線建議先取消登入,透過 USB 連線取得命令列操作介面後參閱[查詢 SSH 服務的公鑰指紋 | 維運猿的共同筆記](https://hackmd.io/@ops-notes-tw/query-ssh-public-key-fingerprints)文章的說明查詢並紀錄 SSH 服務的公鑰指紋以供未來比對使用。
:::danger
**警告:** 如果未比對公鑰指紋就登入 SSH 服務則有機會遭受到中間人攻擊(Man-in-the-middle(MitM) attack),即您與 SSH 服務的通訊(包含但不限於裝置登入的密碼與傳輸的文件等)將會被攻擊者竊聽,且攻擊者有機會竊取裝置的完整權限於日後遠端存取該裝置之資料。
:::
當您看到類似像是下列這樣的畫面時代表您已成功登入並取得 reMarkable 的命令列操作介面:
)與命令輸入提示畫面截圖")

### 確認字型可以正常使用
於 reMarkable 的命令列操作介面中執行下列命令重新啟動 reMarkable 主應用程式(xochitl)服務:
```bash
systemctl restart xochitl.service
```
重新啟動之後您應會發現此時中文文字已能正常顯示:

但先別高興得太早,此時若您在主選單 > General 頁面中點擊下方的 Restart 按鈕重新啟動裝置則會注意到中文文字又被顯示為方塊:

這是因為我們的中文字型是安裝在 /home 檔案系統中,而新版 reMarkable 系統軟體為了實作{儲存空間加密|volume encryption}功能將 reMarkable 主應用程式(xochitl)服務於{掛載|mount} /home 檔案系統前就啟動(以顯示解密儲存空間用之「Enter passkey」畫面)故 reMarkable 主應用程式讀不到中文字型的緣故。
### (reMarkable Paper Pro 限定)允許一次性地修改 /etc 目錄中的系統設定檔
reMarkable Paper Pro 產品於系統啟動期間會將:
* 根目錄檔案系統(/)掛載為唯讀模式
* 系統全域設定目錄(/etc)掛載為揮發性檔案系統(/var/volatile)
這使得我們在 /etc 目錄下的修改在重新開機後會被丟棄,造成設定失效故在進行接下來的設定前我們要先將其暫時禁用。
於 SSH 客戶端軟體中執行下列命令將根目錄檔案系統改掛載為可寫模式:
```bash
mount -o remount,rw /
```
然後執行下列命令將揮發性檔案系統自 /etc 目錄解除掛載:
```bash
umount -R /etc
```
### 使 reMarkable 主應用程式可以讀得到中文字型
為了使 reMarkable 主應用程式(xochitl)服務得以讀取存放在
/home 檔案系統中的中文字型,我們要修改 systemd 服務管理器的設定使 reMarkable 主應用程式服務在 */home 檔案系統掛載後* 再重新啟動一次以使其得以真正地載入到中文字型。
首先於 SFTP 客戶端「遠端站台」面板中的 `/etc/systemd/system` 目錄中建立一個叫做 `restart-xochitl-after-home.service` 的檔案,然後編輯該檔案並新增下列內容:
```ini
# Copyright 2025 林博仁(Buo-ren Lin) <buo.ren.lin@gmail.com>
# SPDX-License-Identifier: CC-BY-SA-4.0
[Unit]
Description=Restart the Xochitl service after the /home filesystem is mounted.
Documentation=https://hackmd.io/@brlin/remarkable-chinese-support-tutorial
Documentation=https://gitlab.com/brlin/remarkable-chinese-text-rendering-workaround
After=home.mount
Requires=home.mount
BindsTo=home.mount
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart xochitl.service
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
```
:::info
**附註:** 於 FileZilla SFTP 客戶端軟體的具體操作流程:
1. 點擊「遠端站台」面板上側的文字輸入框,輸入 `/etc/systemd/system` 後按下 Enter 鍵進到該目錄。
1. 於下方檔案列表子面板開啟任一檔案的{情境(右鍵)選單|context menu},然後選取「建立新檔案(T)」選項建立新的檔案。

1. 於「建立空檔案」對話框的文字輸入框輸入 `restart-xochitl-after-home.service` 然後點擊下方的「確定(O)」按鈕完成建立檔案操作。
")
1. 開啟 `restart-xochitl-after-home.service` 檔案的{情境(右鍵)選單|context menu},然後選取「檢視/編輯(V)」選項於純文字文件編輯器開啟該檔案。
1. 於純文字文件編輯器中貼上先前所述之檔案內容然後於存檔後關掉編輯器。
1. 過幾秒之後 FileZilla 應會彈出「檔案已改變」對話框,點擊下方的「完成編輯並且刪除本地檔案(F)」勾選框以及「是(Y)」按鈕重新上傳變更後的檔案。

:::
:::info
**附註:** 如果使用 Vim 命令列界面文字編輯器編輯檔案時亂碼可以使用下列方式規避問題:
```bash
TERM=xterm vim /etc/systemd/system/restart-xochitl-after-home.service
```
:::
然後於 SSH 客戶端中執行下列命令重新載入 systemd 服務管理器設定:
```bash
systemctl daemon-reload
```
接著執行下列命令確認 systemd 有讀到新的設定檔:
```bash
systemctl status restart-xochitl-after-home.service
```
其應該要有類似下面這樣的輸出:
```text
○ restart-xochitl-after-home.service - Restart the Xochitl service after the /home filesystem is mounted.
Loaded: loaded (/etc/systemd/system/restart-xochitl-after-home.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://hackmd.io/@brlin/remarkable-chinese-support-tutorial
https://gitlab.com/brlin/remarkable-chinese-text-rendering-workaround
```
接著執行下列命令測試設定:
```bash
systemctl start restart-xochitl-after-home.service
```
此時 reMarkable 主應用程式應會重新啟動、顯示鎖定畫面(如果有),並在解除鎖定一分鐘內正常回到主畫面。
然後於 SSH 客戶端軟體中執行下列命令設定於裝置啟動、掛載 /home 檔案系統後自動啟動 `restart-xochitl-after-home.service` 這個服務:
```bash
systemctl enable restart-xochitl-after-home.service
```
最後於 reMarkable 主選單 > General 頁面點擊下方的「Restart」按鈕重新啟動裝置,此時中文文字應能持續正常顯示。
### 禁用系統軟體的自動更新功能
我們先前所作的修改會於系統軟體更新時被覆寫,為避免哪一天中文文字顯示因為系統軟體更新意外失效故我們要禁用系統軟體的自動更新功能。
:::info
**注意:** 為修正安全漏洞與軟體缺陷您仍應定期更新系統軟體,並在完成系統軟體更新後依照本教學的操作重新設定。
:::
於 reMarkable 主選單 > General > Paper tablet > Software 頁面的 Updates 區段將自動更新系統軟體的勾選框取消勾選即可完成設定,日後要更新系統軟體可以點擊頁面上方的「Check for updates」按鈕手動檢查與進行系統軟體更新。
## 參考資料
撰寫本文件期間參考了下列資料:
* [Glyph availability | Unicode input - Wikipedia](https://en.wikipedia.org/wiki/Unicode_input#Glyph_availability)
說明「{豆腐|tofu}」這個{字形|glyph}的來源。
* [Recommendations for OpenType Fonts (OpenType 1.9.1) - Typography | Microsoft Learn](https://learn.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph)
說明 .notdef 字形的來源。
* [What is tofu in graphic design - Creatopy](https://www.creatopy.com/blog/what-is-tofu/)
說明豆腐字形的概念。
* [Developer mode for the reMarkable Paper Pro](https://support.remarkable.com/s/article/Developer-mode)
說明如何啟用 reMarkable Paper Pro 的開發者模式。
* [中間人攻擊 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB)
說明中間人攻擊的概念。
* [SSH文件傳輸協議 - 維基百科,自由的百科全書](https://zh.wikipedia.org/wiki/SSH%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE)
說明 SFTP 的概念。
* [Developer Mode | reMarkable
Developer Portal](https://developer.remarkable.com/documentation/developer-mode)
說明如何讓使用者可以修改 reMarkable Paper Pro /etc 目錄下的設定檔。
## 授權條款
除特別註明之內容外,本文件採用 [4.0 國際版或其任意更近期版本之 Creative Commons BY-SA 授權條款](https://creativecommons.org/licenses/by-sa/4.0/deed.zh-hant)發布供大眾於 _授權範圍內_ 自由使用。
如有授權範圍外之使用需求請洽詢 <buo.ren.lin+legal@gmail.com>。
<style>
/* 調大旁註文字的字元大小 */
rt{
font-size: 10pt;
}
</style>