キーボードのような (HID) デバイスから入力を受け取る必要がある Linux デーモンを作成しようとしています。これはコンソール キーボードではなく、2 番目のデバイスです (違いがあれば、実際には 1D バーコード スキャナーです)。デーモンは、受信したデータ (英数字バーコードからの「キーストローク」) を処理します。
デーモンが ioctl(EVIOCGRAB) を使用して /dev/input/eventx からそのデバイスを取得し、次に read() イベント (<linux/input.h> からの struct input_event) を使用できることはわかっていますが、それは私のレベルでは低すぎます。ニーズ。すべての上下キーイベントについて知る必要はなく、同時キーをデコード/処理する必要もありません。つまり、KEY_DOWN+KEY_RTSHIFT、KEY_DOWN+KEY_A、KEY_UP+KEY_RTSHIFT、KEY_UP+KEY_A を知りたくありません、「A」を受け取りたいだけです。
入力イベントを使用するには、"A" を取得するためだけに大量の余分なコードを記述する必要があります。これは、ほぼ確実に既存のキーボード ハンドラー (またはそのようなもの) が存在する場合、時間と労力の無駄に思えます。コードを一緒にハッキングするよりもはるかに優れた仕事をします-私はそれらを見つけることができません!
(キーボード?) ソフトウェアの既存のレイヤーを /dev/input/eventx に配置して、デーモンが単純な ascii のストリームを排他的に読み取る方法はありますか?
このデバイスの場合、/proc/bus/input/devices は ... を報告します。
H: Handlers=sysrq kbd leds event9
...何かがすでに「kbd」レイヤーを配置していることを示唆している可能性がありますが、それにアクセスするにはどうすればよいですか?
EVIOCGRAB を使用しない場合、バーコードをスキャンすると、「/dev/tty1 でのログインに失敗しました」という syslog が表示されるため、キーボード入力が明らかにターミナル/シェルのどこかにログインしようとしています :-/ (X はありません。このマシンのデスクトップなど。)