4

USBキーボードからデータをキャプチャし、RS232ポートとLANを介してデータを送信するDebian Linux用のANSI Cアプリを作成しています(ある種の産業用マシンです)。PCにスクリーンが接続されていません。「/dev/input/event1」からのキャプチャを使用していますが、すべて正常に動作しますが、コンピューターの起動後にシステム ログイン/パス プロンプトが表示され、アプリだけでなくシステム ログインによってもキーボードがキャプチャされます。私の質問は、ログインのためにシステムによるキーボードのキャプチャを無効にする方法ですが、アプリで実行し続けますか?

4

1 に答える 1

4

あなたが直面している問題は、デフォルトで、デバイスのすべての入力イベントハンドラーがすべてのイベントを受信することです。この場合、少なくとも2つのハンドラーがあります。コンソール用のキーボードドライバーと、evdevアプリケーション用のユーザースペースインターフェイスです。

これを回避するには、アプリケーションがevdevモジュールに、での専用の入力デバイスを取得EVIOCGRAB ioctlするように指示する必要があります。これにより、他のユーザースペースアプリケーションを含む他のハンドラーがそのデバイスからイベントを受信できなくなります。

デバイスを取得するには:

int ret = ioctl(fd, EVIOCGRAB, (void *)1);

つかんだデバイスを解放するには:

int ret = ioctl(fd, EVIOCGRAB, (void *)0);
于 2013-01-19T16:17:16.863 に答える