2

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

4

1 回答 1

8

如果您有 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));
    }
于 2013-10-04T11:00:40.493 回答