diff options
author | Gustavo Sverzut Barbieri <barbieri@profusion.mobi> | 2010-09-20 19:07:09 -0300 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-09-21 00:43:16 +0200 |
commit | 9841e8e3d305e6f4173c9aedbe8d57adfe10d145 (patch) | |
tree | d5d99a2573101f84e609caf15bbe00d4eb6d3053 /src | |
parent | 3e21c85da365f66582d77eb0a81016c7f43c7762 (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/vconsole-setup.c | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/src/vconsole-setup.c b/src/vconsole-setup.c index 06d9a21191..128355020d 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); |