Plymouth password with LVM on LUKS

[I’m not a native English speaker]

I’m at a complete loss on this issue and could really use some help.
I’m trying to have Plymouth prompting me for my root volume password.

The system has an ESP partition for UEFI booting, a separate boot partition for Manjaro, and another one for Debian.
Then it has a LUKS partition containing Manjaro and Debian root volumes, plus a shared home and swap.

nvme0n1
├─nvme0n1p1         ESP      /boot/efi
├─nvme0n1p2         BOOT     /boot
├─nvme0n1p3         LUKS
│ └─cryptlvm        LVM (meissa)
│   ├─meissa-swap
│   ├─meissa-root   Manjaro  /
│   ├─meissa-home   home     /home/data
│   └─meissa-debian Debian
└─nvme0n1p4         BOOT     (for Debian)

The best I get for booting Manjaro is a text prompt asking for the cryptlvm password, right after grub and before Plymouth loads.
I’d like this password to be asked while Plymouth is running so I get a nice graphical prompt and a smooth boot experience.
Right now, I have a graphical theme on grub, then the screen goes black, then an ugly text prompt kicks in, then the screen flickers a bit and if I’m lucky, I get a couple of frames of Plymouth before the boot process is complete (damn, Manjaro boots fast!).

On the same machine, Debian smoothly transitions from grub to Plymouth and asks for the password in Plymouth (no text mode, no flicker).

Here’s my config (initramfs and grub config are always rebuilt when needed):
mkinitcpio.conf

HOOKS="base udev autodetect modconf kms block keyboard keymap consolefont encrypt lvm2 filesystems fsck"

/etc/crypttab

cryptlvm UUID=1f9530e0-c897-41ee-941c-aebc26fa3f20 none luks

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="splash quiet udev.log_priority=3"
GRUB_CMDLINE_LINUX="cryptdevice=UUID=1f9530e0-c897-41ee-941c-aebc26fa3f20:cryptlvm"
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
#GRUB_ENABLE_CRYPTODISK=y # doesn't seem to make any difference
GRUB_TIMEOUT_STYLE=menu
…

/boot/grub/grub.cfg

menuentry 'Manjaro Linux' [redacted] {
        savedefault
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 972e1815-893d-4b73-bce9-1b736539b4f0
        linux   /vmlinuz-6.4-x86_64 root=/dev/mapper/meissa-root rw cryptdevice=UUID=1f9530e0-c897-41ee-941c-aebc26fa3f20:cryptlvm splash quiet udev.log_priority=3
        initrd  /intel-ucode.img /initramfs-6.4-x86_64.img
}

Where:

972e1815-893d-4b73-bce9-1b736539b4f0 = nvme0n1p2 (ext4 boot partition)
1f9530e0-c897-41ee-941c-aebc26fa3f20 = nvme0n1p3 (luks partition holding lvm)

What I’ve tried

It seems passing cryptdevice to the kernel causes this early password prompt to appear, before Plymouth loads.
If I don’t pass this parameter, I get a blackscreen on boot and I have to shutdown/reboot.
If I give the luks volume another name in crypttab, then I get a text prompt to unlock the volume, then a Plymouth graphical prompt to unlock the same volume. So I guess the Plymouth’s prompt comes from crypttab entries.

I tried giving the cryptdevice the same name as the lvm volume group

grub: root=/dev/mapper/meissa-root cryptdevice=UUID=[…]:meissa
crypttab: meissa UUID=[…] none luks

but I got the same result.

It works fine on Debian. For a comparison, /etc/default/grub on Debian only has “splash quiet” (no cryptdevice at all), /etc/crypttab is the same as Manjaro, and the grub menu entry looks like this:

menuentry 'Debian GNU/Linux' [redacted] {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root bdcca85a-5101-4780-a1fc-6f1a00a42b3e
        echo    'Loading Linux 6.3.0-1-amd64 ...'
        linux   /vmlinuz-6.3.0-1-amd64 root=/dev/mapper/meissa-debian ro  quiet splash
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-6.3.0-1-amd64
}

At this point, I don’t even know who does what and when. Why is the kernel parameter cryptdevice mandatory to boot Manjaro? Why is it not here on Debian? Is it possible to unlock the volume from the initramfs rather than asking the kernel (if that makes any sense)?

From what I know (I don’t run Arch/Manjaro at the moment) you’d need to adapt the file /etc/mkinitcpio.conf
and add a hook called “plymouth”, then regenerate the initrd so that it contains the necessary code.

Perhaps this here helps you:

Plymouth - ArchWiki

and/or this:

mkinitcpio - ArchWiki

Omg I was missing the plymouth hook!
Thanks a lot Nachlese. It’s now working perfectly.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.