用uinput模拟Wacom数位板:remarkable_mouse压感与倾斜支持的内幕
【免费下载链接】remarkable_mouseuse your reMarkable as a graphics tablet项目地址: https://gitcode.com/gh_mirrors/re/remarkable_mouse
remarkable_mouse是一个开源工具,它能把 reMarkable 墨水屏平板变成一块真正的图形数位板。通过 uinput 虚拟设备技术,它模拟出 Wacom 数位板的身份,让电脑完整识别压感与笔倾斜,绘图笔一挥,屏幕上的线条粗细随心而变。
为什么普通鼠标模式不够用?
安装 remarkable_mouse 后,默认使用 pynput 后端(见 pynput.py),它把笔尖坐标映射成鼠标移动、把接触事件映射成左键点击。问题在于:鼠标只有"按下/抬起"两个状态,压感和倾斜数据在传输过程中全部被丢弃。
想要笔锋粗细、倾斜角度这些"数位板级"体验,就需要--evdev模式——它的核心就是 uinput。
一键安装并开启压感模式
在插着 reMarkable 的电脑上执行:
pip install remarkable-mouse sudo --preserve-env=USER,PATH env remouse --evdev💡 压感模式需要 root 权限来创建虚拟输入设备,且仅限 Linux。SSH 密码可在 reMarkable 的设置菜单里查到,默认连接地址是
10.11.99.1。
运行后,libinput list-devices里会多出一台"数位板",Krita、MyPaint、Inkscape 等绘图软件会直接把它当硬件设备对待。
内幕一:给自己套上 Wacom 身份
在 evdev.py 的create_local_device中,程序通过libevdev创建了一个 uinput 虚拟设备,关键动作是"报户口":
- 设备名设为
reMarkable pen - 厂商 ID 填
0x056a——这正是 Wacom 的 USB 厂商号 - 启用
BTN_TOOL_PEN、BTN_STYLUS等数位笔按键能力
为什么要"冒充"Wacom?因为 Wacom 是数位板行业的标准协议,Linux 内核的 libinput 和几乎所有绘画软件都对它做了深度适配。只要设备声明自己是 Wacom 数位笔,就能白嫖整套驱动生态,无需单独写驱动。
内幕二:压感与倾斜靠"绝对坐标"传输
数位板和鼠标的本质区别在于坐标系:
| 能力 | 事件码 | 含义 |
|---|---|---|
| 位置 | ABS_X/ABS_Y | 绝对坐标,落点在哪就是哪 |
| 压感 | ABS_PRESSURE | 0~4095 的压力值,笔触粗细来源 |
| 距离 | ABS_DISTANCE | 笔尖离屏幕的高度 |
| 倾斜 | ABS_TILT_X/ABS_TILT_Y | 笔杆倾斜角度,影响书法笔刷 |
这些绝对轴的范围因硬件而异,在 common.py 中按机型分别定义:reMarkable 1 的笔坐标最大值为 20967×15725,而 Pro 版则是 11180×15340,倾斜范围也从 ±6400 扩大到 ±9000。程序通过读取/dev/input/touchscreen0的软链接指向,自动识别三代机型(rM1 / rM2 / Pro),并选择对应的 evdev 事件文件(如 rM1 的笔数据在/dev/input/event0)。
事件流水线:从墨水屏到 uinput
整条数据通路可以概括为"三站直达":
- SSH 隧道读数据——程序通过 SSH 在平板上执行
dd命令,把 evdev 原始事件流持续拉回主机(remarkable_mouse.py); - 解包与坐标重映射——按二进制格式解出每个事件,用 codes.py 中的码表还原出
ABS_X、ABS_PRESSURE等含义,再经过remap完成方向旋转与屏幕缩放; - 注入虚拟设备——处理后的事件通过
send_events写入 uinput,系统内核从此认为"一台 Wacom 数位板"正在工作。
全程无缓存、逐事件转发,这也是它能保持低延迟书写体验的原因。
常用参数微调:让笔感更顺手
--threshold 600:压感触发阈值,写起来太"敏感"就调大,太迟钝就调小--mode fit / fill / stretch:三种屏幕映射方式,绘画建议用fit保持比例--orientation right:按平板按键朝向选择,避免笔迹镜像--monitor 1:把数位板映射到指定显示器,多屏用户必备
常见问题
- 提示权限不足?用
sudo --preserve-env=USER,PATH env remouse --evdev运行; - Windows / macOS 用户?压感模式依赖 uinput,仅 Linux 可用,其他系统可退回鼠标模式;
- 笔迹和屏幕对不上?检查
--orientation是否与平板实际摆放方向一致。
写在最后
remarkable_mouse 用不到一千行代码,演示了一个经典玩法:uinput 是 Linux 虚拟输入设备的万能接口,声明正确的能力轴和厂商身份,就能让任何硬件"变"成系统熟悉的外设。下次想自制数位板、数位屏或游戏手柄时,这套思路同样适用。
项目构建与发布配置见 pyproject.toml,版本演进记录见 CHANGELOG.md。
【免费下载链接】remarkable_mouseuse your reMarkable as a graphics tablet项目地址: https://gitcode.com/gh_mirrors/re/remarkable_mouse
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考