2010-11-29 117 views
1

我正在编写一个程序,需要在特定时间轮询键盘按键,而不是通过编写自己的事件驱动键盘轮询类的努力,我想我会使用JInput内置的Keyboard类。在没有root权限的情况下在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) 

没有人有使用JInput或如何解决这个任何想法键盘,所以我不必以root身份运行的经验吗?谢谢!

回答

1

,而不是运行程序作为根,你也可以做

sudo chmod a+r /dev/input/event5 

(或任何设备点到键盘),它是由你来决定哪个是你的目的更安全,虽然。我想,但不确定,重新启动后权限会恢复。

我永远无法让JInput的键盘适配器在Ubuntu中工作,而无需以root身份运行该应用程序或执行上述操作。可能不是你想要的答案,但它至少会告诉你你并不孤单。

为什么设备不能被任何人读取的明显原因是为了使非特权程序(即键盘记录器)不能只听到在任何给定时间来自键盘的所有输入。我认为各种窗口系统以特权模式运行,然后控制对用户程序的键盘数据的访问。如果JInput通过该层,则可能不需要特殊权限。

编辑

因为它似乎为OP工作,我会在这里包括barti_ddu的音符。如上所述,作为手动更改键盘设备权限的替代方法,您还可以设置udev规则,以便自动设置这些权限。值得注意的是,你可以用它来设置设备组(比如说“输入”),然后相应地运行程序。

这将涉及增加这样的事情/etc/udev/rules.d/99-evdev.rules

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

警告:未经测试。

+1

简单的udev规则会持续/ dev/input/event *权限。我宁愿创建特殊的组(比如说“输入”),然后把类似于`KERNEL ==“event *”,NAME =“input /%k”,MODE =“640”,GROUP =“input” etc/udev/rules.d/99-evdev.rules – 2010-11-29 20:09:03

相关问题