PATCH 1/2 fixes quite a serious issue. That's why I cloned the bug and I want it to go to the rhel7-branch as well. PATCH 2/2 is just a refactorization.
Vratislav Podzimek (2): Try to use VConsole keymap name as X layout (#1007359) Use constant for default keyboard layout
pyanaconda/constants.py | 2 ++ pyanaconda/keyboard.py | 39 ++++++++++++++++++++++++++---------- pyanaconda/ui/gui/spokes/keyboard.py | 11 +++++----- pyanaconda/ui/gui/spokes/welcome.py | 12 +++++------ 4 files changed, 42 insertions(+), 22 deletions(-)
If systemd-localed fails to suggest X layout for a requested VConsole keymap, we may try to use the same name as the X layout (works in many cases) and just fall back to default if it fails to be parsed, loaded or whatever.
Signed-off-by: Vratislav Podzimek vpodzime@redhat.com --- pyanaconda/keyboard.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py index 5b1643c..b5c35b3 100644 --- a/pyanaconda/keyboard.py +++ b/pyanaconda/keyboard.py @@ -216,9 +216,18 @@ def write_keyboard_config(keyboard, root, convert=True): localed_wrapper.set_layouts(layouts_variants, options) else: - # just let systemd-localed write out the conf file - localed_wrapper.set_layouts(keyboard.x_layouts, - keyboard.switch_options) + try: + # just let systemd-localed write out the conf file + localed_wrapper.set_layouts(keyboard.x_layouts, + keyboard.switch_options) + except InvalidLayoutVariantSpec as ilvs: + # some weird value appeared as a requested X layout + log.error("Failed to write out config file: %s", ilvs) + + # try default + keyboard.x_layouts = ["us"] + localed_wrapper.set_layouts(keyboard.x_layouts, + keyboard.switch_options)
if keyboard.vc_keymap: try: @@ -306,12 +315,20 @@ def activate_keyboard(keyboard): if not valid_keymap: log.error("'%s' is not a valid VConsole keymap, not loading", keyboard.vc_keymap) + keyboard.vc_keymap = None else: # activate VConsole keymap and get converted layout and variant c_lay_var = localed.set_and_convert_keymap(keyboard.vc_keymap)
- if not keyboard.x_layouts and c_lay_var: - keyboard.x_layouts.append(c_lay_var) + if not keyboard.x_layouts: + if c_lay_var: + # suggested by systemd-localed for a requested VConsole keymap + keyboard.x_layouts.append(c_lay_var) + if keyboard.vc_keymap: + # nothing suggested by systemd-localed, but we may try to use the + # same string for both VConsole keymap and X layout (will fail + # safely if it doesn't work) + keyboard.x_layouts.append(keyboard.vc_keymap)
if keyboard.x_layouts: c_keymap = localed.set_and_convert_layout(keyboard.x_layouts[0])
Signed-off-by: Vratislav Podzimek vpodzime@redhat.com --- pyanaconda/constants.py | 2 ++ pyanaconda/keyboard.py | 14 +++++++------- pyanaconda/ui/gui/spokes/keyboard.py | 11 ++++++----- pyanaconda/ui/gui/spokes/welcome.py | 12 ++++++------ 4 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/pyanaconda/constants.py b/pyanaconda/constants.py index d4d8708..6ef6948 100644 --- a/pyanaconda/constants.py +++ b/pyanaconda/constants.py @@ -77,6 +77,8 @@ DEFAULT_LANG = "en_US.UTF-8"
DEFAULT_VC_FONT = "latarcyrheb-sun16"
+DEFAULT_KEYBOARD = "us" + DRACUT_SHUTDOWN_EJECT = "/run/initramfs/usr/lib/dracut/hooks/shutdown/99anaconda-eject.sh"
# VNC questions diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py index b5c35b3..651525d 100644 --- a/pyanaconda/keyboard.py +++ b/pyanaconda/keyboard.py @@ -41,7 +41,7 @@ from pyanaconda import iutil from pyanaconda import flags from pyanaconda.safe_dbus import dbus_call_safe_sync, dbus_get_property_safe_sync from pyanaconda.safe_dbus import DBUS_SYSTEM_BUS_ADDR, DBusPropertyError -from pyanaconda.constants import DEFAULT_VC_FONT +from pyanaconda.constants import DEFAULT_VC_FONT, DEFAULT_KEYBOARD
from gi.repository import Xkl, Gio, GLib
@@ -143,7 +143,7 @@ def populate_missing_items(keyboard): keyboard.vc_keymap = localed.set_and_convert_layout(keyboard.x_layouts[0])
if not keyboard.vc_keymap: - keyboard.vc_keymap = "us" + keyboard.vc_keymap = DEFAULT_KEYBOARD
if not keyboard.x_layouts: c_lay_var = localed.set_and_convert_keymap(keyboard.vc_keymap) @@ -225,7 +225,7 @@ def write_keyboard_config(keyboard, root, convert=True): log.error("Failed to write out config file: %s", ilvs)
# try default - keyboard.x_layouts = ["us"] + keyboard.x_layouts = [DEFAULT_KEYBOARD] localed_wrapper.set_layouts(keyboard.x_layouts, keyboard.switch_options)
@@ -421,13 +421,13 @@ class XklWrapper(object): self._rec.layouts, self._rec.variants)) log.error("Failed to activate layouts: '%s', " - "falling back to default 'us'", lay_var_str) - self._rec.set_layouts(["us"]) + "falling back to default %s", lay_var_str, DEFAULT_KEYBOARD) + self._rec.set_layouts([DEFAULT_KEYBOARD]) self._rec.set_variants([""])
if not self._rec.activate(self._engine): - # failed to activate even the default "us" layout, something - # is really wrong + # failed to activate even the default layout, something is + # really wrong raise XklWrapperError("Failed to initialize layouts")
#needed also for Gkbd.KeyboardDrawingDialog diff --git a/pyanaconda/ui/gui/spokes/keyboard.py b/pyanaconda/ui/gui/spokes/keyboard.py index 0cc8e48..0538b67 100644 --- a/pyanaconda/ui/gui/spokes/keyboard.py +++ b/pyanaconda/ui/gui/spokes/keyboard.py @@ -29,6 +29,7 @@ from pyanaconda.ui.gui.utils import enlightbox, gtk_call_once from pyanaconda import keyboard from pyanaconda import flags from pyanaconda.i18n import _, N_ +from pyanaconda.constants import DEFAULT_KEYBOARD
import logging log = logging.getLogger("anaconda") @@ -550,8 +551,8 @@ class KeyboardSpoke(NormalSpoke):
def _add_data_layouts(self): if not self.data.keyboard.x_layouts: - # nothing specified, just add the default 'us' - self._addLayout(self._store, "us") + # nothing specified, just add the default + self._addLayout(self._store, DEFAULT_KEYBOARD) return
valid_layouts = [] @@ -563,9 +564,9 @@ class KeyboardSpoke(NormalSpoke): log.error("Failed to add layout '%s'", layout)
if not valid_layouts: - log.error("No valid layout given, falling back to default 'us'") - self._addLayout(self._store, "us") - self.data.keyboard.x_layouts = ["us"] + log.error("No valid layout given, falling back to default %s", DEFAULT_KEYBOARD) + self._addLayout(self._store, DEFAULT_KEYBOARD) + self.data.keyboard.x_layouts = [DEFAULT_KEYBOARD]
def _flush_layouts_to_X(self): layouts_list = list() diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py index 79efdd2..872cd62 100644 --- a/pyanaconda/ui/gui/spokes/welcome.py +++ b/pyanaconda/ui/gui/spokes/welcome.py @@ -36,7 +36,7 @@ from pyanaconda import flags from pyanaconda import geoloc from pyanaconda.i18n import _ from pyanaconda.iutil import is_unsupported_hw -from pyanaconda.constants import DEFAULT_LANG +from pyanaconda.constants import DEFAULT_LANG, DEFAULT_KEYBOARD
import logging log = logging.getLogger("anaconda") @@ -114,11 +114,11 @@ class WelcomeLanguageSpoke(LangLocaleHandler, StandaloneSpoke): # store it normalized new_layouts = [keyboard.normalize_layout_variant(layouts[0])] if not langtable.supports_ascii(layouts[0]): - # does not support typing ASCII chars, append the 'us' layout - new_layouts.append("us") + # does not support typing ASCII chars, append the default layout + new_layouts.append(DEFAULT_KEYBOARD) else: log.error("Failed to get layout for chosen locale '%s'", locale) - new_layouts = ["us"] + new_layouts = [DEFAULT_KEYBOARD]
self.data.keyboard.x_layouts = new_layouts if flags.can_touch_runtime_system("replace runtime X layouts", touch_live=True): @@ -130,8 +130,8 @@ class WelcomeLanguageSpoke(LangLocaleHandler, StandaloneSpoke):
if flags.can_touch_runtime_system("init layout switching", touch_live=True): self._xklwrapper.set_switching_options(["grp:alt_shift_toggle"]) - # activate the first (language-default) layout instead of the - # 'us' one + # activate the language-default layout instead of the additional + # one self._xklwrapper.activate_default_layout()
@property
PATCH 1/2 fixes quite a serious issue. That's why I cloned the bug and I want it to go to the rhel7-branch as well. PATCH 2/2 is just a refactorization.
Vratislav Podzimek (2): Try to use VConsole keymap name as X layout (#1007359) Use constant for default keyboard layout
pyanaconda/constants.py | 2 ++ pyanaconda/keyboard.py | 39 ++++++++++++++++++++++++++---------- pyanaconda/ui/gui/spokes/keyboard.py | 11 +++++----- pyanaconda/ui/gui/spokes/welcome.py | 12 +++++------ 4 files changed, 42 insertions(+), 22 deletions(-)
These look fine.
- Chris
anaconda-patches@lists.fedorahosted.org