2

Linux ボックスに 1 つのキーボードを接続してから、ssh 経由で Java を実行しています。特定のキーボード/端末からの入力をリッスンするよう Java に指示する方法があるかどうかを知りたいです。キャプチャしたいキーボードが物理マシンに接続されており、ユーザーがログインしていないため、これを行う方法があるかどうかはわかりませんが、ここで質問できると思いましたか?

4

1 に答える 1

8

root 権限を持っている場合は、 の下にあるキーボード デバイスから直接キーボード イベントを読み取ることができます/dev/input。イベントのデコードには少し手間がかかりますが、実行できます。/dev/input keyboard formatでデータ形式について読むことができます。

このスニペットは、キーボード イベントを読み取り、どのキー 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 に答える