如何区分来自不同键盘的输入?


14

我想用Python编写一个可以与默认键盘一起使用的应用程序,以及一个专门为该应用程序设计的应用程序。我将通过使用带有标签的小型数字键盘对不同的按键进行操作来简单地进行设计。两个键盘都将通过USB连接。

但是,当按下这些键时,它们的常规信号(数字,运算符和回车键)将被发送到Python,它将无法区分来自主键盘和特殊键盘的信号。

由于Python(据我所知)没有进行这种区分的方法,因此我想在OS本身上做到这一点。我将为Raspberry Pi进行编程,因此它将是Linux。

因此,主要问题是:如何将特定键盘的键重新映射到其他键代码。我考虑过使用F键,而我不会将其用于其他目的。或只是某些键盘上不存在的字符(假设有这样的字符)。

在Linux / Unix中可以吗?如果是这样,我该怎么办?


键盘如何安装?您可能想直接从设备阅读。对我来说,这是最明显的方法,尽管我认为还有更好的方法。
TNW

我补充说他们将通过USB连接。如何使用Python直接从设备读取?
史蒂文·罗斯

看来,不被接受的答案比被接受的答案要简单得多。
Nikana Reklawyks

Answers:


12

如果您使用的是Linux,则区分输入设备的最佳方法是使用Linux事件接口。解码设备的特定于硬件的输入后,将其转换为Linux特定的中间事件结构,并通过读取下方的一个或多个字符设备使其可用/dev/input/。顺便说一下,这完全独立于您使用的编程语言。

每个硬件设备都有自己的/dev/input/eventX设备,并且也有聚合(例如/dev/input/mice,代表系统中所有鼠标的运动)。您的系统可能也有/dev/input/by-path/dev/input/by-id

有一个ioctl被调用EVIOCGNAME的设备以人类可读的字符串形式返回设备的名称,或者您可以使用/dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse

打开设备,每当输入硬件发生事件时,您都会获得一个数据包。如果您可以阅读C,则可以研究该文件/usr/include/linux/input.h,该文件准确显示了此文件的工作方式。如果没有,您可以阅读此问题该问题提供了您需要的所有信息。

有关事件的接口的好处是,你只是找到你所需要的设备,你可以阅读从输入设备输入唯一的,忽略其它。您还可以通过仅从终端读取“煮熟的”字符流来获取通常不会通过按键,按钮和控件获得的通知:甚至是诸如Shift等死键。

糟糕的是,事件接口不会返回“煮熟的”字符,它只对键使用数字代码(与每个键相对应的代码都在上述头文件中找到,也可以在event.py的Python源代码中找到)。如果您的输入设备有不正常的按键/按钮,您可能需要尝试一下,直到获得正确的数字。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.