reMarkable Paper Pro: 電子ペーパー端末の軽い紹介と少しHacking

reMarkable Paper Pro: 電子ペーパー端末の軽い紹介と少しHacking
Page content

ePaperタブレット + SSH

カラーな電子ペーパー端末「reMarkable Paper Pro」の登場を知り、タブレット欲しい病が再発した。紹介動画を見ていると、ペンの反応性は良さそうで気ままに落書きができそうだし、11.8インチならばA4サイズのPDFファイルを等倍近くで閲覧できることは確実。数日間の悩みを経て2024-10-03に発注し、2024-10-11に着荷した。

タブレット選びの際、比較対象として常に心に引っかかるのは絶対王者「iPad」だ。しかしながら私は、非常に偏った端末に惹かれる性の導きに従い、無難を志向する理性を捨てて変態シンプルなほうを選んだわけである。さらにreMarkableタブレットは、Developer Modeに切り替えるとSSHログインが可能になるという。この端末は面白そうとしか思えぬ。

  • 紹介動画:

購入したもの

種別商品名金額(円)購入店
電子ペーパータブレットreMarkable Paper Pro86,000remarkable.com
カバーBook Folio (Mosaic weave, Cobalt)23,880remarkable.com
セット割引Folio discount-1,880
専用ペンMarker Plus21,800remarkable.com
合計(3点)129,800

すべてを純正品で揃えた状態。私の発注時にはreMarkable Paper Proのカバーは上記の純正品しか見当たらなかったため、選択の余地無しだった。しかし現在 (記事執筆時点) ではサードパーティ製の下記のような安価なカバーも存在していそうだ。出費を抑えるための選択としてありと思われる。

Miimall 対応 Remarkable Paper Pro 保護ケース クリア ペン収納付き 耐衝撃 落下防止 傷防止 reMarkable 2024年発売 電子ペーパータブレット用 TPU製 スリム軽量 透明 指紋防止 滑り止め ペンホルダー付き 薄型 リマーカブル プロ全面保護カバー

Miimall 対応 Remarkable Paper Pro 保護ケース クリア ペン収納付き 耐衝撃 落下防止 傷防止 reMarkable 2024年発売 電子ペーパータブレット用 TPU製 スリム軽量 透明 指紋防止 滑り止め ペンホルダー付き 薄型 リマーカブル プロ全面保護カバー

Miimall

セットアップ〜使い方

電子ペーパータブレットとしての一般的なレビューは、他の方々の詳細な記事や動画に任せて、ここでは簡単に。

  • reMarkable Paper Proの開封時の画面。ここから電源をONしてセットアップを進めていく。UIは全体的にモノクロームで統一されていて、これがカラーの電子ペーパー搭載端末であることを思い起こさせない。ミニマム感が渋い
  • Wi-Fiを設定してインターネットと接続後、本体ソフトウェアを最新のVersion 3.14.4.0へ更新した
  • 重量は本体+カバー+専用ペンの合計で実測「777g」。本体の金属フレーム部分やペンの質感はとても良い
  • 使い方については全般を網羅している公式動画を一通り眺めるのが良い。たとえば03:50からは「2本指タップでUndo」といったジェスチャーによる操作方法が紹介されており、百聞は一見に如かずで必見だ

ジェスチャーによる操作方法

ジェスチャーによるreMarkable Paper Proの操作方法を、上記の動画から抜き出して表にまとめた。

操作内容
画面上端から下へスワイプファイルを閉じる
右へスワイプ前のページに戻る
左へスワイプ次のページに進む
最後のページでの「+」ボタン新規ページを追加する
上下のスワイプページのスクロール
2本指でパンページ内の移動
2本指のピンチページの拡大
2本指のタップUndo
3本指のタップRedo
2本指で画面上端から下へスワイプドロワーを開く (Recent, Favorites)
画面右上から下へスワイプクイック設定を開く
画面下端から上へスワイプスライドバーにてファイル内のページ切り替え

注意点, Tips

  • ソフトウェアキーボードで打つことができるのはアルファベット圏の文字のみで、日本語変換は現時点では実装されていない。この仕様を私は購入前には把握済みで、キーボードはほとんど使わないつもりなので特に問題なし
  • 内蔵の読書灯 (リーディングライト) の明るさは、おそらく大部分の人が抱く期待値よりも暗いだろう。はっきり言って手元にあるKindle Paperwhite (M2L4EK) よりも暗い
  • ウェブ上のHTMLコンテンツは、Read on reMarkable - Google Chrome ExtensionというChrome拡張を使うとreMarkable端末へ持ち出して読むことができる。「Send as text (EPUB形式への変換と思われる)」と「Send as PDF (PDF印刷と同じ?)」の2つのモードがある
  • ペンで2点間の直線を描こうとするとき、1点目から線を引き始めて2点目でペンをしばらく画面上に置いたままにしておくと、フリーハンドの軌跡が完全な直線へと変換されて、かつペン先の動きに直線の終端が追従してくるので、直線の角度を調整してから確定することができる。下記動画の26:50から実演されている

