基本问题是这样的:迷你键盘我正在为一个 Raspberry Pi 项目使用它,由于每个键盘只有一个 shift、ctrl 和 alt 键,这意味着键盘左侧的组合键(如 shift-A 和 ctrl-C)如果不丢失的话很难完成。
我打算采用的解决方案是添加一个单独的按钮来模拟第二个 Shift 键。有了 RPi 和一些非常基本的电子和编程经验,这在理论上相当简单。至少对于大多数键来说都是如此。但由于 Shift 键是一种“修饰”键...
问题是,操作系统是否分别处理每个按键,或者当用户按下 Shift-A 时键盘的工作是否发送大写字母 A?我可以使用第二个输入来模拟 Shift 键,然后按下键盘上的 A 键让操作系统打印大写字母 A 吗?如果能给出一般性答案,那就太好了,但如果这取决于操作系统,则所讨论的操作系统是基于 Debian Stretch 的 Raspbian Stretch。
答案1
大多数现代键盘都以 USB HID 设备的形式进行连接;也有例外,但您的树莓派显然是 USB 的。
对于 USB 键盘,修饰键的状态通过报告普通键时发送的单独状态位掩码进行传达,例如https://wiki.osdev.org/USB_Human_Interface_Devices对于特定的位和键。(这与 PS/2 键盘不同,PS/2 键盘的修饰键有自己的扫描码)。
如果您能找到解释事件的代码并了解它如何使用修饰符位,那么您也可以修改逻辑以查看其他内容。您还可以在报告的修饰键之上对您自己的替代输入状态进行按位或运算(因为“1”表示按下了键)。
对于某些使用按键开关的简单类型的键盘,您可能还能够将单独的按钮与现有的修饰键并行连接;但这可能很棘手。