Blog

这是我在 CVTE 希沃实习时做过的一个工具类项目的思路整理:如何在 Linux 下录制系统输入行为(触摸、滑动、双击等)并按文件回放。

问题

需要一个工具,能录下用户在 Linux 系统上的输入行为,保存成文件,之后能照文件把行为原样回放出来——类似”操作录屏”,但记录的是事件流而不是视频帧。

三模块架构

把需求拆成三个清晰的模块:

  1. 事件捕获(录制):主动监听并保存系统输入事件;
  2. 事件保存:把事件按「时间戳、类型、键值、状态」落盘;
  3. 事件回放:解析事件文件,模拟用户输入。

事件捕获:多线程 + libudev + select

捕获层要同时盯住鼠标和键盘,一开始考虑过几个方案:

最终选择了 select 多路复用——对少量文件描述符来说,select 足够高效,用户态和内核态之间的上下文切换成本低、也简单可靠。

事件回放:系统调用 + xdotool

回放用系统调用和 xdotool 工具来模拟用户输入。这里也探索过”构造虚拟输入设备”的思路,但直接用工具模拟输入更轻量,最终选了后者。

小结

这个项目的收获不在函数本身,而在架构拆分和方案取舍:把”录制/保存/回放”分开想清楚,每个模块先列方案再做取舍(多线程 vs libudev vs select),以及时刻关注可移植性和效率。