Only bundle vconsole.conf in the initramfs for Latin keyboard layouts
Bundling vconsole.conf makes Plymouth apply the user's layout at the LUKS prompt, but for layouts whose letter keys aren't Latin (Hebrew, Greek, Cyrillic, Arabic, ...) that makes the necessarily-Latin passphrase untypeable and locks the user out of their machine. mkinitcpio sources its conf.d drop-ins as shell, so omarchy_hooks.conf now checks XKBLAYOUT at every rebuild and only bundles the file for Latin layouts; non-Latin layouts keep the US fallback the passphrase was set under. A migration strips the unconditional line and rebuilds the UKI on affected installs. Closes #6229. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
7bfb8cf954
commit
c030337cb6
@@ -1,2 +1,12 @@
|
||||
HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs)
|
||||
FILES+=(/etc/vconsole.conf)
|
||||
|
||||
# Bundle vconsole.conf so Plymouth uses the configured keyboard layout at the
|
||||
# LUKS prompt, but only when that layout types Latin letters. Passphrases are
|
||||
# Latin characters, so bundling a Hebrew/Greek/Cyrillic/Arabic layout would
|
||||
# make the correct passphrase untypeable and lock the user out.
|
||||
if [[ -f /etc/vconsole.conf ]]; then
|
||||
case $(. /etc/vconsole.conf && echo "${XKBLAYOUT%%,*}") in
|
||||
af | am | ara | bd | bg | by | et | ge | gr | il | in | iq | ir | kg | kh | kz | la | lk | mk | mm | mn | mv | np | rs | ru | sy | th | tj | ua) ;;
|
||||
*) FILES+=(/etc/vconsole.conf) ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
echo "Keep non-Latin keyboard layouts out of the initramfs so the LUKS passphrase stays typeable"
|
||||
|
||||
# Bundling vconsole.conf in the initramfs makes Plymouth apply the user's
|
||||
# layout at the LUKS prompt. For layouts that don't type Latin letters, that
|
||||
# makes the (Latin) passphrase untypeable and locks the user out (#6229).
|
||||
# Drop the bundling for those layouts and rebuild the UKI. The packaged
|
||||
# omarchy_hooks.conf now applies the same condition on every rebuild.
|
||||
|
||||
hooks_conf="/etc/mkinitcpio.conf.d/omarchy_hooks.conf"
|
||||
|
||||
layout=$(. /etc/vconsole.conf 2>/dev/null && echo "${XKBLAYOUT%%,*}")
|
||||
|
||||
if [[ $layout =~ ^(af|am|ara|bd|bg|by|et|ge|gr|il|in|iq|ir|kg|kh|kz|la|lk|mk|mm|mn|mv|np|rs|ru|sy|th|tj|ua)$ ]] &&
|
||||
[[ -f $hooks_conf ]] && grep -qx 'FILES+=(/etc/vconsole.conf)' "$hooks_conf"; then
|
||||
sudo sed -i '\|^FILES+=(/etc/vconsole.conf)$|d' "$hooks_conf"
|
||||
|
||||
if omarchy-cmd-present limine-mkinitcpio; then
|
||||
sudo limine-mkinitcpio
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user