【发布时间】:2013-10-10 15:48:52
【问题描述】:
我将一个键盘插入 linux 机器,然后通过 ssh 运行我的 Java。我想知道是否有办法告诉 Java 监听来自特定键盘/终端的输入。由于我要捕获的键盘已插入物理机并且没有用户登录我不确定是否有办法做到这一点,但我想我可以在这里问一下?
【问题讨论】:
我将一个键盘插入 linux 机器,然后通过 ssh 运行我的 Java。我想知道是否有办法告诉 Java 监听来自特定键盘/终端的输入。由于我要捕获的键盘已插入物理机并且没有用户登录我不确定是否有办法做到这一点,但我想我可以在这里问一下?
【问题讨论】:
如果您有 root 权限,您可以直接从/dev/input 下的键盘设备读取键盘事件。解码事件需要一点努力,但可以做到;您可以在/dev/input keyboard format 中阅读有关数据格式的信息。
这个 sn-p 读取键盘事件并识别您按下和释放的 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));
}
【讨论】: