#!/usr/bin/python from gi.repository import Xkl, Gdk, GdkX11 def item_str(s): '''Convert a zero-terminated byte array to a proper str''' i = s.find(b'\x00') return s[:i].decode("utf-8") switching_options = list() def _get_switch_option(c_reg, item, user_data=None): """Helper function storing layout switching options in foreach cycle""" desc = item_str(item.description) name = item_str(item.name) global switching_options switching_options.append((name, desc)) display = GdkX11.x11_get_default_xdisplay() engine = Xkl.Engine.get_instance(display) configreg = Xkl.ConfigRegistry.get_instance(engine) configreg.load(False) #'grp' means that we want layout (group) switching options configreg.foreach_option('grp', _get_switch_option, None) for (name, description) in switching_options: print "%s [%s]" % (description, name)