From a5e5a4031772d91ae50e8c778676a1d51b49d6d7 Mon Sep 17 00:00:00 2001 From: Benjamin Drung Date: Wed, 6 Apr 2022 14:10:14 +0200 Subject: [PATCH] Set GNOME keyboard layout Ubuntu-Bug: https://launchpad.net/bugs/1875062 Signed-off-by: Benjamin Drung --- ubiquity/plugins/ubi-console-setup.py | 38 ++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/ubiquity/plugins/ubi-console-setup.py b/ubiquity/plugins/ubi-console-setup.py index 5a307b523b..1e863a44d6 100644 --- a/ubiquity/plugins/ubi-console-setup.py +++ b/ubiquity/plugins/ubi-console-setup.py @@ -21,7 +21,7 @@ import os import re -from ubiquity import keyboard_names, misc, osextras, plugin +from ubiquity import gsettings, keyboard_names, misc, osextras, plugin NAME = 'console_setup' @@ -696,10 +696,45 @@ class Page(plugin.Plugin): (model, layout, variant, options) = \ self.adjust_keyboard(model, layout, variant, []) + self.set_gnome_keyboard_layout(layout, variant) self.debug("Setting keyboard layout: %s %s %s %s" % (model, layout, variant, options)) self.apply_real_keyboard(model, layout, variant, options) + def get_gnome_keyboard_layout(self): + sources = gsettings.get_list( + "org.gnome.desktop.input-sources", "sources" + ) + self.debug("### org.gnome.desktop.input-sources sources = %r", sources) + return sources + + def set_gnome_keyboard_layout(self, layout, variant): + if variant: + input_source = ("xkb", f"{layout}+{variant}") + else: + input_source = ("xkb", f"{layout}") + + sources = self.get_gnome_keyboard_layout() + if not sources: + self.debug("### Empty/not existing GNOME input sources configuration.") + return + if input_source in sources: + self.debug( + "### Keyboard layout %s already in GNOME input sources: %s", + input_source, + sources + ) + return + self.debug( + "### Calling: gsettings set org.gnome.desktop.input-sources sources %r", + [input_source] + sources, + ) + gsettings.set_list( + "org.gnome.desktop.input-sources", + "sources", + [input_source] + sources + ) + def apply_real_keyboard(self, model, layout, variant, options): args = [] if model is not None and model != '': @@ -812,6 +847,7 @@ class Page(plugin.Plugin): options_list = options.split(',') else: options_list = [] + self.set_gnome_keyboard_layout(layout, variant) self.apply_real_keyboard(model, layout, variant, options_list) plugin.Plugin.cleanup(self) -- 2.32.0