首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用evdev识别多功能输入设备的特定功能

使用evdev识别多功能输入设备的特定功能
EN

Stack Overflow用户
提问于 2017-09-26 09:06:08
回答 1查看 352关注 0票数 0

我有一些与无线USB数字键盘交互的Python代码。我希望能够通过名称发现设备,但显示为多个输入设备。在/dev/input/by-id

代码语言:javascript
复制
# ls -l /dev/input/by-id
total 0
lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-event-kbd -> ../event0
lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-if01-event-mouse -> ../event1
lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-if01-mouse -> ../mouse0

并使用evdev模块:

代码语言:javascript
复制
>>> import evdev
>>> devices = [evdev.InputDevice(dev) for dev in evdev.list_devices()]
>>> for device in devices:
...   print(device.fn, device.name)
...
/dev/input/event1 MOSART Semi. 2.4G Keyboard Mouse
/dev/input/event0 MOSART Semi. 2.4G Keyboard Mouse

显然,内核可以区分-kbd设备和-mouse设备,但是如何在我的代码中做出决定呢?我现在提出的解决方案利用了“键盘”设备包括KEY_KP...功能的事实,所以我可以这样做:

代码语言:javascript
复制
def is_keyboard(device):
    return evdev.ecodes.KEY_KP1 in device.capabilities()[evdev.ecodes.EV_KEY]

...but似乎更像是一种启发式测试,而不是一种可靠的测试。有没有一种方法可以使用evdev模块或替代模块来检测给定的输入设备是键盘还是鼠标(或这两者的某种类似科学怪人的组合)?

EN

回答 1

Stack Overflow用户

发布于 2017-09-26 09:32:50

evdev中,似乎无法直接识别给定的输入设备是键盘还是鼠标。但是您可以使用subprocess作为替代方案。

代码语言:javascript
复制
import subprocess

process = subprocess.run("ls -l /dev/input/by-id", shell=True, stdout=subprocess.PIPE)
devices = process.stdout.decode().split("\n")[1:-1]

然后你可以得到一个类似这样的列表:

代码语言:javascript
复制
[
    "lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-event-kbd -> ../event0",
    "lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-if01-event-mouse -> ../event1",
    "lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-if01-mouse -> ../mouse0"
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46416315

复制
相关文章

相似问题

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