Ich schreibe ein Programm, das zu bestimmten Zeiten Tastaturschlüssel abfragen muss, und anstatt zu versuchen, meine eigene ereignisgesteuerte Tastaturabfrageklasse zu schreiben, dachte ich, ich würde es benutzen JInputs integrierte Tastaturklasse.Verwenden von Tastaturen in JInput ohne root-Berechtigungen
Es funktioniert perfekt, wenn ich mein Programm als root ausführen (ich bin auf Ubuntu 10.10 ausgeführt), aber es erkennt nicht einmal die Tatsache, dass die Tastatur existiert, wenn sie als normaler Benutzer ausgeführt wird. Ich erhalte die folgende Fehlerausgang:
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)
Hat jemand keine Erfahrung mit Tastaturen in JInput oder irgendwelche Ideen, wie dies zu umgehen, so habe ich nicht als root ausführen? Vielen Dank!
Einfache udev-Regel würde beibehalten/dev/input/event * -Berechtigungen. Ich würde lieber eine spezielle Gruppe (zB "input") erstellen und dann etwas wie "KERNEL ==" event * ", NAME =" input /% k ", MODE =" 640 ", GROUP =" input "' zu/etc/udev/rules.d/99-evdev.rules –
@barti: Ahh, ich meinte die Berechtigungen als eine gute Sache rückgängig zu machen :-). Aber die Idee, die Geräte in einer Gruppe zu sandboxieren, ist gut. Leider scheint es, dass all diese Lösungen für jemanden, der nur das Spiel spielen will, ziemlich eklig sind (ich würde mich davor hüten, etwas zu installieren, das uneingeschränkten Zugriff auf mein Tastaturgerät während des laufenden Programms benötigt, egal ob es das ist oder nicht im Vordergrund oder nicht). –
@Mark: Ok, ich sehe Deinen Punkt jetzt (und ich bin froh, dass ich Deinen Kommentar provoziert habe) :) Alles läuft auf den Anwendungstyp hinaus: Ich kann keinen Grund sehen, warum das Spiel Zugriff darauf haben sollte systemweite Tastaturereignisse. Auf der anderen Seite sieht das Tunen von Eingabezugriffsberechtigungen weniger böse aus als das Setzen von Setuidbit oder das Ausführen von Programmen als Superbenutzer. Aber wieder kann ich etwas verpassen :) –