少しHacking

Linux端末としてはどうか。ここからはreMarkable Paper ProへのSSHアクセスを用いるので、公式ページの次の手順でSSHログイン可能なように設定変更しておく。

日本語フォントの導入

初期状態では、PDF/EPUBファイルのファイル名の日本語部分、EPUBファイル本文の日本語部分が文字化けするので、日本語フォントを導入する。私はNoto Sans JapaneseNoto Serif Japaneseを次のように保存した。保存後、フォントキャッシュの再作成または本体再起動を行う。

root@imx8mm-ferrari:~# ls -al ~/.local/share/fonts/ttf/noto/
drwxr-xr-x    2 root     root          4096 Oct 11 17:15 .
drwxr-xr-x    3 root     root          4096 Oct 11 17:25 ..
-rw-r--r--    1 root     root            36 Oct 11 17:05 .uuid
-rw-rw-r--    1 root     root       5722924 Aug  7 17:27 NotoSansJP-Black.ttf
-rw-rw-r--    1 root     root       5728064 Aug  7 17:27 NotoSansJP-Bold.ttf
-rw-rw-r--    1 root     root       5725300 Aug  7 17:27 NotoSansJP-ExtraBold.ttf
-rw-rw-r--    1 root     root       5737436 Aug  7 17:27 NotoSansJP-ExtraLight.ttf
-rw-rw-r--    1 root     root       5736988 Aug  7 17:27 NotoSansJP-Light.ttf
-rw-rw-r--    1 root     root       5729568 Aug  7 17:27 NotoSansJP-Medium.ttf
-rw-rw-r--    1 root     root       5733060 Aug  7 17:27 NotoSansJP-Regular.ttf
-rw-rw-r--    1 root     root       5726852 Aug  7 17:27 NotoSansJP-SemiBold.ttf
-rw-rw-r--    1 root     root       5736120 Aug  7 17:27 NotoSansJP-Thin.ttf
-rw-rw-r--    1 root     root       8031052 Sep 23 22:44 NotoSerifJP-Black.ttf
-rw-rw-r--    1 root     root       8033348 Sep 23 22:44 NotoSerifJP-Bold.ttf
-rw-rw-r--    1 root     root       8032452 Sep 23 22:44 NotoSerifJP-ExtraBold.ttf
-rw-rw-r--    1 root     root       8037984 Sep 23 22:44 NotoSerifJP-ExtraLight.ttf
-rw-rw-r--    1 root     root       8039096 Sep 23 22:44 NotoSerifJP-Light.ttf
-rw-rw-r--    1 root     root       8037964 Sep 23 22:44 NotoSerifJP-Medium.ttf
-rw-rw-r--    1 root     root       8039120 Sep 23 22:44 NotoSerifJP-Regular.ttf
-rw-rw-r--    1 root     root       8036184 Sep 23 22:44 NotoSerifJP-SemiBold.ttf

パッケージ管理のToltec →現時点は未対応

カスタムLinuxで動作しているreMarkableタブレット向けに、Toltecというパッケージ管理システムがコミュニティによって開発されているらしい。これがreMarkable Paper Proでも利用できるのだろうと、購入前の調査時には安直に考えていたのだが、話はそう簡単ではないと後に分かった。下記のIssueによると、reMarkable Paper Proの本体ソフトウェアのVersion 3.14系に、Toltecが対応する見通しはまだ無いとのこと。現時点では仕方がない……。

Tailscaleに挑戦 →とりあえずは動かせる

Toltecが使えればTailscaleはパッケージ導入できるそうだが、とりあえずここではTailscaleを自力でビルドして動かしてみることにする。先代の端末reMarkable 2へTailscaleを導入している下記ページの方法を参考にしている。

なお、今回の試みにおいて完全には解決できていない問題が1つあり、Step-4で暫定的な対策をしている。

