Ubuntu – Why does plymouth start so late


It appears that starting with 11.04 Plymouth starts so late in the boot process. Sometimes I only have a split second to see it before it transitions to the login screen. This is the same for 11.10.

Compared to 10.04 and 10.10, Plymouth starts only a couple seconds or so after Grub and is very visible within the entire boot process.

Is there something that can be done to have Plymouth run earlier? I have experienced this on 3 different machines and on 2 of these machines, I've been running Ubuntu since 10.04. So it's not just my notebook's hardware that is causing this.

*One a side note, the boot process is one of the ugliest parts of modern Linux. Ubuntu is not excluded. After almost a decade, (I forget but was bootsplash the first?) this still has only been partly solved. For a couple of seconds ugly text is still seen when shutting down. On several ocassions, the same ugly text is seen when logging out of a session. It's never as smooth as you want it to be.

Splash themes are great, don't get me wrong. It's just the transitions that are way off and you get glimpses of what's underneath. I'm used to this but for those new to Ubuntu and coming from Windows. It is a turn off.* pardon the rant. 🙂

Best Answer

Modern graphics cards are well supported in the kernel through Kernel Mode Setting - this is the ability for the kernel to setup the display resolution early in the boot sequence to allow plymouth to display correctly.

However, some graphics cards are not compatible with KMS - or KMS itself doesnt directly recognize the graphics card.

In these circumstances, you can force plymouth to use a framebuffer - an old technique to directly access the graphics video memory (frame)

The word framebuffer means a part of video memory containing a current video frame, and the Linux framebuffer means “access method to the framebuffer under the Linux kernel”, without relying on system-specific libraries such as SVGALib or another user space software. (wikipedia)

run plymouth in a framebuffer

In a terminal copy and paste the following:

echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-initramfs -u
Related Question