我想用Python编写一个应用程序,您可以使用默认键盘和专门为应用程序设计的键盘.我将通过使用带贴纸的小型数字键盘来设计它,以便为不同的键提供动作.两个键盘都将通过USB连接.
然而,当按下这些键时,只有它们的常规信号(数字,操作符和输入)将被发送到Python,它将无法区分来自主键盘和特殊键盘的信号.
因为Python(据我所知)没有任何方法来进行这种区分,我想在操作系统本身上做到这一点.我将为Raspberry Pi编程,因此它将是Linux.
所以,主要问题是:如何将特定键盘的键重新映射到其他键码.我想过使用我不会用于其他目的的F键;或者只是某些键盘上没有的字符(假设有这样的字符).
这在Linux / Unix中是否可行?如果是这样,我该怎么办呢?
解决方法:
如果您正在使用Linux,区分输入设备的最佳方法是使用Linux Event Interface.在解码设备的硬件特定输入后,它将转换为特定于Linux的中间事件结构,并通过读取一个或多个/ dev / input /下的字符设备.顺便说一句,这完全独立于您使用的编程语言.
每个硬件设备获得其自己的/ dev / input / eventX设备,并且还存在聚合(例如/ dev / input / mice,其表示系统中所有鼠标的运动).您的系统也可能有/ dev / input / by-path和/ dev / input / by-id.
有一个名为EVIOCGNAME的ioctl,它将设备的名称作为人类可读的字符串返回,或者您可以使用类似/ dev / input / by-id / usb-Logitech_USB_Gaming_Mouse-mouse的内容.
您打开设备,每次事件从输入硬件到达时,您将获得一个数据包.如果您可以阅读C,您可以学习文件/usr/include/linux/input.h,它可以准确显示这些内容的工作原理.如果不这样做,您可以read this question提供您需要的所有信息.
关于事件界面的好处是你只需要找出你需要的设备,你就可以只读取该输入设备的输入,忽略所有其他设备.您还可以通过从终端读取“熟”字符流来获取有关键,按钮和控件的通知:甚至可以使用Shift键等死键.
不好的是,事件接口不返回’cooked’字符,它只使用数字代码作为键(每个键对应的代码可以在前面提到的头文件中找到 – 但也可以在event.py的Python源代码中找到.如果你的话输入设备有异常的按键/按钮,你可能需要试验一下,直到你得到正确的数字.