Hi, The attached version of the patch contains updates to the man pages.
Cheers Matthias
diff --git a/man/vconsole.conf.xml b/man/vconsole.conf.xml index 45156b7..3707279 100644 --- a/man/vconsole.conf.xml +++ b/man/vconsole.conf.xml @@ -74,7 +74,10 @@ <varname>vconsole.keymap.toggle=</varname>, <varname>vconsole.font=</varname>, <varname>vconsole.font.map=</varname>, - <varname>vconsole.font.unimap=</varname> may be used + <varname>vconsole.font.unimap=</varname>, + <varname>vconsole.scroll_lock</varname>, + <varname>vconsole.num_lock</varname>, + <varname>vconsole.caps_lock</varname> may be used to override the console settings at boot.</para> <para>Depending on the operating system other @@ -115,6 +118,17 @@ font map.</para></listitem> </varlistentry> + <varlistentry> + <term><varname>SCROLL_LOCK=</varname></term> + <term><varname>NUM_LOCK=</varname></term> + <term><varname>CAPS_LOCK=</varname></term> + <listitem><para>These boolean variables control + the state of the respective toggle switches. + When an invalid or no value is specified, + the state is left unchanged. + </para></listitem> + </varlistentry> + </variablelist> </refsect1> @@ -122,12 +136,13 @@ <title>Example</title> <example> - <title>German keyboard and console</title> + <title>German keyboard and console with NumLock enabled:</title> <para><filename>/etc/vconsole.conf:</filename></para> <programlisting>KEYMAP=de-latin1 -FONT=latarcyrheb-sun16</programlisting> +FONT=latarcyrheb-sun16 +NUM_LOCK=on</programlisting> </example> </refsect1> diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c index 6501705..9c4549f 100644 --- a/src/vconsole/vconsole-setup.c +++ b/src/vconsole/vconsole-setup.c @@ -203,6 +203,39 @@ static void font_copy_to_all_vcs(int fd) { } } +static int set_modifiers(int fd, int num_modifiers, char *const *modifier_status, const char *modifier) { + char mask; + int r = 0; + if (ioctl(fd, KDGKBLED, &mask)) { + r = -errno; + log_warning("failed to get keyboard modifier status: %s", strerror(errno)); + return r; + } + + for (int i = 0; i < num_modifiers; ++i) { + if (modifier_status[i] == NULL) + continue; + switch (parse_boolean(modifier_status[i])) { + case 0: + mask &= ~modifier[i]; + break; + case 1: + mask |= modifier[i]; + break; + default: + log_warning("invalid value for keyboard modifier: \"%s\"", modifier_status[i]); + } + } + + if (ioctl(fd, KDSKBLED, mask)) { + r = -errno; + log_warning("failed to set keyboard modifier status: %s", strerror(errno)); + return r; + } + + return 0; +} + int main(int argc, char **argv) { const char *vc; char *vc_keymap = NULL; @@ -210,6 +243,8 @@ int main(int argc, char **argv) { char *vc_font = NULL; char *vc_font_map = NULL; char *vc_font_unimap = NULL; + const char vc_modifiers[] = { LED_SCR, LED_NUM, LED_CAP }; + char *vc_modifier_status[ELEMENTSOF(vc_modifiers)] = { }; int fd = -1; bool utf8; pid_t font_pid = 0, keymap_pid = 0; @@ -251,6 +286,9 @@ int main(int argc, char **argv) { "vconsole.font", &vc_font, "vconsole.font.map", &vc_font_map, "vconsole.font.unimap", &vc_font_unimap, + "vconsole.scroll_lock", vc_modifier_status, + "vconsole.num_lock", vc_modifier_status + 1, + "vconsole.caps_lock", vc_modifier_status + 2, NULL); if (r < 0 && r != -ENOENT) @@ -266,6 +304,9 @@ int main(int argc, char **argv) { "FONT", &vc_font, "FONT_MAP", &vc_font_map, "FONT_UNIMAP", &vc_font_unimap, + "SCROLL_LOCK", vc_modifier_status, + "NUM_LOCK", vc_modifier_status + 1, + "CAPS_LOCK", vc_modifier_status + 2, NULL); if (r < 0 && r != -ENOENT) @@ -282,6 +323,9 @@ int main(int argc, char **argv) { font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0) r = EXIT_SUCCESS; + if (set_modifiers(fd, ELEMENTSOF(vc_modifiers), vc_modifier_status, vc_modifiers)) + r = EXIT_FAILURE; + finish: if (keymap_pid > 0) wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); @@ -296,6 +340,9 @@ finish: free(vc_font); free(vc_font_map); free(vc_font_unimap); + free(vc_modifier_status[0]); + free(vc_modifier_status[1]); + free(vc_modifier_status[2]); if (fd >= 0) close_nointr_nofail(fd);
_______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel