2012-08-31 107 views
2

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

我有时需要完全彻底地消除用户为系统提供任何标准键盘输入的能力。这是因为,当我运行系统的一部分时,用户被迫等待一段时间。
不幸的是,用户仍然可以在输入时输入,而他们输入的内容都会显示在屏幕上。当我运行C++程序和bash脚本时,会发生这种情况。这是一个问题,原因是屏幕上有用户要阅读的文本,如果他们可以输入文本,则会替换文本。稍后还会有其他用途,例如使系统看起来像冻结了一样。

所以,问题 - 如何

  1. 禁用键盘,或
  2. 防止在屏幕上显示了在键盘上按下什么?
+1

如果您得到的答案不令人满意,请提供有关所涉及过程的实际交互的更多详细信息。另外,用户甚至不能离开终端或做任何事情,都需要一个“信息亭模式”吗? –

+0

您是否考虑过使用'readline'或'ncurses'库?你有没有考虑使用或定制一些受限制的shell(可能不是'bash')?什么,为什么你试图达到? –

回答

4

关闭回波模式stty -echo或等效C代码(这将使用tcgetattrtcsetattr)。当您准备好再次接受输入时,将其重新打开。您也可能希望放弃在您不期待的情况下到达的输入。这将与tcflush完成,但请注意,一些用户(如我)会认为这是一个烦恼。 Typeahead是一个功能,而不是一个bug!

+0

感谢您的帮助。这工作正是我需要它。虽然typeahead当然是一个功能,但它只是一个功能,只要它实际上被用作打字头。当我需要它被禁用的时候,当用户没有什么可做的时候。就像你可以使用这个术语,一个游戏一样,并且在模拟处理时间(比如,Linux通常显示其启动信息的时间)内打印一个字符,这将会很麻烦。 –

0

要查看用户输入到某个进程或tty的方式可以被拦截,手册页和interceptty的源代码可能是有启发性的。 (没有经验)

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

+1

这个答案是基于一些公然错误的想法。 “当一个进程正在运行时,任何按键都由该进程处理,而不是(自动)在终端上打印”?你应该仔细阅读tty是如何工作的。提示:在shell提示符下运行'sleep 30'。当它运行时,键入一些东西。它呼应。你认为睡眠计划是这样做的吗? –

+0

思考了一下,并适应了......在这里和时间可能就太迟了;) –