2
我有一個鍵盤插入Linux的盒子,然後我通過ssh運行我的Java。我想知道是否有辦法告訴Java傾聽來自特定鍵盤/終端的輸入。由於我想捕獲的鍵盤被插入物理機器,並且沒有用戶登錄,我不確定是否有辦法做到這一點,但我想我可能會問這裏?告訴java要聆聽哪個鍵盤
我有一個鍵盤插入Linux的盒子,然後我通過ssh運行我的Java。我想知道是否有辦法告訴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));
}
如果的FileInputStream沒有使用的BufferedInputStream包裝,代碼java.io.IOException異常:無效的參數。當代碼是DataInputStream in = new DataInputStream時( \t \t \t新的BufferedInputStream(新的FileInputStream(「/ dev/input/by-id/usb-0430_0005-event-kbd」)));一切工作正常。 –