Skip to content

Plymouth not starting on non-valve hardware #2579

Description

@kahnakha

I did some digging around as it was also strange to me that all other non-valve hardware are simply lacking any splash screen of the OS especially as plymouth service is installed, and configured to actually show a splash image.

Below we can see the output of journalctl -b


Jul 07 13:21:37 steamdeck kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux-neptune-616 console=tty1 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 rd.systemd.gpt_auto=no log_buf_len=4M amd_iommu=off amdgpu.lockup_timeout=5000,10000,1000>
Jul 07 13:21:37 steamdeck kernel: audit: disabled (until reboot)
Jul 07 13:21:37 steamdeck kernel: Unknown kernel command line parameters "splash BOOT_IMAGE=/boot/vmlinuz-linux-neptune-616", will be passed to user space.

As we can see from the above, the kernel doesnt seem to understand splash or BOOT_IMAGE, so it passes them to userspace. Plymouth later reads splash from /proc/cmdline


cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-linux-neptune-616 console=tty1 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 rd.systemd.gpt_auto=no log_buf_len=4M amd_iommu=off amdgpu.lockup_timeout=5000,10000,10000,5000 ttm.pages_min=2097152 amdgpu.sched_hw_submission=4 amdgpu.dcdebugmask=0x20000 audit=0 fsck.mode=auto fsck.repair=preen crashkernel=256M crash_kexec_post_notifiers loglevel=3 splash quiet plymouth.ignore-serial-consoles fbcon=vc:4-6 steamos.efi=PARTUUID=eae8cbe4-8b73-4a1d-a4fb-502e36152c45

This is incorrect, because when plymouthd service is not started in early-early boot from initramfs, these command are been executed in userspace, and the userspace does not have the needed permissions to execute plymouth as root during boot.
As a result, the whole things fail to start, thus, no splash screen is displayed during boot, that`s just my initial thoughts, but then I kept digging.

I had to understand whether the initramfs hook actually launches plymouthd

sed -n '1,200p' /usr/lib/initcpio/hooks/plymouth

run_earlyhook(){
        # first trigger graphics subsystem
        udevadm trigger --action=add --attr-match=class=0x030000 >/dev/null 2>&1
        # first trigger graphics and tty subsystem
        udevadm trigger --action=add --subsystem-match=graphics --subsystem-match=drm --subsystem-match=tty >/dev/null 2>&1 
        udevadm settle --timeout=30 2>&1

        # We're not activating plymouth in the initrd for now: Uncomment
        # this when if or when we do:
        # /usr/bin/mknod /dev/fb c 29 &>/dev/null
        # /usr/bin/mkdir -p /dev/pts
        # /usr/bin/mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
        # /usr/bin/plymouthd --mode=boot --pid-file=/run/plymouth/pid --attach-to-session
}
 
run_hook() {
        /usr/bin/plymouth --show-splash
}
 
run_latehook(){
        /usr/bin/plymouth update-root-fs --new-root-dir=/new_root      
}

# vim: set ft=sh:

And now is a bit clearer, especially when we look at the commented lines from the output above.
This however makes it a bit weirder too, because if we look again, we can see that plymouth --show-splash hook is active and only sends a request to an already-running plymouthd, but since plymouthd was never started in the initramfs, there is nothing to display

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions