remarkable_mouse代码全解:10分钟读懂核心模块、事件循环与数据流

发布时间:2026/8/27 15:51:48
remarkable_mouse代码全解:10分钟读懂核心模块、事件循环与数据流 remarkable_mouse代码全解10分钟读懂核心模块、事件循环与数据流【免费下载链接】remarkable_mouseuse your reMarkable as a graphics tablet项目地址: https://gitcode.com/gh_mirrors/re/remarkable_mouseremarkable_mouse 是一个用 Python 编写的开源工具能把 reMarkable 电子墨水平板变成电脑的图形数位板——只需 USB 连线就能用笔在平板上画、用鼠标操控电脑。本文带你 10 分钟读懂它的核心模块、SSH 连接、事件循环与坐标数据流新手也能看懂整个项目的运行逻辑。remarkable_mouse 是什么把 reMarkable 变成图形数位板reMarkable 是一款以手写笔记闻名的墨水屏平板但小屏幕没法直接当绘图板用。remarkable_mouse 的做法是程序运行在电脑上通过平板自带的 SSH 服务远程读取它的笔输入原始数据再转换成电脑上的鼠标或数位板事件。30 秒上手在插上平板的主机上执行pip install remarkable-mouse remouse默认使用平板地址10.11.99.1、USB 口朝右的方向、填满整块屏幕的模式零参数即可运行。项目结构速览6 个小文件组成完整数位板整个项目非常精简一个下午就能读完各文件分工如下文件职责remarkable_mouse.py入口解析参数、SSH 连接、检测平板版本common.py三代 reMarkable 设备模型、坐标重映射、屏幕选择pynput.py默认后端事件循环 鼠标模拟evdev.pyLinux 后端创建虚拟数位板支持压感与倾斜codes.pyLinux 输入事件编号 → 名称的映射表自动生成main.py两行引导入口调用 main()下图是接入 USB 当数位板使用的 reMarkable 真机效果读懂入口 main()只做三件事main() 是程序的总调度逻辑非常直白解析命令行参数地址、密钥、方向、缩放模式等全部由 argparse 定义建立连接调用 connect_rm() SSH 进平板返回对应型号的设备对象进入事件循环根据--evdev开关选择 pynput.py 或 evdev.py 后端调用其read_tablet()一直运行到手动停止。SSH 连接笔的信号如何从平板里拉出来connect_rm() 是全项目唯一处理网络的地方基于 paramiko 库认证方式按优先级自动降级--key指定密钥 →~/.ssh/config中的 remarkable 条目 →--password→ 默认密钥~/.ssh/remarkable→ 最后才提示手动输密码型号检测是个巧妙的技巧在平板上执行readlink -f /dev/input/touchscreen0看笔设备指向哪个节点——指向 event0 是 reMarkable 1event1 是 reMarkable 2event2 是 reMarkable Pro。三类设备分别在 common.py 中用reMarkable1/reMarkable2/reMarkablePro三个类表示各自记录笔、触摸、按键对应的设备文件路径和坐标量程。笔的原始数据则通过一个极简单的dd命令从/dev/input/event*中按定长分块读出SSH 通道由此变成一条只读笔事件流。核心数据流从笔尖落纸到鼠标移动整条数据流可以压缩成一条流水线/dev/input/* 原始字节 → struct 解包 → 查事件名 → remap 坐标换算 → 发送到电脑默认后端 pynput.py 的事件循环里只处理 4 类事件事件含义程序动作ABS_X/ABS_Y笔尖 X / Y 坐标存进变量x、yBTN_TOUCH笔尖落下 / 抬起mouse.press/mouse.release左键SYN_REPORT一帧数据结束调用rm.remap()换算屏幕坐标后mouse.move每次stream.read()读出的是一段定长字节格式2IHHi见 common.py用struct.unpack解出时间戳、事件类型、事件代码和取值再借 codes.py 的大表把编号翻译成ABS_X这样的名字。其中SYN_REPORT是 Linux evdev 协议的标准帧同步信号——它代表这一帧坐标完整了正是移动鼠标的触发点。两个输出后端为什么 pynput 和 evdev 并存pynput 后端默认直接模拟鼠标移动跨平台开箱即用代价是丢失压感信息evdev 后端Linux 管理员权限create_local_device() 用 libevdev 在电脑上创建一个虚拟 Wacom 数位板厂商 ID 甚至直接填了 Wacom 的 0x056a随后把每条重映射过的 evdev 事件原样灌入让系统像识别真数位板一样识别它从而保留压感、倾斜等全部信息。启用方式sudo remouse --evdev创建虚拟输入设备需要 root 权限。坐标重映射 remap()方向与缩放的关键remap() 方法位于 common.py是项目的数学核心分三步方向换算根据--orientation参数即 USB 充电口朝向把平板坐标系翻转或旋转到标准方向缩放模式fit平板完整放进屏幕不变形fill默认铺满整个屏幕笔迹边缘可能略超屏外stretch直接拉伸对齐不保持比例居中输出返回相对屏幕左上角的坐标。reMarkable Pro 的屏幕比例特殊所以在 reMarkablePro 类 中单独覆写了一套换算。对应命令行示例remouse --orientation right --mode fit --monitor 1。其他值得知道的细节codes.py 是近 1000 行的生成文件由 generate_codes.py 从 Linux 内核头文件定义自动生成阅读代码时当查字典用即可无需修改--region选项弹出一个半透明窗口拖动到任意位置和大小来确定映射区域见 get_region()需安装 python3-tkinter多屏检测get_monitor() 用 screeninfo 枚举所有显示器计算虚拟总屏幕尺寸依赖极轻paramikoSSH、pynput鼠标模拟、libevdev虚拟设备、screeninfo多屏见 pyproject.tomlnotes.md 里用字符画标出了平板 → pynput → evdev三套坐标系理解 remap 前值得一看。常见问题速查现象原因与解决提示Insufficient permissions--evdev模式需要管理员权限sudo remouse --evdev反复询问密码在平板设置里查 SSH 密码用--password传入或按 README 生成密钥免密登录多显示器映射不到目标屏用--monitor NUM指定屏幕或--region拖选区域笔迹方向/朝向不对调整--orientationtop / left / right / bottom为充电口实际朝向比例失调切换--mode fit / fill / stretch三种缩放模式总结remarkable_mouse 用不到 10 个文件证明了把 reMarkable 变成数位板并不需要复杂的架构——入口连接、事件解包、坐标重映射、双后端输出这条数据流清晰得令人舒服。按入口 → 连接 → remap → 输出循环的顺序读完上面 4 个文件你就读完了整个项目。【免费下载链接】remarkable_mouseuse your reMarkable as a graphics tablet项目地址: https://gitcode.com/gh_mirrors/re/remarkable_mouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考