Everything about the reMarkable Paper Tablet

User Tools

Site Tools




Handling Input

Reading raw events

Both reMarkable devices have 3 distinct devices:

Name Path on rM 1 Path on rM 2
Wacom Digitizer (Pen input) /dev/input/event0 /dev/input/event1
Multitouch (Finger input) /dev/input/event1 /dev/input/event2
GPIO (Buttons) /dev/input/event2 /dev/input/event0

These devices are standard linux evdev devices. This struct are the binary packets it spits out. All input event codes can be found here (or here for relevant codes per device).

Toltec includes an evtest tool which might come handy during debugging. It gives you human readable output out of the evdev files. Here is also a simple python example that reads out the data of the Wacom pen without any libraries on the rM 1 (but every major programming language has a evdev library to make it easier).

Note that many launchers may grab, inject/overflow or intercept these input events to make switching between multiple running programs possible.

Here is an example of debugging the GPIO (Buttons) device and pressing the middle button on once (on a reMarkable 1):

reMarkable: /home/root/ evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      Wacom I2C Digitizer
/dev/input/event1:      cyttsp5_mt
/dev/input/event2:      gpio-keys
Select the device event number [0-2]: 2
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 102 (KEY_HOME)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 116 (KEY_POWER)
    Event code 143 (KEY_WAKEUP)
Testing ... (interrupt to exit)
Event: time 1611410679.061331, type 1 (EV_KEY), code 102 (KEY_HOME), value 1
Event: time 1611410679.061331, -------------- EV_SYN ------------
Event: time 1611410679.191312, type 1 (EV_KEY), code 102 (KEY_HOME), value 0
Event: time 1611410679.191312, -------------- EV_SYN ------------

libremarkable is a library for the reMarkable in Rust that contains logic to read the inputs of both the reMarkable 1 and 2.

QT applications also support most types of input by default with the provided libraries. Though you might also want to look into Oxide's APIs for improved multitasking support / launcher integration.


Oxide handles informing you of buttons being held in the API, but not normal button presses. Oxide never lets power button presses through (code, so only useful for rM1).

You have triggers in the Oxide API for when your device wakes from sleep (deviceResuming, but make sure your app is a background(able) app).

A bug to be aware of when using Oxide: Launching remarkable-hacks patched xochitl with Oxide breaks L+R shortcut for Zen Mode


You can have a look at button-capture-reMarkable (don't know whether this still works).

This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
devel/handling_input.txt · Last modified: 2021/01/23 15:14 by linuscde