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
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 -bAs we can see from the above, the kernel doesnt seem to understand
splashorBOOT_IMAGE, so it passes them to userspace. Plymouth later reads splash from/proc/cmdlineThis is incorrect, because when
plymouthdservice is not started in early-early boot frominitramfs, these command are been executed in userspace, and the userspace does not have the needed permissions to executeplymouthas 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
initramfshook actually launchesplymouthdsed -n '1,200p' /usr/lib/initcpio/hooks/plymouthAnd 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-splashhook is active and only sends a request to an already-runningplymouthd, but sinceplymouthdwas never started in theinitramfs, there is nothing to display