From 39d096b79ff70c8f84bda3ef16f5578357091454 Mon Sep 17 00:00:00 2001 From: ngn <78868991+ngn13@users.noreply.github.com> Date: Wed, 15 May 2024 11:41:42 +0000 Subject: [PATCH] Use the current layout instead of the us layout (#2495) * use the current layout instead of the us layout * fix linting erros and add exception handling for SysCommand --- archinstall/lib/locale/locale_menu.py | 7 +++++-- archinstall/lib/locale/utils.py | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/archinstall/lib/locale/locale_menu.py b/archinstall/lib/locale/locale_menu.py index db119f2055..39c1b85ee7 100644 --- a/archinstall/lib/locale/locale_menu.py +++ b/archinstall/lib/locale/locale_menu.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import Dict, Any, TYPE_CHECKING, Optional -from .utils import list_keyboard_languages, list_locales, set_kb_layout +from .utils import list_keyboard_languages, list_locales, set_kb_layout, get_kb_layout from ..menu import Selector, AbstractSubMenu, MenuSelectionType, Menu if TYPE_CHECKING: @@ -16,7 +16,10 @@ class LocaleConfiguration: @staticmethod def default() -> 'LocaleConfiguration': - return LocaleConfiguration('us', 'en_US', 'UTF-8') + layout = get_kb_layout() + if layout == "": + return LocaleConfiguration('us', 'en_US', 'UTF-8') + return LocaleConfiguration(layout, 'en_US', 'UTF-8') def json(self) -> Dict[str, str]: return { diff --git a/archinstall/lib/locale/utils.py b/archinstall/lib/locale/utils.py index d7641d50eb..dbbcdf5414 100644 --- a/archinstall/lib/locale/utils.py +++ b/archinstall/lib/locale/utils.py @@ -44,6 +44,30 @@ def verify_x11_keyboard_layout(layout :str) -> bool: return False +def get_kb_layout() -> str: + try: + lines = SysCommand( + "localectl --no-pager status", + environment_vars={'SYSTEMD_COLORS': '0'} + ).decode().splitlines() + except: + return "" + + vcline = "" + for line in lines: + if "VC Keymap: " in line: + vcline = line + + if vcline == "": + return "" + + layout = vcline.split(": ")[1] + if not verify_keyboard_layout(layout): + return "" + + return layout + + def set_kb_layout(locale :str) -> bool: if len(locale.strip()): if not verify_keyboard_layout(locale):