java - 在没有 root 权限的情况下在 JInput 中使用键盘

标签 java keyboard jinput

我正在编写一个需要在特定时间轮询键盘按键的程序,我认为我应该使用 JInput 的内置 Keyboard 类,而不是编写自己的事件驱动键盘轮询类。

当我以 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 身份运行?谢谢!

最佳答案

除了以 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"

警告:未经测试。

关于java - 在没有 root 权限的情况下在 JInput 中使用键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307143/

相关文章:

gradle - 当我需要二进制库文件 (JInput) 时,如何构建和运行我的 gradle 项目?

java - 如何判断摇杆何时松开

List的Java匿名内部类

java - 使用内置注释创建自定义验证注释

java - 如何在android中注册SmsManager

javascript - 如何通过按不同的键来模拟按键

ios - 无法关闭键盘 iOS。没有任何作用

java - 如何使用 key 监听器来验证对文本字段的输入

java - 流口水验证

java - linux arm 上的 Jinput(树莓派)