代码之家  ›  专栏  ›  技术社区  ›  Haldean Brown

在没有根权限的jinput中使用键盘

  •  1
  • Haldean Brown  · 技术社区  · 15 年前

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

    当我以根用户身份运行程序时(我在Ubuntu10.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使用键盘的经验,或者有什么关于如何解决这个问题的想法,这样我就不必以根用户身份运行了?谢谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   Mark Peters    15 年前

    您也可以这样做,而不是以根用户身份运行程序

    sudo chmod a+r /dev/input/event5
    

    (或者任何一个设备指向你的键盘)不过,由你来决定哪一个更安全地用于你的目的。我认为,但不确定,重新启动后权限将恢复。

    如果不以根用户身份运行应用程序或执行上述操作,我就无法让Jinput的键盘适配器在Ubuntu中工作。也许不是你想要的答案,但它至少会告诉你你并不孤单。

    任何人都无法读取设备的明显原因是,非特权程序(即keylogger)不能在任何给定时间只监听来自键盘的所有输入。我认为不同的窗口系统以特权模式运行,然后控制用户程序对键盘数据的访问。如果Jinput通过了该层,您可能不需要特殊特权。

    编辑

    因为它似乎是为行动,我将包括巴蒂DDU的笔记在这里。作为上面提到的手动更改键盘设备权限的替代方法,您还可以设置一个udev规则,以便自动设置这些权限。值得注意的是,您可以使用它为设备设置组(称为“输入”),然后相应地运行程序。

    它包括在 /etc/udev/rules.d/99-evdev.rules :

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

    警告: 未经测试的。