The Python example below is an almost line-by-line port of the original, but it should give you a basic idea on how to use the API for your own scripts.
#! /usr/bin/env python import sys, os from gi.repository import GObject, Gio, Polkit def on_tensec_timeout(loop): print("Ten seconds have passed. Now exiting.") loop.quit() return False def check_authorization_cb(authority, res, loop): try: result = authority.check_authorization_finish(res) if result.get_is_authorized(): print("Authorized") elif result.get_is_challenge(): print("Challenge") else: print("Not authorized") except GObject.GError as error: print("Error checking authorization: %s" % error.message) print("Authorization check has been cancelled " "and the dialog should now be hidden.\n" "This process will exit in ten seconds.") GObject.timeout_add(10000, on_tensec_timeout, loop) def do_cancel(cancellable): print("Timer has expired; cancelling authorization check") cancellable.cancel() return False if __name__ == "__main__": if len(sys.argv) != 2: print("usage: %s <action_id>" % sys.argv) sys.exit(1) action_id = sys.argv mainloop = GObject.MainLoop() authority = Polkit.Authority.get() subject = Polkit.UnixProcess.new(os.getppid()) cancellable = Gio.Cancellable() GObject.timeout_add(10 * 1000, do_cancel, cancellable) authority.check_authorization(subject, action_id, #"org.freedesktop.policykit.exec", None, Polkit.CheckAuthorizationFlags.ALLOW_USER_INTERACTION, cancellable, check_authorization_cb, mainloop) mainloop.run()
In order to run this example, make sure you have the gir1.2-polkit-1.0 package installed and provide an action in the command line, for example:
I suppose, the API is still a little rough on the edges, but it's already usable and I'm going to try it for an upcoming D-Bus service in indicator-cpufreq. Looks like it's perfect time to start moving things to GObject introspection already.