my aim is to achieve complete silent boot all the way to the x session, is this possible?
i tried using plymouth with handmade scripts, using the --quiet dinit option, redirecting the output over to console=tty2, etc., but those either: A- break all of the ttys altogether (since tty1 doesnt appear in the first place) or B- work, but only partly
a simple guide could really be appreciated in this matter
It sounds like a lovely project! Let us know how it goes.
With dinit I don't know?
With openrc I can say yes because your post inspired me to try and I just achieved it.
But it's not simple. If you (or anyone) requests as such I'll explain how I did it.
But one thing I can say, regardless of init, is you'll also need to change the initramfs.
/usr/lib/initcpio/init_functions gets put into the initramfs image and needs changing thus:
--- a/init_functions 2025-07-02 17:06:51.452227433 +0100
+++ b/init_functions 2025-07-02 17:04:00.175983326 +0100
@@ -302,7 +302,7 @@
fi
msg ":: performing fsck on '$1'"
- fsck -Ta -C"$FSCK_FD" "$device" -- ${forcefsck+-f}
+ fsck -Ta -C"$FSCK_FD" "$device" -- ${forcefsck+-f} >/dev/null
}
fsck_root() {
And then
sudo mkinitcpio -p linux
This would have to be repeated whenever the package mkinitcpio is updated.
I'm just about to add a patch for it to my system of automatically patched packages.
the least "hacky" way to achieve this is by installing plymouth and making it work with dinit, like such:
appending quiet and splash as a kernel parameter in (/etc/default/grub):
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet splash"
regenerating the grub config (the following command is bios-specific afaik):
sudo grub-mkconfig -o /boot/grub/grub.cfg
adding plymouth to the (/etc/mkinitcpio.conf) hooks:
HOOKS=(base udev plymouth autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)
making a dinit service (/etc/dinit.d/plymouth-quit) to quit plymouth in boot:
type = scripted
command = /usr/bin/plymouth quit --retain-splash
after = elogind
before = tty1
enabling it:
sudo dinitctl enable plymouth-quit
writing a custom shutdown hook for dinit (/etc/dinit/shutdown-hook) which calls plymouth on shutdown/reboot, and making it executable with chmod +x:
#!/bin/sh
/usr/bin/plymouthd --mode=shutdown --attach-to-session
/usr/bin/plymouth show-splash
if [ -x /lib/dinit/shutdown-hook ]; then
/lib/dinit/shutdown-hook
fi
then setting up the default theme and regenerating the initframfs:
sudo plymouth-set-default-theme -R spinner
---
however, this has two caveats:
1. the pre-shutdown messages would still appear before plymouth
2. agetty/login will not appear and tty switching will be impossible, so this will render the system unusable unless you setup autologin (https://wiki.artixlinux.org/Main/Dinit#tty_handling) on tty1:
GETTY_ARGS="--skip-login --nonewline --noissue --autologin [USER] --noclear"
also, switching to tty2/3/etc in that case is buggy (you will need to switch then press any key for the tty to appear)
---
would appreciate if anyone knowledgeable pinpoints the issues, all of this is extremely duct-taped
Well good luck with it.
I'm not sure why your tty's aren't working but autologin on one of them is requisite unless using a display manager.
I had a play with Plymouth. I had a similar issue as you I think?
The only way I could get it to work was by using
plymouth quit
in /etc/rc.local
Otherwise Plymouth never lets go. I can hit escape and see that openrc has started all the services but tty1 which should have auto loged in and started X is unresponsive. Trying to switch tty does nothing.
Tried it using sddm as well but it was the same.
This might be down to my Nvidia GPU though ? I read it's a bit sketchy with Plymouth.
Using plymouth quit it works but it's a bit "Blink and you'll miss it" so I have uninstalled it as I prefer the black screen until X.
plymouth support seems to be a total mess so i entirely gave up on the idea, unfortunately...
Silent Boot can be easily implemented without Plymouth, but you have to change not only one but three files.
/etc/default/grub
vt.global_cursor_default=0 console=tty2
Lines 149 and 160 in /etc/grub.d/10_linux
# echo '$(echo "$message" | grub_quote)'
/etc/issue
sudo -i
clear > /etc/issue
exit
Afterwards:
mkinitcpio -P
update-grub
console=tty2 breaks tty entirely and will render the machine unusable (i dont use a display manager)
The changes only suppress the screen output, so without a display manager you have to select a login TTY manually.