From 9841e8e3d305e6f4173c9aedbe8d57adfe10d145 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Mon, 20 Sep 2010 19:07:09 -0300 Subject: [PATCH] gentoo: vconsole-setup support. This patch is a bit bigger than expected since Gentoo being non-standard in some places. 1. it is installing binaries at /usr/bin instead of /bin. 2. it is using CamelCase names for consolefonts. 3. /etc/rc.conf:unicode=(yes|no) just forbids loadkeys and setfont "-u" options, but do not disable the actual kernel default_utf8 from vt module. --- Makefile.am | 12 ++++++++++ src/vconsole-setup.c | 57 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/Makefile.am b/Makefile.am index aa4798d8..3ab79ba8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -54,6 +54,18 @@ AM_CPPFLAGS = \ -DRANDOM_SEED=\"$(localstatedir)/lib/random-seed\" \ -I $(top_srcdir)/src +if TARGET_GENTOO +AM_CPPFLAGS += \ + -DKBD_LOADKEYS=\"/usr/bin/loadkeys\" \ + -DKBD_SETFONT=\"/usr/bin/setfont\" \ + -DDEFAULT_FONT=\"LatArCyrHeb-16\" +else +AM_CPPFLAGS += \ + -DKBD_LOADKEYS=\"/bin/loadkeys\" \ + -DKBD_SETFONT=\"/bin/setfont\" \ + -DDEFAULT_FONT=\"latarcyrheb-sun16\" +endif + rootbin_PROGRAMS = \ systemd \ systemctl \ diff --git a/src/vconsole-setup.c b/src/vconsole-setup.c index 06d9a211..12835502 100644 --- a/src/vconsole-setup.c +++ b/src/vconsole-setup.c @@ -83,7 +83,7 @@ static int load_keymap(const char *vc, const char *map, bool utf8, pid_t *_pid) int i = 0; pid_t pid; - args[i++] = "/bin/loadkeys"; + args[i++] = KBD_LOADKEYS; args[i++] = "-q"; args[i++] = "-C"; args[i++] = vc; @@ -109,7 +109,7 @@ static int load_font(const char *vc, const char *font, const char *map, const ch int i = 0; pid_t pid; - args[i++] = "/bin/setfont"; + args[i++] = KBD_SETFONT; args[i++] = "-C"; args[i++] = vc; args[i++] = font; @@ -141,6 +141,9 @@ int main(int argc, char **argv) { char *vc_font = NULL; char *vc_font_map = NULL; char *vc_font_unimap = NULL; +#ifdef TARGET_GENTOO + char *vc_unicode = NULL; +#endif int fd = -1; bool utf8; int r = EXIT_FAILURE; @@ -208,6 +211,50 @@ int main(int argc, char **argv) { if (r != -ENOENT) log_warning("Failed to read /etc/rc.conf: %s", strerror(-r)); + +#elif defined(TARGET_GENTOO) + if ((r = parse_env_file("/etc/rc.conf", NEWLINE, + "unicode", &vc_unicode, + NULL)) < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/rc.conf: %s", strerror(-r)); + } + if (vc_unicode) { + int rc_unicode = parse_boolean(vc_unicode); + if (rc_unicode < 0) + log_error("Unknown value for /etc/rc.conf unicode=%s", vc_unicode); + else { + if (rc_unicode && !utf8) + log_warning("/etc/rc.conf wants unicode, but current locale is not UTF-8 capable!"); + else if (!rc_unicode && utf8) { + log_debug("/etc/rc.conf does not want unicode, leave it on in kernel but does not apply to vconsole."); + utf8 = false; + } + } + } + + /* /etc/conf.d/consolefont comments and gentoo documentation + * mention uppercase, but the actual contents are lowercase. + * the existing /etc/init.d/consolefont tries both + */ + if ((r = parse_env_file("/etc/conf.d/consolefont", NEWLINE, + "CONSOLEFONT", &vc_font, + "consolefont", &vc_font, + "consoletranslation", &vc_font_map, + "CONSOLETRANSLATION", &vc_font_map, + "unicodemap", &vc_font_unimap, + "UNICODEMAP", &vc_font_unimap, + NULL)) < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/conf.d/consolefont: %s", strerror(-r)); + } + + if ((r = parse_env_file("/etc/conf.d/keymaps", NEWLINE, + "keymap", &vc_keymap, + "KEYMAP", &vc_keymap, + NULL)) < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/conf.d/keymaps: %s", strerror(-r)); } #endif @@ -242,7 +289,7 @@ int main(int argc, char **argv) { if (!vc_keymap) vc_keymap = strdup("us"); if (!vc_font) - vc_font = strdup("latarcyrheb-sun16"); + vc_font = strdup(DEFAULT_FONT); if (!vc_keymap || !vc_font) { log_error("Failed to allocate strings."); @@ -255,10 +302,10 @@ int main(int argc, char **argv) { finish: if (keymap_pid > 0) - wait_for_terminate_and_warn("/bin/loadkeys", keymap_pid); + wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); if (font_pid > 0) - wait_for_terminate_and_warn("/bin/setfont", font_pid); + wait_for_terminate_and_warn(KBD_SETFONT, font_pid); free(vc_keymap); free(vc_font); -- 2.39.5