<p>这里缺少一个转换步骤。您的输出格式已经很不错了,所以我将帮助您进一步分解它:</p>
<pre><code> Timestamp , scancode, keycode, keystate
key event at 1383327570.147000, 2 (KEY_1), down
key event at 1383327570.147990, 2 (KEY_1), up
</code></pre>
<p>要对此有任何有用的理解,您需要做两件事:</p>
<ol>
<li>仅按筛选器侦听特定类型(down=1,Up=0)的键状态的键关闭类型事件</li>
<li>将扫描码转换成一个ASCII码,它可以随设备的不同而变化,也可以随映射到系统的方式而变化!</li>
</ol>
<p>不过,有一个简单的方法来绘制它们。使用在线服务生成包含所有可用字符的已知条形码,然后扫描该条形码并将输出的每个扫描码映射到扫描仪的正确字母/号码。您可以使用以下稍微修改过的代码来更好地控制输出:</p>
<pre><code>import evdev
from evdev import InputDevice, categorize # import * is evil :)
dev = InputDevice('/dev/input/event1')
# Provided as an example taken from my own keyboard attached to a Centos 6 box:
scancodes = {
# Scancode: ASCIICode
0: None, 1: u'ESC', 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8',
10: u'9', 11: u'0', 12: u'-', 13: u'=', 14: u'BKSP', 15: u'TAB', 16: u'Q', 17: u'W', 18: u'E', 19: u'R',
20: u'T', 21: u'Y', 22: u'U', 23: u'I', 24: u'O', 25: u'P', 26: u'[', 27: u']', 28: u'CRLF', 29: u'LCTRL',
30: u'A', 31: u'S', 32: u'D', 33: u'F', 34: u'G', 35: u'H', 36: u'J', 37: u'K', 38: u'L', 39: u';',
40: u'"', 41: u'`', 42: u'LSHFT', 43: u'\\', 44: u'Z', 45: u'X', 46: u'C', 47: u'V', 48: u'B', 49: u'N',
50: u'M', 51: u',', 52: u'.', 53: u'/', 54: u'RSHFT', 56: u'LALT', 100: u'RALT'
}
for event in dev.read_loop():
if event.type == evdev.ecodes.EV_KEY:
data = evdev.categorize(event) # Save the event temporarily to introspect it
if data.keystate == 1: # Down events only
key_lookup = scancodes.get(data.scancode) or u'UNKNOWN:{}'.format(data.scancode) # Lookup or return UNKNOWN:XX
print u'You Pressed the {} key!'.format(key_lookup) # Print it all out!
</code></pre>
<p>下面是这个脚本的一些示例输出</p>
<pre><code>You Pressed the A key!
You Pressed the B key!
You Pressed the C key!
You Pressed the UNKNOWN:99 key!
</code></pre>
<p>一旦你在线生成一些条码,你就会知道哪个扫描码被映射到哪个值!建立你自己的表和利润!</p>
<p>高温高压</p>