java - 告诉 java 要听哪个键盘

标签 java linux keyboard

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

最佳答案

如果您有 root 权限,您可以直接从 /dev/input 下的键盘设备读取键盘事件。解码事件需要一些努力,但可以做到;您可以在 /dev/input keyboard format 中阅读有关数据格式的信息.

此代码段读取键盘事件并识别您按下和释放的 A-Z 键:

    // 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));
    }

关于java - 告诉 java 要听哪个键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167789/

相关文章:

java - 在Java中将字符串压缩到指定的最大字符数

java - 如何确保用户仅输入 0 到 10 之间的数字?

linux - grep 报告生成模式的出现次数

linux - 用户可编辑的回显文本

Java Swing : Do something while the key is being pressed

c++ - 使用系统命令时 SendInput 不起作用

java - Android:键盘未显示在焦点上

java - 我是否必须为连接查询创建单独的 @Entity 类才能提取结果? Jpa存储库

linux - 为什么 "cd -"会有这样的表现?

java - 对 int 数组进行降序排序