1

我正在编写一个需要在特定时间轮询键盘键的程序,而不是通过编写我自己的事件驱动键盘轮询类的努力,我想我会使用 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 身份运行?谢谢!

4

1 回答 1

1

除了以 root 身份运行程序,您还可以执行

sudo chmod a+r /dev/input/event5

(或指向您的键盘的任何设备)不过,由您决定哪个对您的目的更安全。我认为,但不确定,权限会在重新启动后恢复。

如果不以 root 身份运行应用程序或执行上述操作,我永远无法让 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 回答