rm-shot
June 11, 2026 · View on GitHub
A xovi extension that provides screenshot functionality for reMarkable tablets.
Just Need To Install This To Use Something Else?
Dependencies
- xovi - Extension framework
- framebuffer-spy - Required to access the framebuffer address
- xovi-message-broker - Required for QML/C communication
Installation
- Ensure dependencies are installed
- Download the
.sofile for your architecture from the latest release and place it in/home/root/xovi/extensions.d/on your reMarkable tablet- reMarkable 2:
rm-shot-armv7.so - reMarkable Paper Pro:
rm-shot-aarch64.so
- reMarkable 2:
- Restart xovi
Checking Version
To verify which version of rm-shot is installed:
strings /home/root/xovi/extensions.d/rm-shot-*.so | grep "rm-shot version"
Want To Build Something Using This?
Features
- Automatic device detection
- Timestamped screenshot filenames (
screenshot_YYYY-MM-DD_HH-mm-ss.png) - Configurable screenshot destination
- Configurable delay for UI animations to complete
Parameter Format
The parameter format is "path[,delay_ms[,rotation[,left,top,right,bottom]]]".
- path: Directory for a timestamped file, or a
.pngfilename to save exactly there. Missing directories are created. - delay_ms (optional): Milliseconds to wait before capturing (useful for closing UI elements).
- rotation (optional):
0-3, matching xochitl's orientation (1= 90°).0or omitted means no rotation. - left,top,right,bottom (optional): Crop rectangle in the rotated image's coordinates. All four required.
Examples:
"/home/root"- Immediate capture, saves to /home/root/"/home/root/screenshots,100"- Wait 100ms, saves to /home/root/screenshots/"/home/root/shot.png"- Saves to that exact file"/home/root,0,1"- Rotate for a device at 90°"/home/root,0,0,10,10,200,300"- Crop to (10,10)-(200,300)
Shell Usage
echo '>etakeScreenshot:/home/root/screenshots,100' > /run/xovi-mb; cat /run/xovi-mb-out
QML Usage
import net.asivery.XoviMessageBroker 2.0
Item {
XoviMessageBroker {
id: screenshotBroker
}
Button {
onClicked: {
// Basic usage (no delay, saves to /home/root)
var result = screenshotBroker.sendSimpleSignal("takeScreenshot", "/home/root");
// With delay (waits 100ms before capture)
var result = screenshotBroker.sendSimpleSignal("takeScreenshot", "/home/root/screenshots,100");
// Check result
if (result === "success") {
console.log("Screenshot thread started");
} else {
console.log("Screenshot failed to start");
}
}
}
}
Building
make
This builds both architectures:
rm-shot-aarch64.so- For reMarkable Paper Prorm-shot-armv7.so- For reMarkable 2
License
Copyright (C) 2025 Mitchell Scott
Licensed under the GNU General Public License v3.0.