如何计算鼠标按钮的点击次数?

luk*_*asz 6 mouse input-devices

自 Ubuntu 启动以来,我如何计算鼠标按钮的点击次数?

我想做鼠标按钮点击统计,所以我需要它。

谢谢

Cha*_*ato 5

xinput可以做你需要的,卢卡斯。你可以有一个单行(好吧,不完全是单行,但你只需要按一次 ENTER :-D),但首先你必须做一些工作。我发誓这非常简单,为了清楚起见,我将在这里解释大部分内容。

\n\n

打开终端,然后输入:

\n\n
xinput list\n
Run Code Online (Sandbox Code Playgroud)\n\n

你会得到一个很好的指针、键盘按钮等列表,就像我的摘录一样:

\n\n
\xe2\x8e\xa1 Virtual core pointer                      id=2    [master pointer  (3)]\n\xe2\x8e\x9c   \xe2\x86\xb3 Virtual core XTEST pointer                id=4    [slave  pointer  (2)]\n\xe2\x8e\x9c   \xe2\x86\xb3 USB+PS/2 Optical Mouse                    id=10   [slave  pointer  (2)]\n\xe2\x8e\x9c   \xe2\x86\xb3 PS/2 Mouse                                id=13   [slave  pointer  (2)]\n\xe2\x8e\x9c   \xe2\x86\xb3 AlpsPS/2 ALPS GlidePoint                  id=14   [slave  pointer  (2)]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的USB鼠标就在第二行,你可以看到它的ID是10。在列表中找到您的鼠标并记下其 ID,您将需要它来执行您想要的主命令。

\n\n

如果您想检查您是否获得了正确的 ID,请运行xinput test <id>。如果您移动鼠标、单击按钮等,您应该会在终端上看到大量信息行。它列出了您使用鼠标执行的所有操作。如果没有任何反应,请尝试从指针列表中选择另一个对您有意义的 id,您可能一开始就选择了错误的 id(这确实不应该那么难)。

\n\n

当您最终找到正确的 id 时,运行以下命令:

\n\n
xinput test <id>|sed -une '/release/ {      x\n     /^$/ s/^.*$/1/\n     G\n     h\n     s/^/      /\n     s/^ *\\(......\\)\\n/\\1  /p\n     x\n     s/\\n.*$//\n     /^9*$/ s/^/0/\n     s/.9*$/x&/\n     h\n     s/^.*x//\n     y/0123456789/1234567890/\n     x\n     s/x.*$//\n     G\n     s/\\n//\n     h\n}'\n
Run Code Online (Sandbox Code Playgroud)\n\n

按原样复制上面的内容并粘贴。在按 ENTER 之前,请将<id>替换为您找到的 ID。当您运行它时,您可以在继续使用系统时将其放在那里。任何时候您想检查注册了多少次点击,您只需查看终端即可。

\n\n

一些重要的评论:

\n\n
    \n
  • 不幸的是,我不太擅长\n控制台、shell、命令等。我\n非常确定有人可以改进这个\n或提供更好的解决方案。我的解决方案存在\n不便:\n您实际上并没有实时\n结果。由于某种原因,似乎\n存在缓冲,并且您必须\n生成更多鼠标事件来读取\n较旧的事件。因此,如果您单击了\n但没有显示,请稍微移动一下鼠标\n,很快就会显示\n最后一次单击。对此感到抱歉,但我\n尝试了一些方法,但还不知道\n如何解决该问题。希望这对你来说没有那么糟糕。
  • \n
  • 如您所见,任何\n点击都会被计数。如果您只想计算其中一个按钮的点击次数,请将“release”替换为“release 1”、“release 2”、“release 3”,好吧,您明白了。如果您想要对它们全部进行计数,但要使用单独的统计数据,请在单独的终端中运行命令(使用正确的按钮指示)。
  • \n
\n\n

我使用的方法:xinput list <id>做肮脏的工作,显示鼠标发生的一切。然后我将此输出重定向到sed,它将仅解析具有“release”事件的行。我想可以考虑“释放”事件结束“单击过程”(按钮按下然后向上)。sed 脚本不仅显示带有“release”的行,而且还对它们进行编号。这个脚本是直接从info sed(4.7节)复制而来的,肯定可以改进。

\n

  • 怎么样:`xinput test $id | awk 'BEGIN { count=0 } /release/ { count=count+1; printf "\r%-6d", 计数 }'` (2认同)

tmo*_*mow 0

您可以使用linux-input 项目提供的 evtest 。

但你必须确保内核中有 CONFIG_INPUT_EVBUG=y (如果安装调试版本,可能是默认值)并将调试级别设置为 8

echo 8 > /proc/sys/kernel/printk
Run Code Online (Sandbox Code Playgroud)

此时,您将在控制台中看到几条可以解析的消息。

evbug.c: Event. Dev: gpio-keys/input0, Type: 0, Code: 0, Value: 0
evbug.c: Event. Dev: gpio-keys/input0, Type: 1, Code: 103, Value: 1
Run Code Online (Sandbox Code Playgroud)

然后您可以安装 bitbake 和 evtest 软件包

sudo apt-get install bitbake evtest
Run Code Online (Sandbox Code Playgroud)

然后您可以对您的设备使用 evtest,您将需要一些测试来找出您需要的正确事件,并且您可以计算该事件的发生次数。

evtest /dev/input/eventXX
Run Code Online (Sandbox Code Playgroud)

否则,如果您只想统计登录 GDM/XDM 后的点击次数,您可以开发或请人来做,使用 GTK、Qt 或 wxWidgets、Enlightenment 或任何您喜欢的应用程序来监视鼠标事件和桌面出现后立即启动此应用程序。