2009-08-12 6 views
1

Ich habe ein Gerät, das eine begrenzte Anzahl von Tastencodes ausgibt (zum Beispiel einen Tastaturkeil-Barcode-Scanner) und ich möchte wissen, was diese Tastencodes auf allen möglichen Tastaturlayouts eingeben. Ich möchte einen X11-Client schreiben, der das Tastaturlayout für jede installierte Tastaturbelegung festlegt und dann den für jeden Tastendruck empfangenen Unicode vom Gerät aufzeichnet.Wie listet ich alle verfügbaren Tastaturlayouts in X.org auf?

Wie bekomme ich die Liste aller installierten Tastaturlayouts?

Antwort

5

x.org speichert nun seine Tastaturlayouts in XML. Es ist einfach, die verfügbaren Layouts von /usr/share/X11/xkb/rules/base.xml zu analysieren. Ubuntu hat eine ähnliche evdev.xml in diesem Verzeichnis, ich bin mir nicht sicher, wie sie sich unterscheiden. In 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