#!/usr/bin/python

import dbus
import os

priv = "com.ubuntu.systemservice.setkeyboard"

session_bus = dbus.SessionBus()
system_bus = dbus.SystemBus()

ser = dbus.Interface(system_bus.get_object("com.ubuntu.SystemService","/"),
                     "com.ubuntu.SystemService")

print ser.get_keyboard()

try:
   ser.set_keyboard("", "us", "", "")
except dbus.DBusException, e:
   print e
   obj = session_bus.get_object('org.freedesktop.PolicyKit.AuthenticationAgent', '/', False)
   auth = dbus.Interface(obj, "org.freedesktop.PolicyKit.AuthenticationAgent")
   res = auth.ObtainAuthorization(priv,
                                  dbus.UInt32(0),
                                  dbus.UInt32(os.getpid()), 
                                  timeout=300)
   if res:
      print "settings keyboard"
      res = ser.set_keyboard("pc105", "de","nodeadkeys", "ctrl:nocaps")
      assert (res == True)
   else:
      print "authentication failure"

# illeal char in variant
assert(ser.set_keyboard("pc105", "de", "?", "ctrl:nocaps") == False)

# illegal layout
assert(ser.set_keyboard("pc105", "dex","nodeadkeys", "ctrl:nocaps") == False)

# illegal model
assert(ser.set_keyboard("px117", "dex","nodeadkeys", "ctrl:nocaps") == False)

print ser.get_keyboard()
