首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取evdev设备的类型

获取evdev设备的类型
EN

Unix & Linux用户
提问于 2019-06-05 17:40:11
回答 2查看 1.7K关注 0票数 5

从Linux用户空间,如何获得evdev/ get _event设备的类型(即鼠标或键盘)?

我知道我可以通过阅读/proc/bus/input/handlers或列出/sys/class/input/来枚举它们,但是还不清楚哪些设备是鼠标还是键盘。

/proc/bus/input/handlers中,像H: Handlers=sysrq kbd event3 leds这样的行似乎表明这是一个带有'kbd‘的键盘,但我找不到任何这样的实际文档。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-06-06 14:35:14

内核实际上并不是根据设备类型进行推理,而是更多地考虑设备可以产生的事件类型(参见内核中的事件代码文档 )。

因此,您需要一些启发式方法来识别设备类型。许多设备都可以产生关键事件;键盘具有生成密钥事件(EV_KEY)和重复事件(EV_REP)的特殊性。我认为,老鼠是唯一产生相关事件(EV_REL)的设备。

设备公开可以在其类ev目录中的capabilities文件中生成的事件类型。每个偶数类型都有一个给定的位偏移量,在/usr/include/linux/input-event-codes.h中定义;EV_KEY是1,EV_REP 20,EV_REL 2。您可以在/sys/class/input/input*/capabilities/ev给出的值中查找这些位,以找到您感兴趣的设备。

票数 4
EN

Unix & Linux用户

发布于 2023-03-05 14:12:22

要查找任何设备的详细信息(我使用event22),您可以运行它(在终端/python/C++中):

代码语言:javascript
复制
udevadm info -a -n /dev/input/event22

输出是一个庞大的细节列表,其中只有两个是重要的产品和供应商:

代码语言:javascript
复制
ATTRS{idProduct}=="0100"
ATTRS{idVendor}=="04b4"

当您在终端中使用lsusb时,您也会看到这些神奇的数字。通过删除/添加,您可以很容易地找到您的设备的数字,例如鼠标,蓝牙设备或条形码阅读器。对我来说,我得到了以下输出:

代码语言:javascript
复制
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 8087:0a2b Intel Corp. 
Bus 001 Device 061: ID 04b4:0100 Cypress Semiconductor Corp. Cino FuzzyScan F760-B
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

当我移除我的条形码阅读器并再次运行时,模糊扫描设备就消失了。我知道我的条形码阅读器是04b4:0100。

现在,在Evdev库中,我还可以找到这些数字。首先,我制作了一个程序来运行每个设备的udevadm信息。在某个时候,我发现了一个带有04b4和0100的设备。设备名称可用于evdev。在C++中,我可以运行:

代码语言:javascript
复制
int fd = open("/dev/input/event22", O_RDONLY|O_NONBLOCK)
int rc = libevdev_new_from_fd(fd, &m_evDev);
int vendor = libevdev_get_id_vendor(m_evDev),
int productId = libevdev_get_id_product(m_evDev);
if (vendor == 0x4b4 && productId == 0x100)
    printf("Wooow, you find the barcode scanner!");

备注:可能该设备不允许用户使用,那么您需要添加如下的读写权限:

代码语言:javascript
复制
sudo chmod a+=wr /dev/input/event22

我意识到这些不是很详细,请多问。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/523108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档