summaryrefslogtreecommitdiff
path: root/cloudinit/distros
diff options
context:
space:
mode:
authormaxnet <bos@je-eigen-domein.nl>2022-01-12 15:37:32 +0100
committerGitHub <noreply@github.com>2022-01-12 08:37:32 -0600
commit5147e8d4764e368ab8ccea7433b02e4ff9d6c901 (patch)
treeb16949cebf383364cd26a8c2fef95bd11e4e2ca7 /cloudinit/distros
parent42b938e8ff4c50833ff7b8f5acc1d9ab3f43ab18 (diff)
downloadvyos-cloud-init-5147e8d4764e368ab8ccea7433b02e4ff9d6c901.tar.gz
vyos-cloud-init-5147e8d4764e368ab8ccea7433b02e4ff9d6c901.zip
Add new config module to set keyboard layout (#1176)
Adds a new module to allow setting keyboard layout, for use-cases in which cloud-init is used to configure OS images meant for physical computers instead of the cloud. This initial release only implements support for Linux distributions that allow layout to be set through systemd's localectl. LP: #1951593
Diffstat (limited to 'cloudinit/distros')
-rwxr-xr-xcloudinit/distros/__init__.py15
-rw-r--r--cloudinit/distros/debian.py7
2 files changed, 22 insertions, 0 deletions
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py
index de000b52..a261c16e 100755
--- a/cloudinit/distros/__init__.py
+++ b/cloudinit/distros/__init__.py
@@ -881,6 +881,21 @@ class Distro(persistence.CloudInitPickleMixin, metaclass=abc.ABCMeta):
cmd = list(init_cmd) + list(cmds[action])
return subp.subp(cmd, capture=True)
+ def set_keymap(self, layout, model, variant, options):
+ if self.uses_systemd():
+ subp.subp(
+ [
+ "localectl",
+ "set-x11-keymap",
+ layout,
+ model,
+ variant,
+ options,
+ ]
+ )
+ else:
+ raise NotImplementedError()
+
def _apply_hostname_transformations_to_url(url: str, transformations: list):
"""
diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py
index 9effa0a0..6dc1ad40 100644
--- a/cloudinit/distros/debian.py
+++ b/cloudinit/distros/debian.py
@@ -300,6 +300,13 @@ class Distro(distros.Distro):
def get_primary_arch(self):
return util.get_dpkg_architecture()
+ def set_keymap(self, layout, model, variant, options):
+ # Let localectl take care of updating /etc/default/keyboard
+ distros.Distro.set_keymap(self, layout, model, variant, options)
+ # Workaround for localectl not applying new settings instantly
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=926037
+ self.manage_service("restart", "console-setup")
+
def _get_wrapper_prefix(cmd, mode):
if isinstance(cmd, str):