Linux - 丢弃键盘输入

时间:2012-08-31 23:52:13

标签: c++ linux input keyboard console

首先,一点背景:我在VirtualBox VM中运行最新的Crunchbang Linux稳定版本。我正在设计一个基于自定义文本的用户界面,以便在bash之上运行。这是通过C ++和bash脚本的组合完成的。

我有时需要完全彻底地删除用户为系统提供任何标准键盘输入的能力。这是因为,当我运行系统的一部分时,用户被迫等待一定的时间 不幸的是,用户仍然可以在此过程中键入内容,并且无论键入什么内容都会显示在屏幕上。当我运行C ++程序以及bash脚本时会发生这种情况。这是一个问题的原因是屏幕上有用户要阅读的文字,如果他们可以打字,则取代文本。稍后还会有其他用途,例如让系统看起来已经冻结了。

所以,问题是 - 我如何

  1. 禁用键盘,或
  2. 防止键盘上的任何东西出现在屏幕上?

2 个答案:

答案 0 :(得分:4)

使用stty -echo或等效的C代码(使用tcgetattrtcsetattr)关闭回声模式。当您准备再次接受输入时,请将其重新打开。您可能还希望丢弃在您没有预料到时输入的输入。这可以通过tcflush来完成,但要注意一些用户(比如我)会认为这是一种烦恼。 Typeahead是一个功能,而不是一个bug!

答案 1 :(得分:0)

要了解如何拦截用户对特定进程或tty的输入,interceptty的手册页和源代码可能具有启发性。 (没有经验)

但是,您很难(完全)阻止用户输入。如果未禁用,用户可能始终能够切换到其他虚拟终端(如果有)或至少使用Alt + Print + B(Magic SysRq_key)重新启动系统。忽略给定tty上的输入和完全禁用键盘输入是两回事。