Xで単独で使用されるUSBキーボード

Xで単独で使用されるUSBキーボード

キーボードをシミュレートする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必須一致inputACTION必須一致ADD、および環境には、デバイスとENV一致する情報(詳細情報を見つけるために使用されます)を含める必要があり、udevadm新しく作成されたデバイスにOWNER設定できますGROUP。これはちょっと一般的です。MODE/dev/input/eventXどのように、より具体的なコンテンツが見つかりません。より良いチュートリアルを見るには、Googleを使用してください。

関連情報