唤醒一台四年前的 reMarkable 2
Reviving a four year old reMarkable 2

原始链接: https://oskrim.github.io/hardware/2026/08/09/remarkable-over-ssh.html

如果你的 reMarkable 2 已长期闲置,可能会因系统时间过旧和软件版本陈旧而遇到同步错误或更新失败的问题。若要恢复功能,请通过 USB 使用 SSH 连接设备,并使用 `timedatectl` 命令手动校正系统时间。完成更新后,如果云同步仍不稳定,你可能需要重启更新服务(`swupdate` 和 `update-engine`)以强制将设备升级到最新版本。 请注意,近期的更新出于安全考虑禁用了 Wi-Fi 下的 SSH 功能;如有需要,你可以通过终端命令重新启用。如果更新后云同步依然失败,一个可靠的替代方案是启用设备内置的网页界面。通过修改 `xochitl.conf` 文件,将 `WebInterfaceEnabled=true` 设置为开启并重启服务,你便可以完全绕过云端,直接通过浏览器或 cURL 上传和导出文件。这种方法既能规避有问题的云服务,又能提供一种稳定的文档管理方式。

Hacker News 社区最近讨论了一篇关于“复活”一台四年旧的 reMarkable 2 平板电脑的文章。这场对话引发了关于该设备究竟是“过时”了,还是仅仅存在云同步错误等轻微软件问题的争论。 许多用户强调,reMarkable 2 的主要价值在于其“可破解性”。由于它运行基于 Linux 的操作系统,并具备可访问的 SSH、root 权限和 Web 服务器功能,用户可以绕过制造商提供的功能有限且偶尔出错的软件。爱好者们经常使用 reManager、KOreader 或自定义脚本等第三方工具,为这些硬件注入新的活力,并指出此类设备在二手市场上往往价格低廉。 尽管一些评论者批评维护现代设备需要这种“咒语”式的手动操作,但另一些人则称赞这种社区驱动的生态系统,它使用户能够保留对硬件的控制权。讨论还涉及了数字笔记(以可搜索性、同步和编辑功能见长)与传统纸张(在持久性和可靠性方面仍是黄金标准)之间的哲学分歧。归根结底,这个讨论串将 reMarkable 2 定义为一种长期且对开发者友好的工具,而非一次性的小玩意,前提是用户愿意去探索其开放的架构。
相关文章

原文

I found my old reMarkable 2 paper tablet, bought in 2021, it had sat unused for ~4 years or so. The device was in a sorry state:

  • Cloud sync failing. The only thing showing was a cryptic error 0.
  • Software update didn’t work.

This post details how you might be able to bring your tablet back to working order if you find yourself in a similar situation.

The clock

Googling the error I found a forum post with what its author called “the fast solution”, SSH in, set the clock:

ssh [email protected]          # USB. over wifi: the tablet's LAN IP
# password: on the tablet, Settings → Help → Copyrights and licenses → General info
# (username root, password, IPs all listed there)

timedatectl                  # confirm how far off it is
timedatectl set-ntp 0        # disable auto time first, or set-time errors out
timedatectl set-time '2026-07-15'
timedatectl set-ntp 1

After setting the time, I was able to download a software update.

Software update

After the first software update, cloud sync now gave me a different error: HTTP 400. I found the actual error message in the journal: “Unable to sync. Please update this application to continue using the reMarkable cloud.”

journalctl -u rm-sync.service --since '-45 min' --no-pager

The cloud was rejecting my obsolete system version. Turns out the first update only brought the tablet to 3.11.2.5 and wouldn’t update further.

journalctl for swupdate.service showed Couldn't resolve host name (after the post-update reboot, the updater had started before wifi/DNS was up and never retried). Restarting the update services made the Settings screen offer 3.27.3.0, and a second update brought the tablet to the latest available software version.

systemctl restart swupdate.service update-engine.service
systemctl is-active swupdate.service update-engine.service
journalctl --since '-1 min' -u swupdate.service -u update-engine.service

Starting with version 3.22 of the software, SSH over wifi is now silently disabled by the update, so port 22 refuses on the LAN.

SSH in to the tablet via USB (e.g. 10.11.99.1) instead. Re-enable network SSH with rm-ssh-over-wlan on, or drop the marker file rm_enable_ssh_wifi_marker (the dropbear-wlan.socket unit is already enabled, just inactive)

rm-ssh-over-wlan on
systemctl is-active dropbear-wlan.socket
systemctl is-enabled dropbear-wlan.socket
test -e /home/root/.config/remarkable/rm_enable_ssh_wifi_marker && echo present
ip -4 -brief address show wlan0
ss -lntp | grep ':22 ' || true

Importing files over SSH

For whatever reason, cloud sync still appeared to be broken, it wouldn’t pull any of my new uploads.

Instead of debugging this further (by now I was done dealing with the cloud sync), I found that the table has an optional web server that can be turned on, to allow you to upload and export files from the device. I backed up the xochitl config before toggling it on (WebInterfaceEnabled=true):

conf=/home/root/.config/remarkable/xochitl.conf
cp -p "$conf" "$conf.codex-backup-before-usb-web"
if grep -q '^WebInterfaceEnabled=' "$conf"; then
  sed -i 's/^WebInterfaceEnabled=.*/WebInterfaceEnabled=true/' "$conf"
else
  sed -i '/^\[General\]$/a WebInterfaceEnabled=true' "$conf"
fi
systemctl restart xochitl.service
grep '^WebInterfaceEnabled=' "$conf"
systemctl is-active xochitl.service

Inspect and upload PDFs:

curl --max-time 30 -sS http://10.11.99.1/documents/ | jq -r '.[].VisibleName'

set -e
for file in ./my-pdf-files/*.pdf; do
  name=${file##*/}
  status=$(curl --max-time 300 -sS -o /dev/null -w '%{http_code}' \
    -F "file=@${file};type=application/pdf" http://10.11.99.1/upload)
  printf '%s\t%s\n' "$status" "$name"
  test "$status" = 201
done
联系我们 contact @ memedata.com