キーボードをシミュレートするUSBバーコードスキャナがあります。一度接続すると、Xはコントロールを取得し、それを通常のキーボードのように処理し、現在フォーカスされたウィンドウにキーボードイベントを送信します。
これは私がしたいことではありません。 ASCII入力ストリームからバーコードを読み取って処理するプログラムがあります。プログラムはバックグラウンドで実行され、ユーザーインターフェイスはまったくありません。
XでこのUSBキーボードを使用せずにASCIIストリームデバイスにマッピングするようにLinuxを設定する方法。これにより、プログラムを入力デバイスにリダイレクトし、入力フォーカスの変更に関係なくバーコード読み取り機能を提供できます。そしてバーコードは現在焦点が合っているウィンドウにまったく渡されてはいけません。
また、バーコードハンドラをrootとして実行しないことをお勧めします。したがって、キーボードデバイスにはすべての人に対する読み取り権限が必要です。
答え1
1)キーボードを無視するようにXを設定する方法
バーコードスキャナを照会するために使用されるID lsusb
(形式0123:4567
)。xorg.conf
ファイルを作成または変更します(通常はから/etc/X11/
)。InputClass
見つけたIDを含むセクションを追加します。
Section "InputClass"
Identifier "barcode"
MatchUSBID "0123:4567"
Option "Ignore" "true"
EndSection
Xを再起動し、Xorg.log
このセクションでデバイスが認識され無視されることを確認してください。
2)キー入力からASCII(または他の)コードへの変換は、さまざまなキーボードレイアウト、デッドキー、カスタマイズなどを可能にするため、非常に複雑です。これでX変換レイヤーを無効にしたので、そのデバイスでキー押下とキードロップイベントを受け取ることが/dev/input/eventX
できます。数字は変更されることがあります。バーコードリーダーには/dev/input/by-id/
変更されないシンボリックリンクがあります。したがって、シンボリックリンクを使用してください。
このファイルを実行すると、evtest
生成されるイベントの種類を確認できます。バーコードリーダーへのマッピングは簡単なので、keyymからASCIIコードへのテーブルルックアップで十分です。自分のプログラムでこれらのイベントを処理したり、evtest
ソースコードを表示したり、たとえばここ。デバイスを読み、標準出力からASCIIを生成し、パイプなどを使用してアプリケーションに統合する小さなCプログラムを書くこともできます。
「ASCIIストリームデバイスへのマッピング」は不可能です。 Linuxカーネルにはそのようなデバイスはありません。
3) 権限設定
udev
入力デバイスの権限を設定するには、カスタムルールを作成する必要があります。SUBSYSTEM
必須一致input
、ACTION
必須一致ADD
、および環境には、デバイスとENV
一致する情報(詳細情報を見つけるために使用されます)を含める必要があり、udevadm
新しく作成されたデバイスにOWNER
設定できますGROUP
。これはちょっと一般的です。MODE
/dev/input/eventX
どのように、より具体的なコンテンツが見つかりません。より良いチュートリアルを見るには、Googleを使用してください。