530b1f8
#!/usr/bin/env python
530b1f8
# encoding: utf-8
530b1f8
# vim: tabstop=4 expandtab autoindent shiftwidth=4 fileencoding=utf-8
530b1f8
"""
530b1f8
fedora-setup-keyboard.py
b6fae10
530b1f8
Written by Alexander D. Kanevskiy <kad@blackcatlinux.com>
530b1f8
"""
b6fae10
530b1f8
import sys, os, dbus
530b1f8
import rhpl.keyboard_models
530b1f8
from rhpl.simpleconfig import SimpleConfigFile
b6fae10
530b1f8
KBDCONFIG = "/etc/sysconfig/keyboard"
b6fae10
530b1f8
def main():
530b1f8
    # Sanity checks
530b1f8
    if 'UDI' not in os.environ:
530b1f8
        sys.exit(1)
530b1f8
    if not os.access(KBDCONFIG, os.R_OK):
530b1f8
        sys.exit(0)
530b1f8
    # Read config
530b1f8
    kbd_config = SimpleConfigFile()
530b1f8
    kbd_config.read(KBDCONFIG)
530b1f8
    kbd_models = rhpl.keyboard_models.KeyboardModels().get_models()
530b1f8
    (layout, model, variant, options) = tuple(kbd_models.get(kbd_config.info.get('KEYTABLE',''), ['', '', '', '', ''])[1:])
530b1f8
    result_dict = { 'layout': layout, 'model': model, 'variant': variant, 'options': options }
530b1f8
    
530b1f8
    # Now let's dbus fun begin
530b1f8
    if 'HALD_DIRECT_ADDR' in os.environ:
530b1f8
        bus = dbus.connection.Connection(os.environ['HALD_DIRECT_ADDR'])
530b1f8
    else:
530b1f8
        bus = dbus.SystemBus()
530b1f8
    kbd = dbus.Interface(bus.get_object("org.freedesktop.Hal", os.environ['UDI']), 'org.freedesktop.Hal.Device')
530b1f8
    for key in result_dict:
530b1f8
        # Respect user settings
530b1f8
        value = kbd_config.info.get(key.upper(), result_dict[key])
530b1f8
        if not value:
530b1f8
            try:
530b1f8
                kbd.RemoveProperty("input.xkb.%s" % key)
530b1f8
            except dbus.exceptions.DBusException:
530b1f8
                pass # key already not exist
530b1f8
        else:
530b1f8
            kbd.SetPropertyString("input.xkb.%s" % key, value)
b6fae10
b6fae10
530b1f8
if __name__ == '__main__':
530b1f8
    main()