1

特定の時間にキーボード キーをポーリングする必要があるプログラムを作成しています。独自のイベント ドリブン キーボード ポーリング クラスを作成するのではなく、JInput の組み込みのキーボード クラスを使用することにしました。

プログラムをルートとして実行すると完全に機能しますが(Ubuntu 10.10で実行しています)、通常のユーザーとして実行するとキーボードが存在するという事実さえ検出されません。次のエラー出力が表示されます。

Nov 29, 2010 2:08:50 PM net.java.games.input.DefaultControllerEnvironment getControllers
INFO: Loading: net.java.games.input.LinuxEnvironmentPlugin
Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event11): Failed to open device /dev/input/event11 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event10): Failed to open device /dev/input/event10 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event9): Failed to open device /dev/input/event9 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event8): Failed to open device /dev/input/event8 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event7): Failed to open device /dev/input/event7 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event6): Failed to open device /dev/input/event6 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event5): Failed to open device /dev/input/event5 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event4): Failed to open device /dev/input/event4 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event3): Failed to open device /dev/input/event3 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event2): Failed to open device /dev/input/event2 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event1): Failed to open device /dev/input/event1 (13)


Nov 29, 2010 2:08:50 PM net.java.games.input.ControllerEnvironment log
INFO: Failed to open device (/dev/input/event0): Failed to open device /dev/input/event0 (13)

root として実行する必要がないように、JInput でキーボードを使用した経験がある人や、これを回避する方法についてのアイデアはありますか? ありがとう!

4

1 に答える 1

1

プログラムをルートとして実行する代わりに、次のこともできます

sudo chmod a+r /dev/input/event5

(または、どちらのデバイスがキーボードを指していても) ただし、どちらが目的により安全かを判断するのはあなた次第です。再起動後に権限が元に戻ると思いますが、確かではありません。

アプリケーションをルートとして実行するか、上記の手順を実行しない限り、JInput のキーボード アダプターを Ubuntu で動作させることはできませんでした。おそらくあなたが望んでいた答えではありませんが、少なくともあなたが一人ではないことを教えてくれます.

誰でもデバイスを読み取ることができない明らかな理由は、権限のないプログラム (つまりキーロガー) が、キーボードからのすべての入力を常にリッスンできないようにするためです。さまざまなウィンドウ システムが特権モードで実行され、ユーザー プログラムへのキーボード データへのアクセスを制御していると思います。JInput がそのレイヤーを通過した場合、おそらく特別な特権は必要ありません。

編集

OPでうまくいきそうなので、ここにbarti_dduのメモを含めます。上記のようにキーボード デバイスのアクセス許可を手動で変更する代わりに、これらのアクセス許可が自動的に設定されるように udev ルールを設定することもできます。特に、それを使用してデバイスのグループを設定し(「入力」など)、それに応じてプログラムを実行できます。

に次のようなものを追加する必要があり/etc/udev/rules.d/99-evdev.rulesます。

KERNEL=="event*", NAME="input/%k", MODE="640", GROUP="input"

警告:未テスト。

于 2010-11-29T19:50:48.047 に答える