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