2

まず、少し背景を説明します。VirtualBox VM 内で Crunchbang Linux の最新の安定ビルドを実行しています。bash 上で実行するカスタムのテキストベースのユーザー インターフェイスを設計しています。これは、C++ と bash スクリプトの組み合わせで行われています。

時には、ユーザーがシステムに標準的なキーボード入力を提供する機能を完全かつ完全に削除する必要があります。これは、システムの一部を実行すると、ユーザーが一定時間待機する必要があるためです。
残念ながら、ユーザーはこれが行われている間も入力することができ、入力したものはすべて画面に表示されます。これは、C++ プログラムと bash スクリプトを実行しているときに発生します。これが問題である理由は、ユーザーが読むべきテキストが画面上にあり、ユーザーが入力できる場合、テキストが置き換えられるためです。システムがフリーズしたように見せるなど、後でこれには他の用途もあります。

それで、質問 - どうすればいいですか

  1. キーボードを無効にする、または
  2. キーボードで押されたものが画面に表示されないようにしますか?
4

2 に答える 2

4

stty -echoまたは同等の C コード (tcgetattrおよびを使用) を使用して、エコー モードをオフにしますtcsetattr。再び入力を受け入れる準備ができたら、オンに戻します。また、予期せずに到着した入力を破棄したい場合もあります。それはできますtcflushが、一部のユーザー (私のような) はそれを煩わしいと考えることに注意してください。Typeahead は機能であり、バグではありません!

于 2012-09-01T00:02:13.183 に答える
0

特定のプロセスまたは tty へのユーザー入力がどのようにインターセプトされるかを確認するには、man ページとインターセプトのソース コードが参考になるかもしれません。(その経験はありません)

ただし、ユーザー入力を完全に防ぐことはほとんどできません。ユーザーはおそらくいつでも別の仮想端末 (存在する場合) に切り替えることができます。または、無効になっていない場合は少なくとも Alt+Print+B ( Magic SysRq_key ) でシステムを再起動できます。特定の tty での入力を無視することと、キーボード入力を完全に無効にすることは、2 つの異なることです。

于 2012-09-01T00:26:36.420 に答える