[Buildroot] [PATCH 12/13] package/openrc: add support for setting terminal keymap
Michał Łyszczek
michal.lyszczek at bofc.pl
Wed May 8 22:09:36 UTC 2019
When openrc init is enabled, user can chose to set terminal
keymap or keep default settings.
* system/Config.in
New config BR2_TARGET_GENERIC_TERM_KEYMAP which is available
only when openrc is selected and kbd package is installed.
Used to set keymap from /usr/share/keymaps
* package/openrc/openrc.mk
monitors BR2_TARGET_GENERIC_TERM_KEYMAP and configures init
to use specified keymap. It will also check if keymap exists
in the system
Signed-off-by: Michał Łyszczek <michal.lyszczek at bofc.pl>
---
package/openrc/openrc.mk | 28 ++++++++++++++++++++++++++++
system/Config.in | 12 ++++++++++++
2 files changed, 40 insertions(+)
diff --git a/package/openrc/openrc.mk b/package/openrc/openrc.mk
index 23b33b65f4..6749999b29 100644
--- a/package/openrc/openrc.mk
+++ b/package/openrc/openrc.mk
@@ -75,4 +75,32 @@ OPENRC_TARGET_FINALIZE_HOOKS += OPENRC_TERMENCODING
endif # BR2_TARGET_GENERIC_TERMENCODING_UTF8
endif # BR2_TARGET_GENERIC_TERMENCODING_KEEP
+OPENRC_TERM_KEYMAP = $(call qstrip,$(BR2_TARGET_GENERIC_TERM_KEYMAP))
+ifneq ($(OPENRC_TERM_KEYMAP),)
+OPENRC_DEPENDENCIES += kbd
+# 1) check if passed kaymap exists in the installed system
+# 2) set keymap value in /etc/conf.d/keymaps
+# 3) set keyboard mode to same encoding as terminal encoding
+define OPENRC_SET_TERM_KEYMAP
+ if ! find $(TARGET_DIR)/usr/share/keymaps -name "*$(OPENRC_TERM_KEYMAP).map*" | grep -q ".*"; then \
+ echo "keymap $(OPENRC_TERM_KEYMAP) not found in $(TARGET_DIR)/usr/share/keymaps"; \
+ exit 1; \
+ fi
+ echo "keymap=\"$(OPENRC_TERM_KEYMAP)\"" > $(TARGET_DIR)/etc/conf.d/keymaps
+ if test -f $(TARGET_DIR)/etc/conf.d/termencoding; then \
+ grep "unicode=" $(TARGET_DIR)/etc/conf.d/termencoding >> $(TARGET_DIR)/etc/conf.d/keymaps; \
+ fi
+endef
+else
+# openrc installs keymaps service by default, so if keymap is not set (like
+# because kbd is not installed) we need to remove keymaps service from boot
+# so there are no errors about missing programs. If kbd is installed, but
+# keymap config is empty value, we also remove service to keep default values.
+define OPENRC_SET_TERM_KEYMAP
+ $(RM) $(TARGET_DIR)/etc/runlevels/boot/{keymaps,save-keymaps}
+ $(RM) $(TARGET_DIR)/etc/conf.d/keymaps
+endef
+endif # OPENRC_TERM_KEYMAP
+OPENRC_TARGET_FINALIZE_HOOKS += OPENRC_SET_TERM_KEYMAP
+
$(eval $(generic-package))
diff --git a/system/Config.in b/system/Config.in
index 08bcb517e4..a890fe11c0 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -407,6 +407,18 @@ config BR2_TARGET_GENERIC_TERMENCODING_UTF8
bool "utf-8"
endchoice
+config BR2_TARGET_GENERIC_TERM_KEYMAP
+ string "Set terminal keymap"
+ default "us"
+ depends on BR2_INIT_OPENRC && BR2_PACKAGE_KBD
+ help
+ Configures all virtual terminals (on /dev/tty[1-12]) to use
+ specified keymap. List of keymaps are installed in /usr/share/keymaps.
+ Set to empty, to keep default keymap.
+
+comment "Setting terminal keymap requires OpenRC and kdb package"
+ depends on !(BR2_INIT_OPENRC && BR2_PACKAGE_KBD)
+
endif # BR2_ROOTFS_SKELETON_DEFAULT
config BR2_SYSTEM_DEFAULT_PATH
--
2.18.1
More information about the buildroot
mailing list