2010-11-29 5 views
1

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

私はrootとしてプログラムを実行すると(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またはこれを回避する方法のための任意のアイデアでキーボードを使用して任意の経験を持っていますか?ありがとう!

答えて

1

代わりにrootとしてプログラムを実行するので、あなたも

sudo chmod a+r /dev/input/event5 

(または、キーボードのいずれかのデバイスのポイント)を行うことができますこれは、しかし、あなたの目的のために、より安全であるかを決定するのはあなた次第です。私は、再起動後に権限が復活するとは思うが、わからない。

私は、UbuntuでJInputのキーボードアダプタを動作させることはできませんでした。おそらくあなたが望む答えではないかもしれませんが、少なくともあなたは一人ではないと言います。

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

編集

それはOPのために働くように見えたので、私はここでbarti_dduのノートが含まれます。上記のように手動でキーボードデバイスの権限を変更する代わりに、これらの権限が自動的に設定されるようにudevルールを設定することもできます。特に、それを使ってデバイスのグループを設定することができます(例えば、 "input")。それに応じてプログラムを実行します。

それは/etc/udev/rules.d/99-evdev.rulesに、このような何かを追加する伴うだろう:

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

警告:テストされていません。

+1

単純なudevルールは/ dev/input/event *権限を保持します。私はむしろ特別なグループ(例えば "入力")を作成し、 'KERNEL =="イベント* "、NAME ="入力/%k "、MODE =" 640 "、GROUP ="入力 " etc/udev/rules.d/99-evdev.rules –

+0

@barti:ああ、私は良いものとして復帰する権限を意味しました:-)。しかし、グループ内のデバイスをサンドボックス化するという考えは良いことです。残念ながら、これらのソリューションはすべて、ゲームをプレイしたいと思っている誰かのために一種のグッドです(プログラムの実行中にキーボードデバイスに自由にアクセスする必要があるということを気にしています。フォアグラウンドでもそうでなくても)。 –

+0

@マーク:さて、あなたの意見を見ています(とにかく、あなたのコメントを誘発しました):)すべてがアプリケーションの種類に変わります。なぜゲームにアクセスする必要があるのか​​わかりませんシステム全体のキーボードイベント。一方、入力アクセス権のチューニングは、setuidビットの設定やスーパーユーザーとしてのプログラムの実行よりも悪く見えます。しかし、再び、私は何かが欠けている可能性があります:) –

関連する問題