在 Linux 终端应用程序中接收按键和按键释放事件?

Posted

技术标签:

【中文标题】在 Linux 终端应用程序中接收按键和按键释放事件?【英文标题】:Receiving key press and key release events in Linux terminal applications? 【发布时间】:2010-11-27 09:50:09 【问题描述】:

我想编写一个简单的 C 程序,该程序将根据“key down”和“key up”事件执行不同的操作。该程序将从rxvt内部运行。

我应该使用什么库或机制来访问按键和释放?阅读/dev/tty 是否只会提供关键版本?这对于 termcap、terminfo、ncurses 和 slang 也是如此吗?有没有办法在终端应用程序中实现这一点?

【问题讨论】:

【参考方案1】:

以下链接可能对使用键盘原始模式有所帮助,这将使您能够访问键盘事件而不仅仅是按键释放。

    此 Linux 日志article SourceForge 上的 article 还有这个HOWTO,当一切都变糟时

Raw 模式确实有一个缺点,就是您必须自己进行从扫描码到字符的转换。

【讨论】:

+1 感谢您的回答,我需要在终端程序中访问原始键盘,这就是解决方案!但是应该记住,使用原始键盘访问,您的程序不会像经典终端程序那样“表现”。例如,在远程机器上运行它时,您不能注册关键事件。请记住这一点。 请注意,这些仅在您连接到实际控制台时才有效——如果您使用的是伪终端(例如终端窗口),它们将不起作用。【参考方案2】:

这在一般情况下不起作用。 ANSI 终端(所有仿真器都来自它)仅表示按键“按下”事件。他们不会独立记录向下/向上事件。

如果您需要低级别的键盘事件访问,那么合适的环境实际上是一个 GUI 程序。即使是 Web 应用程序也比终端更容易访问关键事件。

【讨论】:

【参考方案3】:

我认为 ncurses 不会起作用。 Basilevs 提供的链接讨论了“向上箭头”键和“向下箭头”键,而不是按键和释放。

【讨论】:

以上是关于在 Linux 终端应用程序中接收按键和按键释放事件?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个应用程序中模拟按键和按键释放?

修改后的 USB 键盘驱动程序不接收按键 (Linux)

10.3 键盘事件

在Linux下的中断方式读取按键驱动程序

C ++:如果按下Windows,模拟按键并保持按键

linux 中断管理