2009-08-12 28 views
1

我有一個輸出有限數量的鍵碼(例如鍵盤楔形條碼掃描器)的設備,我想知道這些鍵碼將在所有可能的鍵盤佈局上鍵入的內容。我想編寫一個X11客戶端,它將鍵盤佈局設置爲每個安裝的鍵盤映射,然後記錄從設備接收到的每個鍵的Unicode。如何枚舉X.org中所有可用的鍵盤佈局?

如何獲得所有安裝的鍵盤佈局列表?

回答

5

x.org現在將其鍵盤佈局存儲在XML中。從/usr/share/X11/xkb/rules/base.xml解析可用佈局很容易。 Ubuntu在該目錄中有類似的evdev.xml,我不確定它們有何不同。在Python中:

#!/usr/bin/env python 
# Enumerate available xkb layouts 
import lxml.etree 
repository = "/usr/share/X11/xkb/rules/base.xml" 
tree = lxml.etree.parse(file(repository)) 
layouts = tree.xpath("//layout") 
for layout in layouts: 
    layoutName = layout.xpath("./configItem/name")[0].text 
    print layoutName 
    for variant in layout.xpath("./variantList/variant/configItem/name"): 
     variantName = variant.text 
     print layoutName, variantName