[systemd-devel] vconsole.conf, systemd-localed and the console keymap in the initrd

Hans de Goede hdegoede at redhat.com
Tue Jul 30 08:49:25 UTC 2019


Hi All,

When using full-disk encryption the console keymap is used in the
initrd to enter the disk-crypt password.

There are a couple of issues with this:

1) keymap changes do not become effective until a new kernel
(which generated a new initrd which includes the updated vconsole.conf)
gets installed:
https://bugzilla.redhat.com/show_bug.cgi?id=1405539
Note this one is part of:
https://fedoraproject.org/wiki/Fedora_Program_Management/Prioritized_bugs_and_issues

We could have the tools re-generate the existing initrds when the
keymap changes but that is not 100% bullet proof, if some bug has
snuck in which causes new initrds to not boot, then we've just
overwritten the older fallback initrds with ones which will also
not boot...  Also in the future we want to move to using a single
generic pre-generated initrd everywhere and silverblue is already
doing this, which brings me to 2:

2) When using a generic initrd which does not include /etc/vconsole.conf
the keymap will also be "us" independent of what the system is
configured to use.

I believe that the best way to fix is this is probably to specify the
keymap on the kernel commandline using vconsole.keymap= on the kernel
commandline.

So 2 questions:

1) What is your (systemd devs) take on this, does using vconsole.keymap=
on the kernel commandline sound like the right solution, or do you have
other suggestions?

2) I wonder what will happen when runtime changing the keymap when
vconsole.keymap=foo is specified on the kernel commandline?

systemd-vconsole-setup will use the values on the kernel commandline
over those in /etc/vconsole.conf, and until we reboot those 2 will
no longer be in sync. systemd-vconsole-setup runs when a new vtconsole
gets added, but that should (normally) not happen after boot so that
is not a problem. But I wonder how systemd-localed applies changes
to the current vtconsole(s) does it do this itself, or does it use
systemd-vconsole-setup for this ?

I ask because if it uses systemd-vconsole-setup and that prefers the
kernel commandline value then the change will not happen until reboot.
Which I believe would be a regression compared to how things work now...

Regards,

Hans


More information about the systemd-devel mailing list