我正在制作一个 Ruby 程序,以便在按下某个键时播放不同的声音。Key A 会发出与 Key S 不同的声音,以此类推。我想获得原始输入而不是使用一些红宝石。
例如,我可以读取 /dev/input/mice 的所有鼠标事件。我可以在我的代码中使用它,以便它可以根据鼠标移动完成一些工作。
通过打开哪个文件可以获取所有键盘事件?
我正在制作一个 Ruby 程序,以便在按下某个键时播放不同的声音。Key A 会发出与 Key S 不同的声音,以此类推。我想获得原始输入而不是使用一些红宝石。
例如,我可以读取 /dev/input/mice 的所有鼠标事件。我可以在我的代码中使用它,以便它可以根据鼠标移动完成一些工作。
通过打开哪个文件可以获取所有键盘事件?
这里涉及两层:
input
内核层,将各种键盘、鼠标、操纵杆等转换为一个通用框架,并使它们在/dev/input/*
设备文件(每个设备一个文件)上可用,以及 X(或者,取决于你的发行版,Wayland)层,它读取这些文件,并将它们转换为图形应用程序可以理解的 X 事件。后者结合了输入设备,使它们可用作“来自任何设备的键盘事件”和“来自任何设备的鼠标事件”(这是一种简化,但可以首先近似)。应用程序的自然方式是与 X 层交互(我确信它是 Ruby 抽象层)。如果您的应用程序不仅播放声音,而且还显示某些内容(即使它不显示任何内容),则特别推荐这样做。
当然,如果您坚持,您也可以打开 中的所有文件
/dev/input/*
,并解释来自它们的事件,但这将在连接新键盘鼠标的那一刻失败,并且您也想对这些事件做出反应。这种
/dev/input/mice
抽象只存在于鼠标,是一种遗留解决方案,当时人们使用单个 PS/2 键盘,但已经有各种不同的鼠标设备。该文件可能与 X 层认为的活动鼠标输入设备不匹配,并且没有等效的键盘抽象。