如何通过 shell 脚本记录键盘敲击?我的目标是记录 Ubuntu 系统上登录会话的键盘点击次数。
注意:我不想记录击键本身,只想记录点击次数。所以最后它说:
94853 hits today.
答案1
仅在 X11(图形桌面)会话中进行监控
如果您正在使用 XInput 层(如果您正在运行现代 X,那么您可能会使用 XInput 层)xinput test «keyboard-id»
(来自xinput
Debian 上的软件包)将提供 pey 新闻和发布事件。您可以通过运行获取键盘 ID xinput list
。您也可以使用该名称。
xinput test 'AT Translated Set 2 keyboard' | grep -c 'key press'
请注意,当您使用管道时xinput
,它有一个相当大的缓冲区。因此,不幸的是,您可能会丢失一些按键。您可以直接使用 XI2 API 来避免这种情况,但这在 shell 中并不容易。
您可以相当轻松地将脚本作为桌面环境中的登录脚本之一或从文件中启动.xsession
,具体取决于。xinput
当您注销时,应该退出,因为它将失去 X11 连接。因此,跟踪会话的开始和结束时间非常容易。
监控整个系统(所有会话,甚至文本模式)
或者,如果您想监控全部系统上的击键,而不仅仅是 X11 会话中的击键,您可以使用input-events
(至少是 Debian 上 input-utils 包的一部分)。这必须以 root 身份运行。用于lsinput
查找正确的输入设备(在我的系统上恰好是 0),然后:
input-events 0 | grep -c 'EV_KEY.*pressed'
如果你这样做,你必须弄清楚你的会话何时开始和结束(例如,peterph 的 dbus 建议)。
答案2
正如德罗伯特提到的,xinput
可以使用(xinput --test-xi2
应该有效 - 您需要计算包含的行数RawKeyPress
)。但是,您需要在会话开始后立即运行脚本并在会话结束后停止 - 因此您可能还想观看 dbus 会话。
此外,您会错过在虚拟控制台上键入的任何内容 - 为此,我担心您需要编写一个内核模块,它将在/proc
或中的某个位置导出其统计信息/sys
- 但它几乎包括进入计算机的所有内容。