Ste*_*ose 16 linux usb keyboard
我想用 Python 编写一个应用程序,您可以使用它的默认键盘和一个专门为该应用程序设计的键盘。我将简单地通过使用带有贴纸的小型数字键盘来对不同的键进行操作来设计它。两个键盘都将通过 USB 连接。
然而,当按下这些键时,只有它们的常规信号(数字、运算符和输入)将被发送到 Python,它无法区分来自主键盘和特殊键盘的信号。
因为 Python 没有(就我所能找到的)进行这种区分的方法,所以我想在操作系统本身上进行。我将为 Raspberry Pi 进行编程,所以它将是 Linux。
所以,主要问题是:如何将特定键盘的键重新映射到其他键码。我考虑过使用我不会用于其他目的的 F 键;或者只是一些不存在于任何键盘上的字符(假设有这样的字符)。
这在 Linux/Unix 中可能吗?如果是这样,我该怎么做?
Ale*_*ios 16
如果您使用的是 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 源中找到。如果您的输入设备有不寻常的按键/按钮,您可能需要进行一些试验,直到得到正确的数字。