From c13097d458f816dc5c2023de4005c0094c4d98a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Pierret=20=28fepitre=29?= Date: Tue, 17 Mar 2020 11:35:53 +0100 Subject: [PATCH] qvm-start-daemon: set keyboard-layout only for the first set layout --- qubesadmin/tools/qvm_start_daemon.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/qubesadmin/tools/qvm_start_daemon.py b/qubesadmin/tools/qvm_start_daemon.py index 547474b..0d2ff32 100644 --- a/qubesadmin/tools/qvm_start_daemon.py +++ b/qubesadmin/tools/qvm_start_daemon.py @@ -117,19 +117,19 @@ def get_monitor_layout(): def set_keyboard_layout(vm): """Set layout configuration into features for Gui admin extension""" try: - # Example of 'xprop -root _XKB_RULES_NAMES' output: - # _XKB_RULES_NAMES(STRING) = "evdev", "pc105", "fr", "oss", "" + # Examples of 'xprop -root _XKB_RULES_NAMES' output values: + # "evdev", "pc105", "fr", "oss", "" + # "evdev", "pc105", "pl,us", ",", "grp:win_switch,compose:caps" + + # We use the first layout provided + xkb_re = r'_XKB_RULES_NAMES\(STRING\) = ' \ + r'\"(.*)\", \"(.*)\", \"(.*)\", \"(.*)\", \"(.*)\"\n' xkb_rules_names = subprocess.check_output( ['xprop', '-root', '_XKB_RULES_NAMES']).decode() - xkb_rules_names = xkb_rules_names. \ - replace('"', '').replace('\n', '') - keyboard_layout = '+'.join(xkb_rules_names.split(', ')[2:]) + xkb_parsed = re.match(xkb_re, xkb_rules_names) + xkb_layout = [x.split(',')[0] for x in xkb_parsed.groups()[2:5]] + keyboard_layout = '+'.join(xkb_layout) vm.features['keyboard-layout'] = keyboard_layout - - # Legacy - xkbmap = subprocess.check_output(['setxkbmap', '-print']) - vm.features['qubes-keyboard'] = xkbmap - except subprocess.CalledProcessError as e: vm.log.warning('Failed to set layout for %s: %s', vm, str(e))