告诉java要听哪个键盘

use*_*544 2 java linux keyboard

我有一个键盘插入linux盒子然后我在ssh上运行我的Java.我想知道是否有办法告诉Java监听来自特定键盘/终端的输入.由于我想要捕获的键盘插入物理机器而没有用户登录,我不确定有没有办法做到这一点,但我想我可能会问这里?

Jon*_*oni 6

如果您具有root权限,则可以直接从键盘设备读取键盘事件/dev/input.解码事件需要一点努力,但可以做到; 您可以阅读/ dev/input键盘格式的数据格式.

此代码段会读取键盘事件并识别您按下并释放的AZ键:

    // replace path with path from your system
    DataInputStream in = new DataInputStream(
        new FileInputStream("/dev/input/by-id/usb-0430_0005-event-kbd"));
    String map = "    abcdefghijlkmnopqrstuvwxyz                                                                                                                                                                                                                                                                ";
    // sizeof(struct timeval) = 16
    byte[] timeval = new byte[16];
    short type, code;
    int value;
    while (true) {
        in.readFully(timeval);
        type = in.readShort();
        code = in.readShort();
        value = in.readInt();
        System.out.printf("%04x %04x %08x %c\n", type, code, value, 
                                                 map.charAt(value>>>24));
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果未使用BufferedInputStream包装FileInputStream,则代码将引发java.io.IOException:无效参数。当代码为DataInputStream时= new DataInputStream(new BufferedInputStream(new FileInputStream(“ / dev / input / by-id / usb-0430_0005-event-kbd”))); 一切正常。 (2认同)