记录键盘点击次数

Shl*_*omo 6 shell bash keyboard

如何通过 shell 脚本记录键盘点击?我的目标是在我的 Ubuntu 系统上记录登录会话的键盘点击次数。

注意:我不想记录击键本身,只想记录点击次数。所以最后它说:

94853 hits today.
Run Code Online (Sandbox Code Playgroud)

der*_*ert 8

仅在 X11(图形桌面)会话中进行监控

在您使用 XInput 层时(如果您正在运行现代 X,您可能是)那么xinput test «keyboard-id»(来自xinputDebian 上的软件包)将提供新闻和发布事件。您可以通过运行获取键盘 ID xinput list。您也可以使用该名称。

xinput test 'AT Translated Set 2 keyboard' | grep -c 'key press'
Run Code Online (Sandbox Code Playgroud)

请注意,当您使用 pipe 时xinput,它有一个相当大的缓冲区。因此,不幸的是,您可能会丢失一些按键。您可以直接使用 XI2 API 来避免这种情况,但这在 shell 中并不容易。

您可以相当轻松地将脚本作为桌面环境中的登录脚本之一或从.xsession文件中启动,具体取决于。在xinput您退出时应该退出,因为它会失去它的X11连接。因此,跟踪会话开始和结束的时间非常容易。

监控系统范围(所有会话,甚至文本模式)

或者,如果您想监视系统上的所有击键,而不仅仅是 X11 会话中的击键,您可以使用input-events(至少是 Debian 上的 input-utils 包的一部分)。这必须以 root 身份运行。使用lsinput找到合适的输入设备(恰好是0我的系统上),然后:

input-events 0 | grep -c 'EV_KEY.*pressed'
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你就必须弄清楚你的会话何时开始和结束(例如,peterph 的 dbus 建议)。