39

私が達成したいことの短いバージョン: 私は、一般的な HID デバイスとして実装されているフットペダル (興味がある場合は、INFINITY-IN-USB-1) を持っていCtrlますAlt。 Linux。個々のプログラムだけでなく、X レベルの何かを探しています。

より長いバージョン: DLL 関数RegisterRawInputDevicesおよびGetRawInputDataを呼び出し、非表示のウィンドウで入力をリッスンすることにより、このセットアップを Windows XP で動作させています。すべては、かなり単純なAutoHotkeyスクリプトで実現されます (興味のある方は、ここに投稿できます)。ポイントは、追加のドライバーなどは必要ないということです。ネイティブの Windows DLL ファイルのみが必要です。

このセットアップが Linux で動作することを望んでいます (より具体的には Ubuntu でのGNOMEですが、他のディストリビューション/ウィンドウ マネージャーを使用することもあるため、X レベルのソリューションを歓迎します)。このフット ペダルは、キーボードやジョイスティックとしては登録されませんが、UsagePage 12、Usage 3 の HID デバイスとして登録されます。

最新の Ubuntu では、HID デバイスとしても登録されるMicrosoft Natural Keyboardのお気に入りのキーを検出して使用できることに気付きました*。私は、フット ペダルを使用するのと同じ方法を使用して (つまり、バンドルされたソフトウェアを使用せずに)、Windows でこれらのキーを使用します。このペダルは Linux でも動作すると思いますが、問題はその方法です。

(私は Linux の下位レベルのものは初めてなので、該当する場合はいつでも紹介やチュートリアルへのリンクを提供してください。)

* よく知らない方のために説明すると、Microsoft Natural Keyboard は、通常のキーボードと汎用 HID デバイスの両方として登録されます。一部のアプリケーション (バンドルされたアプリケーションなど) が HID 入力を解釈する方法を認識していなければ、通常のキーは機能しますが、お気に入りのキーと特殊なファンクション キーは役に立ちません。


明確にするために、Linux はペダルを踏んだことを入力として認識していません。USB デバイスは認識しますが、xevはペダルを押しても何も出力しません。書き起こしソフトウェア用にWineの下でペダルをうまく使用している人々の報告を見たことがありますが、それは Windows の方法で動作する必要があり、私が望むものを提供しません (これにより、すべてのネイティブ Linux アプリケーションに対してペダルがキーボードのように見えます)。低レベルの Linux キーボード ドライバーが必要ですか?


詳細は次のとおりです。ターミナルでこれを発行した場合

cat /dev/usb/hiddev0

(dev/usb/hiddev0は私のペダルです)、ペダルを踏んだことに対応する生のコードを取得します。それが始まりです。これらの生のコードが何を意味するかはわかっています。2 進数では、0001、0010、0100 がそれぞれ各ペダルに対応し、ペダルを押す組み合わせは、これらの 2 進数の組み合わせを送信し、まだ押されているペダルのペダル トリガー入力を解放します (ペダルが上がっている場合、0000 が送信されます)。

xmodmap などでマッピングできるように、X に生のコードを聞いてdev/usb/hiddev0特別なキーコードに変換させるにはどうすればよいですか?

4

6 に答える 6

23

あなたがしたいでしょうuinput。/dev/usb/hiddev0 でリッスンし、送信する新しいイベントを作成します/dev/input/uinput

Linux-2.6.x で uinput ドライバーを使用してユーザー入力を送信{これは、 EInfochips の「ダッシュボード」出版物 2007 年 1 月号の「今月のヒント」の記事で、このアーカイブ ページに記載されています}。

于 2009-11-24T18:47:42.007 に答える
5

デバイスが/dev/inputに表示される場合は、キーボードやマウスの場合と同じように、「evdev」X ドライバーを使用して接続します。

于 2009-11-06T00:52:06.667 に答える
2

ここでも同じ問題がありますが、ワイヤレス キーボードの特殊なキーを使用します。あなたの痛みが分かります。

とにかく、これを機能させようとすると、これが私の方法です:

  1. sleep 10; killall cat次に、別の端末ですばやく:cat /dev/usb/hiddevice0 > key1.usbdumpデバイスを押す/使用します。これにより、そのキーの hiddevice のバイナリ出力がダンプされます。
  2. 私はすぐに Python スクリプトをハックして、hiddevice の入力と起動イベントを読み取りました。これまでのところ、キーが打たれて初めて機能します。これは Adam が提案したものと似ていますが、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* を使用します (あなたにも役立つかもしれません)。ここでも、同じ 16 進編集と低レベルの解析が成功につながります。途中でsudo cat /dev/input/event3 | hexdump、どのバイトがあなたにとって重要であるかを判断するのに非常に役立つことがわかりました.

したがって、SK-8812 IBM キーボードをお持ちで、特殊キーを使用したい場合は、私に連絡して、私が使用したスクリプトを入手してください。

于 2010-12-02T06:10:31.363 に答える
2

LIRCを調査する必要があります。リモコンからの入力を解釈します。サポートされているリモコンの中には、明らかに一般的な HID デバイスとして表示されるものがあるため、デバイスを LIRC と通信させることができる場合があります。

于 2009-05-21T13:15:41.767 に答える
0

私のバインディング/ショートカットでは、Compiz、 easystroke 、および xmacro を組み合わせて使用​​しています。

あなたのニーズのために、欠けているのは xbindkeys だと思います。これを設定するのに役立つかもしれないこのリンクを見つけました:

http://linux-trackball.dreamhosters.com/

とにかく、いくつかのマウスデバイスを区別する方法があるかどうか疑問に思います。

于 2009-05-17T09:27:35.487 に答える