どのように捉えるかという原HID入力linux?
-
22-08-2019 - |
質問
ショートバージョンの私達成したい:い足踏みペタル(INFINITY-イン-USB-1の場合の金利として実施する汎用HIDデバイス、と私は好きでして行動する制御およびaltキーのプログラムを利用しています。.私の向かいにある、レベルX,すなわちな個別プログラム.
トークショー:私はこのセットアップ作業にWindows XPを呼び出しdll RegisterRawInputDevicesとGetRawInputDataとを聞き入力に隠します。すべてはかなり簡単 Autohotkey リクエストを投稿できますここにすれば).そのポイントはありません必要な追加ドライバーなど。だけのネイティブWindows dllのが必要です。
またこのセットアップ作業linux(具体的には、Gnomeの下にUbuntuい時に使用その他のdistro/ウィンドウマネージャので、溶液のレベルのXます。この足踏みペタルを登録されないとキーボードでジョイスティックなどのHIDデバイスUsagePage12、利用3.いる最新のUbuntuを検出できるので好きなキーは、Microsoftの天然のキーボードは、登録HIDデバイス*.かし、その鍵のペアがWindows用と同様の方法を使って足踏みペタル(なく、同梱ソフトウエア)うになっているのでしょうかこのペダルのことでlinuxの場合も、問題はいかがですか?
[今回が初めての低レベルのものLinuxください手へのリンクや紹介についてのチュートリアルも適用する。]
*ない方のために、私たちにとっては、Microsoft天然のキーボードレジスタとして通常のキーボード、汎用HID装置です。なアプリケーションなどを同梱)の利用方法を把握する解釈のHIDを入力すると、その通常のキーがお気に入りのキーに特別な機能キーのどちらがいいでしょうか?
を明確にするlinuxではないのペダルを押して入力します。な認識のUSBデバイスがxevしていない出力のためのペダル致します。からの報告の人succesefully用のペダルの下でワインを転写ソフトウェアで働かなければならなWindowsの方いませんので、ペダルのようにキーボードのすべてのネイティブlinuxアプリ).のかという問題があるように思う低レベルのlinuxキーボードドライバー は必要?
こちらはあまり情報:れば問題このターミナル
cat /dev/usb/hiddev0
(dev/usb/hiddev0
私はエクスプレッションペダル)を取得し、原コードに対応するマルペダル致します。ことになる。私は、それぞれの原コードをおこなうことができ、バイナリ,0001,0010,0100に対応する各ペダルに、それぞれの組み合わせによりプレスのペダルを送る場合には、バイナリ、リリースのペダルトリガ入力のもペダルが生成される場合はすべてのペダルは、0000送).
どのように取得しまX聞 dev/usb/hiddev0
翻訳の原コードでも特別なキーコードできるよう、地図としてxmodmapは何かな?
解決
してください uinput
.だいごは/dev/usb/hiddev0を作成して新しいイベントをけることができます送信して /dev/input/uinput
.
この説明で、少しのチュートリアル:使用uinputドライバー Linux2.6.x送信ユーザー入力 {このEInfochips'"ダッシュボード"掲載誌発行年月2007年"先月の"第記 この アーカイブページ}.
他のヒント
デバイスは/ dev /入力に表示されていますか?それがない場合、あなたは、キーボードやマウスのために行うのと同じようにそれをフックする「evdevの」Xドライバを使用します。
あなたはlircd調査する必要があります。これは、リモートコントロールからの入力を解釈します。いくつかは、あなたがlircdに話をお使いのデバイスを得ることができるかもしれませんので、明らかに、一般的なHIDデバイスとして自らを提示リモコンをサポートします。
ここでも同じ問題が発生しますが、ワイヤレス キーボードの特殊キーに問題があります。あなたの痛みが分かります。
とにかく、これを機能させようとして、私の方法は次のとおりです。
sleep 10; killall cat
次に、別の端末ですぐに次のようにします。cat /dev/usb/hiddevice0 > key1.usbdump
を押してデバイスを使用します。これにより、そのキーの hiddevice のバイナリ出力がダンプされます。- 私はすぐに Python スクリプトをハックして、hiddevice 入力を読み取り、イベントを起動しました。これまでのところ、初めてキーを押したときに機能します。これはアダムが提案したものと似ていますが、uinput はおそらくよりエレガントではあるものの、プログラム/使用がより難しく、Python はすぐに利用できると思います。
したがって、これは進行中の作業です (最初に押したときのみ機能します) が、おそらく次のようなものがうまくいくかもしれません。
sf1 = open("test.usbdump").read() # read the earlier usb dump from hiddevice
kb = open("/dev/usb/hiddev0")
while 1:
# Prints true if the specific key has been read.
print (kb.read(len(sf1)) == sf1)
# Basically all that has to be done is if ^ is true, then fire off the event you want.
誰かが私のプログラムを手伝ってくれたり、私のやり方が間違っている場合は、教えてください。;)
hiddevice の初期ダンプにいくつかのヘッダーが含まれていることがわかりました。いくつかの Bless 16 進数編集とビット差分を使用すると、どの値が重要かを見つけて、Python でそれらをチェックすることができます。(たとえば、16 進数の「B0」は、キーボードで特別なファンクション キーが押されたことを意味し、どのキーが押されたかなどについての詳細情報が後で表示されます。)
私の最終結果は次のとおりです。hiddevice0 はしばらくするとハングしてデータの提供を停止するようです。理由はわかりませんが、代わりに /dev/input/event* を使用します (これはあなたにとってもうまくいくかもしれません)。繰り返しますが、同じ 6 進編集と低レベルの解析が成功につながります。途中で見つけたのが、 sudo cat /dev/input/event3 | hexdump
どのバイトが自分にとって重要かを判断するのに非常に役立ちます。
したがって、Sk-8812 IBM キーボードをお持ちで、特殊なキーを使用したい場合は、私に相談して、私が使用したスクリプトを入手してください。
Infinity IN-USB-1 (別名「VEC USB Footpedal」) を使用して、X の下に任意のキーシムを送信する方法について、ブログに書きました。
Linux で VEC/Infinity USB フット ペダルをキーボードとして使用する
(IN-USB-2 や、VEC および P.I. が販売する他の USB フット コントローラー モデルでも機能するはずです。エンジニアリングとそのクローン。)
短いバージョンは次のとおりです。
X にペダルを認識させます
ペダルは HID 準拠の USB デバイスであり、カーネルは問題なくペダルを検出し、そのイベントをユーザー空間で利用できるようにします。 /dev/input/eventX
ノード。実行できることを確認するには、 evtest
プログラム (Debian の場合: sudo apt install evtest
)。だから、あなたはそうしません 必要 フットペダルを使用するには、HID レベルに移動します。
問題は、udev がキーボードまたはマウスとしてタグ付けしないため、X がそれを無視することです。これは 1 行の udev ルール ファイルで修正できます (おかげで パラタイプ このソリューションを提供してくれた開発者 Gabor Karsay Parlatype 第 28 号):
ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{idVendor}=="05f3", ATTRS{idProduct}=="00ff", ENV{ID_INPUT_KEYBOARD}="1"
その行を というファイルに入れます /etc/udev/rules.d/10-vec-usb-footpedal.rules
. 。何も再起動する必要はありません。udev が自動的にファイルを検出します。
これで、USB ペダルを抜き差しすると、X によって認識されるようになります (そしてマウス ボタン イベントが送信されます)。確認するには、実行します xev
.
udev hwdb を使用した keysym の再マッピング
マウスのクリックだけを送信するペダルは、おそらくあなたが望むものではありません。ペダルスイッチによって送信されるこのキーコードは、udev hwdb ファイルで再マッピングできます。
以下にファイルを作成します /etc/udev/hwdb.d/
(私のものを入れました /etc/udev/hwdb.d/60-usb-footpedal.hwdb
) 次の行が含まれます:/etc/udev/hwdb.d/60-usb-footpedal.hwdb
evdev:input:b*v05F3p00FF*
KEYBOARD_KEY_90001=f14
KEYBOARD_KEY_90002=f15
KEYBOARD_KEY_90003=f16
今回は、バイナリ hwdb ファイルを更新するようにシステムに通知する必要があります。
$ sudo systemd-hwdb update
その後、デバイスのプラグを抜き、再度接続します。
hwdb ファイルの最初の行は、デバイス (ベンダー) と一致します。 05F3
, 、 製品 00FF
)、後続の行はスキャンコード (16 進数) をキーコードにマップします。私は F14、F15、および F16 ファンクション キーを選択しましたが、使用可能なキーコードのリストは次のとおりです。 /usr/include/linux/input-event-codes.h;そのファイルで定義されている名前を hwdb キーコードとして使用するには、単にそれらを小文字に変換し、 key_
接頭語。
私のコンピュータのデフォルト (pc+us) xkb キーボード レイアウトがマップされます。 F14
, F15
, 、 そして F16
に XF86Launch5
, XF86Launch6
, 、 そして XF86Launch7
キーシム、それぞれ。開けたら xev
ここでペダルを踏むと、キーシムが出力されるのが確認できるはずです。これらのキーシムを使用すると、各ペダル スイッチをデスクトップまたはウィンドウ マネージャーのホットキーとしてマッピングできます。
を再マップすることもできます XF86*
xmodmap などを使用して他のキーに keysym を追加します。vim でマッピングできるキーの取得、ドキュメントへのリンク、必要に応じて HID デバイスを直接読み取るためのポインタ、Mac OS X 用のソリューションなどの詳細については、私のドキュメントを参照してください。 ウェブログの投稿
フットコントローラー
最後にもう 1 つ触れておきたいのは、という Python プログラムです。 フットコントローラー これは evdev デバイス (/dev/input/eventX) からイベントを読み取り、(xdotool 経由で) キーストロークを発行したり、ペダルを踏むことに応じてスクリプトを実行したりするように構成できます。これを xmodmap の代わりに使用して、ペダルに任意のキーストロークを送信させることができます。
私はeasystrokeとxmacro、私の結合/ shorcuts Compizの組み合わせのために使用します。
あなたのニーズのために、私は、行方不明の作品がxbindkeysだと思います。私は多分これを設定するのに役立ちますことを、あなたのために、このリンクを発見した。
http://linux-trackball.dreamhosters.com/する
私はいくつかのマウスデバイスを区別するための方法があるかどうか、とにかく不思議ます。