From 57837c4298b0e4436246c6a0606fe5a1a3c48a71 Mon Sep 17 00:00:00 2001 From: Vratislav Podzimek Date: Jan 15 2014 07:10:18 +0000 Subject: Implement and use functions for conversion between keymaps and layouts In many cases we cannot afford changing keyboard configuration in order to convert between VConsole keymaps and X layouts (e.g. image install). Related: rhbz#1024774 --- diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py index 6f0231d..d97ed27 100644 --- a/pyanaconda/keyboard.py +++ b/pyanaconda/keyboard.py @@ -150,13 +150,13 @@ def populate_missing_items(keyboard): localed = LocaledWrapper() if keyboard.x_layouts and not keyboard.vc_keymap: - keyboard.vc_keymap = localed.set_and_convert_layout(keyboard.x_layouts[0]) + keyboard.vc_keymap = localed.convert_layout(keyboard.x_layouts[0]) if not keyboard.vc_keymap: keyboard.vc_keymap = DEFAULT_KEYBOARD if not keyboard.x_layouts: - c_lay_var = localed.set_and_convert_keymap(keyboard.vc_keymap) + c_lay_var = localed.convert_keymap(keyboard.vc_keymap) keyboard.x_layouts.append(c_lay_var) def write_keyboard_config(keyboard, root, convert=True): @@ -792,6 +792,27 @@ class LocaledWrapper(object): dbus_call_safe_sync(LOCALED_SERVICE, LOCALED_OBJECT_PATH, LOCALED_IFACE, "SetVConsoleKeyboard", args, self._connection) + def convert_keymap(self, keymap): + """ + Method that returns X11 layouts and variants that (systemd-localed + thinks) match given keymap best. + + :param keymap: VConsole keymap + :type keymap: str + :return: X11 layouts and variants that (systemd-localed thinks) match + given keymap best + :rtype: str + + """ + + # hack around systemd's lack of functionality -- no function to just + # convert without changing keyboard configuration + orig_keymap = self.keymap + ret = self.set_and_convert_keymap(keymap) + self.set_keymap(orig_keymap) + + return ret + def set_and_convert_keymap(self, keymap): """ Method that sets VConsole keymap and returns X11 layouts and @@ -861,3 +882,24 @@ class LocaledWrapper(object): self.set_layouts([layout_variant], convert=True) return self.keymap + + def convert_layout(self, layout_variant): + """ + Method that returns VConsole keymap that (systemd-localed thinks) + matches given layout and variant best. + + :param layout_variant: 'layout (variant)' or 'layout' specification + :type layout_variant: str + :return: a keymap matching layout and variant best + :rtype: string + + """ + + # hack around systemd's lack of functionality -- no function to just + # convert without changing keyboard configuration + orig_layouts_variants = self.layouts_variants + ret = self.set_and_convert_layout(layout_variant) + self.set_layouts(orig_layouts_variants) + + return ret +