2

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

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

所以,问题 - 我该怎么做

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

2 回答 2

4

stty -echo使用或等效的 C 代码(将使用tcgetattrand )关闭回显模式tcsetattr。当您准备好再次接受输入时,将其重新打开。您可能还希望丢弃在您没有预料到的情况下到达的输入。可以这样做,tcflush但请注意,某些用户(例如我)会认为这很烦人。Typeahead 是一项功能,而不是错误!

于 2012-09-01T00:02:13.183 回答
0

要查看如何拦截用户对某个进程或 tty 的输入,拦截的手册页和源代码可能会有所启发。(没有经验)

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

于 2012-09-01T00:26:36.420 回答