Владелец нашёл свой старый планшет reMarkable 2, купленный в 2021 году и простоявший без использования около четырёх лет. Устройство было в печальном состоянии:

  • Синхронизация с облаком не работала. Вместо нормального сообщения показывалась загадочная error 0.
  • Обновление программного обеспечения не срабатывало.

Ниже описан путь восстановления устройства для тех, кто окажется в похожей ситуации.

Часы

Поиск по тексту ошибки привёл на форумный тред, где автор одного из сообщений назвал своё решение «быстрым способом»: подключиться по SSH и выставить время вручную:

ssh root@10.11.99.1          # 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

После установки времени загрузка обновления прошивки заработала.

Обновление: этот сценарий сбоя также описан в официальной статье поддержки reMarkable: рассинхронизация системных часов устройства может блокировать обновление ПО.

Обновление ПО

После первого обновления синхронизация с облаком выдала уже другую ошибку — HTTP 400. Реальное сообщение об ошибке нашлось в журнале: «Unable to sync. Please update this application to continue using the reMarkable cloud».

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

Облачный сервис отказывался работать с устаревшей версией системы. Оказалось, что первое обновление подняло планшет только до версии 3.11.2.5 и дальше не двигалось.

Журнал swupdate.service показал ошибку Couldn't resolve host name — после перезагрузки, вызванной обновлением, служба обновления запустилась раньше, чем поднялись wifi и DNS, и повторных попыток не делала. Перезапуск служб обновления вручную позволил в настройках увидеть версию 3.27.3.0, а второе обновление подняло систему до последней доступной версии.

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

Начиная с версии 3.22 обновление ПО тихо отключает SSH по wifi: порт 22 в локальной сети больше не отвечает.

Подключиться к планшету по SSH теперь можно только через USB (например, по адресу 10.11.99.1). SSH по сети можно включить обратно командой rm-ssh-over-wlan on либо созданием маркерного файла rm_enable_ssh_wifi_marker (юнит dropbear-wlan.socket при этом уже включён, просто неактивен):

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

Загрузка файлов по SSH

По неясной причине синхронизация с облаком всё ещё оставалась сломанной — новые загруженные файлы не подтягивались на устройство.

Вместо дальнейшего разбирательства с облачной синхронизацией (на этом этапе желание разбираться с ней иссякло) нашёлся более простой путь: на планшете есть опциональный веб-сервер, который можно включить, чтобы загружать и экспортировать файлы напрямую с устройства. Перед включением параметра WebInterfaceEnabled=true конфигурация xochitl была сохранена в бэкап:

conf=/home/root/.config/remarkable/xochitl.conf
cp -p "$conf" "$conf.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

Обновление: веб-сервер можно включить и через интерфейс устройства — в разделе Settings → General settings → Storage → USB web interface.

Проверка списка файлов и загрузка PDF:

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

После этого новые файлы находятся и открываются в разделе «Мои файлы». Облачную синхронизацию так и не удалось восстановить, но загрузка файлов по SSH оказалась удобнее в любом случае.