Step-1. 手元PCにて準備

  1. 手元PC (今回はUbuntuを使用) にhttps://github.com/cceckman/homelab/blob/main/remarkable/tailscale.shソースコードをダウンロードする
  2. ダウンロードしたtailscale.shのバックアップを作成する: cp -a ./tailscale.sh{,.original}
  3. tailscale.shを次のように編集する: vim ./tailscale.sh
    • TSPATH: 単に好みのPATHへ変更
    • GOARCH: reMarkable Paper Proは「arm64」っぽいので変更
    • ln -sf…: Tailscaleのstateを本体再起動時も保持するための変更
    • tailscale up -ssh: TailscaleのSSH機能を使うためオプション追加
    • rsync … root@: 実験環境のreMarkable端末の状態に合わせて変更
$ diff -p tailscale.sh{.original,}
*** tailscale.sh.original	2024-10-20 23:17:35.320516705 +0900
--- tailscale.sh	2024-10-22 01:51:32.425947660 +0900
*************** build_tailscale() {
*** 31,37 ****
    # Build Tailscale:
    # https://github.com/fako1024/go-remarkable
    # This is where I usually download things - not necessarily GOMODCACHE.
!   TSPATH="$HOME"/r/github.com/tailscale/tailscale
    if ! test -d "$TSPATH"
    then
      echo >&2 "Downloading tailscale source..."
--- 31,38 ----
    # Build Tailscale:
    # https://github.com/fako1024/go-remarkable
    # This is where I usually download things - not necessarily GOMODCACHE.
!   # TSPATH="$HOME"/r/github.com/tailscale/tailscale
!   TSPATH="$HOME"/tmp/src/github.com/tailscale/tailscale
    if ! test -d "$TSPATH"
    then
      echo >&2 "Downloading tailscale source..."
*************** build_tailscale() {
*** 50,56 ****
    # Use https://tailscale.com/kb/1207/small-tailscale,
    # and tags+flags pulled from build_dist.
    echo >&2 "Building tailscale..."
!   GOOS=linux GOARCH=arm GOARM=7 \
      go build \
      -C "$TSPATH" \
      -o "$CONTENT"/tailscale.combined \
--- 51,58 ----
    # Use https://tailscale.com/kb/1207/small-tailscale,
    # and tags+flags pulled from build_dist.
    echo >&2 "Building tailscale..."
!   # GOOS=linux GOARCH=arm GOARM=7 \
!   GOOS=linux GOARCH=arm64 \
      go build \
      -C "$TSPATH" \
      -o "$CONTENT"/tailscale.combined \
*************** set -x
*** 84,89 ****
--- 86,92 ----
  ln -sf $TSINSTALLPATH/tailscale.combined /usr/bin/tailscale
  ln -sf $TSINSTALLPATH/tailscale.combined /usr/sbin/tailscaled
  ln -sf $TSINSTALLPATH/tailscaled.service /etc/systemd/system/tailscaled.service
+ ln -sf $TSINSTALLPATH/tailscaled.state /var/lib/tailscale/tailscaled.state
  set +x
  
  # Tailscale expects some configuration in a drop-in unit or config files;
*************** systemctl daemon-reload
*** 104,117 ****
  echo >&2 "Starting tailscale..."
  systemctl enable tailscaled
  systemctl restart tailscaled
! tailscale up
  EOF
  chmod +x "$CONTENT/setup.sh"
  
  echo >&2 "Connecting and uploading..."
  ssh -o ConnectTimeout=5 root@"$TARGET" \
    "echo >&2 'Connected to reMarkable!'; rm -rf $TSINSTALLPATH; mkdir -p $TSINSTALLPATH" >&2
! rsync -avz "$CONTENT" "$TARGET:$TSINSTALLPATH"
  
  echo >&2 "Running setup script..."
  # Execute under systemd-run, so even if our network connection hangs up due to
--- 107,122 ----
  echo >&2 "Starting tailscale..."
  systemctl enable tailscaled
  systemctl restart tailscaled
! #tailscale up
! tailscale up -ssh
  EOF
  chmod +x "$CONTENT/setup.sh"
  
  echo >&2 "Connecting and uploading..."
  ssh -o ConnectTimeout=5 root@"$TARGET" \
    "echo >&2 'Connected to reMarkable!'; rm -rf $TSINSTALLPATH; mkdir -p $TSINSTALLPATH" >&2
! # rsync -avz "$CONTENT" "$TARGET:$TSINSTALLPATH"
! rsync -avz "$CONTENT" "root@$TARGET:$TSINSTALLPATH"
  
  echo >&2 "Running setup script..."
  # Execute under systemd-run, so even if our network connection hangs up due to
  1. 実行権限を付与する: chmod +x ./tailscale.sh

Step-2. tailscaleを起動

  1. reMarkable端末へSSHログインする: ssh -l root <reMarkable端末> # USB接続なら10.11.99.1
  2. デフォルトでのmount状態を確認する
# mount -v | grep 'on / '
/dev/mmcblk0p2 on / type ext4 (ro,relatime)
# mount -v | grep 'on /etc '
overlay on /etc type overlay (rw,relatime,lowerdir=/etc,upperdir=/var/volatile/etc,workdir=/var/volatile/.etc-work)
  1. ストレージの書き換えが行えるようにmount状態を変更する
# umount -l /etc
# mount -o remount,rw /
  1. 手元PCでtailscale.shを実行する: ./tailscale.sh <reMarkable端末> # 10.11.99.1
$ ./tailscale.sh <reMarkable端末>
(途中省略)
Running setup script...
Running as unit: run-r50e661dcf08b40999cb907ee5f751e99.service
  1. reMarkable Paper ProにSSHログインして、上記実行の最後に表示されたサービス名のstatusを確認する
$ ssh -l root <reMarkable端末> # 10.11.99.1
# systemctl status run-r50e661dcf08b40999cb907ee5f751e99.service
(途中省略)
Oct 20 14:42:16 imx8mm-ferrari setup.sh[1298]: To authenticate, visit:
Oct 20 14:42:16 imx8mm-ferrari setup.sh[1298]:         https://login.tailscale.com/a/**************
  1. 表示されているURLへ手元PCのブラウザでアクセスする: open https://login.tailscale.com/a/**************
  2. tailscaledサービスの状態を確認する
# systemctl status tailscaled.service
● tailscaled.service - Tailscale node agent
     Loaded: loaded (/etc/systemd/system/tailscaled.service; enabled; vendor preset: disabled)
     Active: active (running) since Sun 2024-10-20 14:42:12 UTC; 4min 20s ago

Step-3. Tailscaleの動作確認

  1. 手元PCからpingを打ってみる: tailscale ping <reMarkable端末のTailscale IPアドレス>
  2. 手元PCからTailscale SSHでログインしてみる
$ ssh -l root <reMarkable端末のTailscale IPアドレス>
# Tailscale SSH requires an additional check.
# To authenticate, visit: https://login.tailscale.com/a/************** # 別ブラウザで認証を行う
(途中省略)
root@imx8mm-ferrari:~# 

Step-4. 本体再起動後の対応

  1. reMarkble Paper Pro本体を再起動してしまうと、Tailscaleをサービス化しているファイルが削除された状態になる。そこで、Tailscaleを再びサービスとして動作させる次のスクリプトをreMarkable端末で実行する (私は~/after-reboot.shとして保存している)。
#!/bin/bash

set -eux -o pipefail

# after-reboot.sh (Ver.20241022)

ln -sf ~/tailscale/tailscaled.service /etc/systemd/system/tailscaled.service
mkdir -p /var/lib/tailscale/ ; ln -sf ~/tailscale/tailscaled.state /var/lib/tailscale/tailscaled.state
systemctl daemon-reload
systemctl start tailscaled.service
systemctl status tailscaled.service

追記 [2024-10-24]: スリープ時の壁紙を変更

次のページに、スリープ時に表示される壁紙を差し替える方法が紹介されていた。簡単なのでさっそくやってみた。

  1. お好みの画像を横1620x縦2160pxのPNG形式で保存する (たとえば上記ページで紹介されている、reMarkableが布団に潜っている画像は1404x1872のようなので拡大しておく)
  2. reMarkble Paper Proでmount -o remount,rw /してから、用意した画像を/usr/share/remarkable/suspended.pngへ上書きする

仮の結論

reMarkable Paper Proは最新ハードウェアだけあって、落書き用の電子ペーパー端末としてかなり優れていると思う。直感的に操作できて、使っていてストレスの少ない、素朴で素敵な道具だ。しかし本記事ではその感触にはあえて触れず、むしろhackableかどうかを確認してみようとした。

reMarkable Paper ProをLinux端末としてみた場合の現段階の結論としては、やはりパッケージ管理システムを利用できる状態が待ち遠しい。先代の機種と同様にOSやファイルシステムの解析が進んでいけば、それは間違いなく成し遂げられるだろうと予想する。なお、私の環境ではTailscaleはとりあえず開通できたので、たとえば自前のサーバからファイルの定期的なrsyncを行うような仕組みは作れそうな気がする。

参考リンク