2013-10-03 44 views
2

我有一個鍵盤插入Linux的盒子,然後我通過ssh運行我的Java。我想知道是否有辦法告訴Java傾聽來自特定鍵盤/終端的輸入。由於我想捕獲的鍵盤被插入物理機器,並且沒有用戶登錄,我不確定是否有辦法做到這一點,但我想我可能會問這裏?告訴java要聆聽哪個鍵盤

回答

5

如果您擁有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)); 
    } 
+0

如果的FileInputStream沒有使用的BufferedInputStream包裝,代碼java.io.IOException異常:無效的參數。當代碼是DataInputStream in = new DataInputStream時( \t \t \t新的BufferedInputStream(新的FileInputStream(「/ dev/input/by-id/usb-0430_0005-event-kbd」)));一切工作正常。 –