我已经成功设置了一个小程序来创建uinput /questions/tagged/uinput我计划使用它来自动测试接收键盘输入事件的应用程序。
我已关注both http://thiemonge.org/getting-started-with-uinput 教程 https://web.archive.org/web/20120710121647/http://www.einfochips.com/download/dash_jan_tip.pdf正如在这个非常好的中发现的answer https://unix.stackexchange.com/questions/14879/how-to-inject-keystrokes-via-a-shell-script.
当我的程序通过调用创建 uinput 设备时ioctl(fd, UI_DEV_CREATE)
文件系统中会出现一个新设备,因此我的测试应用程序可以附加到它并等待事件。我的目标系统已经有一个/dev/input/event0
设备,以便新设备获得路径/dev/input/event1
。如果我为我的桌面系统编译并运行该程序,其中存在现有设备/dev/input/event[0-15]
,当程序运行时,新设备得到/dev/input/event16
.
我希望我的程序在创建后报告新设备名称。有办法得到吗?
是的,您可以使用UI_GET_SYSNAME
(定义于/usr/include/linux/uinput.h
)如果它在您的平台上可用(例如,Android 由于某种原因没有定义它)。它将为您提供在以下位置创建的设备的名称/sys/devices/virtual/input
。一旦您了解了该设备sysfs,您可以找出创建的设备/dev/input
通过阅读这个问题 https://stackoverflow.com/questions/15623442/how-do-i-determine-the-files-corresponding-to-a-uinput-device.
调用后使用UI_DEV_CREATE
像这样(省略错误/健全性检查):
ioctl(fd, UI_DEV_CREATE);
char sysfs_device_name[16];
ioctl(fd, UI_GET_SYSNAME(sizeof(sysfs_device_name)), sysfs_device_name);
printf("/sys/devices/virtual/input/%s\n", sysfs_device_name);
如果不可用,您可以尝试在以下位置查找 sysfs 设备:/proc/bus/input/devices
其中应该包含如下条目:
I: Bus=0006 Vendor=0001 Product=0001 Version=0001
N: Name="your-uinput-device-name"
P: Phys=
S: Sysfs=/devices/virtual/input/input12
U: Uniq=
H: Handlers=sysrq kbd mouse0 event11
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0 0 7ffff ffffffff fffffffe
B: REL=143
..这有点混乱。但正如您所看到的,它还会为您提供在中创建的设备的快捷方式/dev/input
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)