Files
systemd/man/vconsole.conf.xml
Daan De Meyer 7b9d76cba7 boot,vconsole: Propagate UEFI HII keyboard layout to the OS
UEFI firmware can report the currently-active keyboard layout via
EFI_HII_DATABASE_PROTOCOL.GetKeyboardLayout(). The layout descriptor
includes an RFC 4646 / BCP 47 language tag (e.g. "en-US"). Query this
from sd-boot/sd-stub and write it to a new LoaderKeyboardLayout EFI
variable, advertised through a new EFI_LOADER_FEATURE_KEYBOARD_LAYOUT
feature bit.

On the OS side, systemd-vconsole-setup reads the variable as a
lowest-priority fallback for the console keymap. To map the BCP 47
tag to a vconsole keymap we extend /usr/share/systemd/kbd-model-map
with an optional sixth column listing the comma-separated BCP 47 tags
each row covers; a new find_vconsole_keymap_for_bcp47() helper walks
the file, preferring an exact tag match and otherwise falling back to
the row whose tag matches the input's primary subtag. Credentials,
/etc/vconsole.conf, and vconsole.keymap= on the kernel command line
continue to take precedence.

bootctl status surfaces the new variable, printing the language tag
or "n/a (not reported by firmware)" when sd-boot advertises the
feature but the firmware HII database didn't expose a layout (common
on QEMU without a USB keyboard, since EDK2's PS/2 driver does not
register an HII keyboard layout).
2026-05-11 21:10:11 +02:00

161 lines
6.4 KiB
XML

<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % entities SYSTEM "custom-entities.ent" >
%entities;
]>
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
<refentry id="vconsole.conf" conditional='ENABLE_VCONSOLE'
xmlns:xi="http://www.w3.org/2001/XInclude">
<refentryinfo>
<title>vconsole.conf</title>
<productname>systemd</productname>
</refentryinfo>
<refmeta>
<refentrytitle>vconsole.conf</refentrytitle>
<manvolnum>5</manvolnum>
</refmeta>
<refnamediv>
<refname>vconsole.conf</refname>
<refpurpose>Configuration file for the virtual console</refpurpose>
</refnamediv>
<refsynopsisdiv>
<para><filename>/etc/vconsole.conf</filename></para>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>The <filename>/etc/vconsole.conf</filename> file configures
the virtual console, i.e. keyboard mapping and console font. It is
applied at boot by udev using <filename>90-vconsole.rules</filename> file.
You can safely mask this file if you want to avoid this kind of initialization.
</para>
<para>The format of <filename>vconsole.conf</filename> is a newline-separated list of environment-like
shell-compatible variable assignments, ignoring comments and empty lines. It is possible to source the
configuration from shell scripts, however, beyond mere variable assignments no shell features are
supported, allowing applications to read the file without implementing a shell compatible execution
engine. See
<citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> for a
detailed description of the format.</para>
<para>Note that the kernel command line options
<varname>vconsole.keymap=</varname>,
<varname>vconsole.keymap_toggle=</varname>,
<varname>vconsole.font=</varname>,
<varname>vconsole.font_map=</varname>,
<varname>vconsole.font_unimap=</varname> may be used
to override the console settings at boot.</para>
<para>Depending on the operating system other configuration files
might be checked for configuration of the virtual console as well,
however only as fallback.</para>
<para>If the boot loader reports the firmware-configured keyboard layout via the
<varname>LoaderKeyboardLayout</varname> EFI variable (see the
<ulink url="https://systemd.io/BOOT_LOADER_INTERFACE">Boot Loader Interface</ulink>),
it is used as the lowest-priority fallback for <varname>KEYMAP=</varname>.
Any setting from credentials, <filename>/etc/vconsole.conf</filename>, or the kernel
command line overrides it.</para>
<para><filename>/etc/vconsole.conf</filename> is usually created and updated
using
<citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
<citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
may be used to instruct <command>systemd-localed.service</command> to
query or update configuration.</para>
</refsect1>
<refsect1>
<title>Options</title>
<para>The following options are understood:</para>
<variablelist class='environment-variables'>
<varlistentry>
<term><varname>KEYMAP=</varname></term>
<term><varname>KEYMAP_TOGGLE=</varname></term>
<listitem><para>Configures the key mapping table for the keyboard. <varname>KEYMAP=</varname>
defaults to <literal>&SYSTEMD_DEFAULT_KEYMAP;</literal> if not set. As a special case, if
<literal>@kernel</literal> is specified, no keymap will be loaded, i.e. the kernel's default keymap
will be used. The <varname>KEYMAP_TOGGLE=</varname> can be used to configure a second toggle keymap
and is by default unset.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>FONT=</varname></term>
<term><varname>FONT_MAP=</varname></term>
<term><varname>FONT_UNIMAP=</varname></term>
<listitem><para>Configures the console font, the console map
and the unicode font map.</para></listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Kernel Command Line</title>
<para>A few configuration parameters from <filename>vconsole.conf</filename> may be overridden
on the kernel command line:</para>
<variablelist class='kernel-commandline-options'>
<varlistentry>
<term><varname>vconsole.keymap=</varname></term>
<term><varname>vconsole.keymap_toggle=</varname></term>
<listitem><para>Overrides <varname>KEYMAP=</varname> and <varname>KEYMAP_TOGGLE=</varname>.
</para>
<xi:include href="version-info.xml" xpointer="v232"/></listitem>
</varlistentry>
<varlistentry>
<term><varname>vconsole.font=</varname></term>
<term><varname>vconsole.font_map=</varname></term>
<term><varname>vconsole.font_unimap=</varname></term>
<listitem><para>Overrides <varname>FONT=</varname>, <varname>FONT_MAP=</varname>, and
<varname>FONT_UNIMAP=</varname>.</para>
<xi:include href="version-info.xml" xpointer="v232"/></listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Example</title>
<example>
<title>German keyboard and console</title>
<para><filename>/etc/vconsole.conf</filename>:</para>
<programlisting>KEYMAP=de-latin1
FONT=eurlatgr</programlisting>
</example>
</refsect1>
<refsect1>
<title>See Also</title>
<para><simplelist type="inline">
<member><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
<member><citerefentry><refentrytitle>systemd-vconsole-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
<member><citerefentry project='mankier'><refentrytitle>loadkeys</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
<member><citerefentry project='die-net'><refentrytitle>setfont</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
<member><citerefentry project='man-pages'><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></member>
<member><citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
</simplelist></para>
</refsect1>
</refentry>