【问题标题】:How can I know which of the /dev/input/eventX (X=0..7) have the Linux input stream?我如何知道 /dev/input/eventX (X=0..7) 中的哪个具有 Linux 输入流?
【发布时间】:2011-10-22 21:19:56
【问题描述】:

我正在尝试捕获 linux 键盘/鼠标输入,并且正在读取来自 /dev/input/event2 之类的事件。但似乎输入有时指向/dev/input/event2,有时指向/dev/input/event3。我想知道是否有一个地方我可以找出哪个流有输入?

【问题讨论】:

  • /dev/input/by-id/dev/input/by-path,它们有符号链接到右边/dev/input/event<x>
  • @n.m.:这些链接并非无处不在(例如它们不在 Android 中)。

标签: linux events input


【解决方案1】:

刚刚偶然发现这一点 - 相当晚了。

您可以使用以下方法找出不同设备的名称和其他属性:

cat /proc/bus/input/devices

【讨论】:

  • 我的 bluetooth ipage 游戏手柄已成功连接到 /dev/input/js0(与 jstest-gtk 配对和校准),但未在 /proc/bus/input 中列出/devices 对不起,这里列出了我的错,对不起
  • 是的,这不能回答问题
  • cat /proc/bus/input/devices | grep -P '^[NH]: ' | paste - -
【解决方案2】:

使用sudo evtest 非常有帮助。 它将按名称和相应的事件编号列出您的所有输入设备。然后您可以输入您感兴趣的设备事件编号并监控其事件。

【讨论】:

【解决方案3】:

要找出答案,请转至 /dev/input/by-id/dev/input/by-path 并执行 ls -l 找出哪个符号链接指向哪个event<*>

另外,我认为这对所有浏览此页面的人会有所帮助,以找到对某些捕获键盘事件的代码很有帮助的link

【讨论】:

  • 我的 bluetooth 游戏手柄成功连接为 /dev/input/js0 - 使用 jstest-gtk 测试和校准,但它不在 /dev/input/by-id 目录中,STEAM 无法使用它(错误:找不到游戏手柄)...
  • 不幸的是,by-id 和 by-path 似乎都被破坏了,因为它们只为每个型号的一个设备生成符号链接。
【解决方案4】:

在终端中运行它,它会正常工作:

cat /proc/bus/input/devices | awk '/keyboard/{for(a=0;a>=0;a++){getline;{if(/kbd/==1){ print 
$NF;exit 0;}}}}'

Source

【讨论】:

  • 请记住,这是区分大小写的。因此,如果您的键盘被列为... Keyboard ... 而不是... keyboard ...,它将找不到它。您需要使此命令不区分大小写。
  • cat /proc/bus/input/devices | awk '/[Kk][Ee][Yy][Bb][Oo][Aa][Rr][Dd]/{for(a=0;a>=0;a++){getline;{if(/kbd/==1){ print $NF;exit 0;}}}}'
  • 我看到很多没有意义的键盘出现在“kbd”处理程序中注册。电源按钮、PC 扬声器(!)...
【解决方案5】:

我知道现在回复有点晚了,但我希望这对朋友有帮助。

“mice”包含鼠标输入数据,但要找到与键盘相关的文件,我们需要检查“by-path”文件夹中的文件,键盘文件名以“event-kbd结尾”。我们需要找到键盘的链接,然后我们才能找到键盘事件文件。以下命令可以自动为我们完成此操作:

kbdEvents=($(ls /dev/input/by-path | grep "event-kbd"))     
for forCounter in "${kbdEvents[@]}"
do
    eventFile=$(readlink --canonicalize "/dev/input/by-path/${forCounter}")     
    # do anything ...
done

此代码是我个人网站上的休息时间代码的一部分:mazKnez.com

【讨论】:

    【解决方案6】:

    由于我不是 bash 向导,因此遵循其他提示和一些试验和错误,这就是我用来获取蓝牙控制器的 inputXX 以与 xboxdrv 工具一起使用的方式。使用/dev/input/eventXX 并显示在cat /proc/bus/input/devices 中的任何其他情况也可以使用。

    #!/bin/bash
    event="`sudo cat /proc/bus/input/devices | grep -Poz '("STK-7007F1"[\s\S]+?)\Kevent\d+'`"
    echo $event #event26, for example
    

    您可以使用其他命令代替 echo。 “STK-7007FI”是我的控制器在运行cat /proc/bus/input/devices 时的命名方式。该脚本将出于某种超出我的 linux 命令知识范围的原因引发有关 null char 或其他内容的警告,但即使使用它也能正常工作。

    grep 中的 -Poz 标志是使用多行正则表达式。 \K 是lookbehind 的可行替代方案。可能有更好的方法来做到这一点,但这就是我想出的。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2020-10-02
      • 2013-09-10
      • 2016-07-22
      • 1970-01-01
      • 2015-01-30
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多