This is a simple program that takes input from a reMarkable tablet (only for rm2 right now, might work on rmpp too but untested) and converts it into libinput devices. This project only works on linux, and is only tested on wayland.
Features:
- Pen input (position, pressure and tilt)
- Touch input (multi-touch gestures, tapping and moving)
- Configurable palm rejection (disables touch input for a configurable grace period if any pen input is detected, default 500ms)
- Screen orientation support (portrait, landscape-right, landscape-left, inverted)
- Input grab (enabled by default): A small helper binary is uploaded to
/tmpon the tablet and usesEVIOCGRABto exclusively grab the input devices. The tablet UI (xochitl) keeps running but receives no pen/touch events. The grab is automatically released when rm-pad exits or the SSH connection drops — no reboot or manual cleanup needed. Use--no-grab-inputto disable. - Works over both wifi and USB
- Very low latency (as long as your connection to the tablet is fast)
- Runs in userspace (as long as your user is allowed to create input devices)
- Debug mode:
rm-pad dump touchorrm-pad dump pento dump raw input events
Either build it yourself, use the prebuilt binaries from GitHub releases.
I haven't added this to the AUR yet, but I've created a PKGBUILD, so you can install it easily on arch:
git clone https://aur.archlinux.org/rm-pad.git
cd rm-pad
makepkg -si
The package includes a udev rule for uinput access and a systemd user service. After installation, follow the setup instructions below.
You'll need Rust and C cross-compilers for ARM:
Ubuntu/Debian:
sudo apt install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnuArch Linux:
sudo pacman -S arm-linux-gnueabihf-gcc aarch64-linux-gnu-gccYou can also set ARMV7_CC and AARCH64_CC environment variables to point to your cross-compilers.
Then build with:
cargo build --releaseFor passwordless SSH access, copy your SSH key to the tablet:
ssh-copy-id root@10.11.99.1If connecting over WiFi, replace 10.11.99.1 with your tablet's IP address. The default password is usually root (or check your reMarkable documentation).
To allow rm-pad to create virtual input devices, you need to set up udev rules:
sudo cp data/50-uinput.rules /etc/udev/rules.d/
sudo groupadd -f uinput
sudo usermod -aG uinput $USERThen log out and back in (or reboot), and reload udev rules:
sudo udevadm control --reload-rulesrm-pad can run as a persistent user service that automatically reconnects whenever the tablet becomes reachable:
- Install the systemd service:
mkdir -p ~/.config/systemd/user
cp data/rm-pad.service ~/.config/systemd/user/- Enable and start the service:
systemctl --user enable --now rm-pad.serviceThe service runs in the background and handles connection/disconnection automatically — just plug in your tablet and it starts forwarding input. When you unplug, it detects the disconnection and waits for the next connection.
This defaults to only running when connected over USB. You can modify the service file if you want it to work over wifi, but then you can't use your remarkable while on wifi and the experience is often subpar over a wireless connection.
Config file search order:
RMPAD_CONFIGenvironment variable (if set)./rm-pad.toml(current directory)~/.config/rm-pad.toml(user config directory)
Copy the rm-pad.toml.example file to one of these locations (recommended: ~/.config/rm-pad.toml) and change the options to your preferences.
- host: reMarkable tablet IP address or hostname. Default is
10.11.99.1(USB connection). For WiFi, use your tablet's IP address. - key_path: Path to SSH private key for authentication. Defaults to your default SSH key (
~/.ssh/id_ed25519,~/.ssh/id_rsa, etc.). Only used ifpasswordis not set. - password: Root password for SSH authentication. If set,
key_pathis ignored. Warning: Restrict file permissions withchmod 600if storing password in config file.
You can also use environment variables:
RMPAD_HOST: Override hostRMPAD_PASSWORD: Override passwordRMPAD_CONFIG: Override config file path
- touch_only: Run touch input only (no pen)
- pen_only: Run pen input only (no touch)
- grab_input: Grab input exclusively (prevents tablet UI from seeing input, default:
true) - no_palm_rejection: Disable palm rejection
- palm_grace_ms: Palm rejection grace period in milliseconds (default: 500)
- orientation: Screen orientation -
portrait,landscape-right(default),landscape-left, orinverted
All options can also be set via command-line flags. Run rm-pad --help for details.
Run rm-pad to start forwarding input. The program will automatically reconnect if the connection drops.
For debugging, use the dump command:
rm-pad dump touch # Dump raw touch events
rm-pad dump pen # Dump raw pen events