Ubuntu 10.04 has switched from using usplash to Plymouth for the boot splash screen, providing a flicker-free experience on Intel, NVIDIA and ATI hardware.
The current boot experience is still jarring, with obvious flickers and transitions between the separate phases. These flickers are caused by three types of change:
* Mode switches where the actual resolution and/or colour-depth of the panel or monitor is changed
* Changing the console from text to graphics mode (or vice-versa), which inherently incurs a mode switch
* Switching the active Virtual Terminal (VT), which inherently incurs a console mode change
There are techniques which permit these to be eliminated as much as possible, building on the kernel mode setting GPU drivers added to the kernel in Ubuntu 9.04. While usplash can render to the framebuffer provided by those drivers, plymouth is far more developed and capable and gives us the wanted experience out of the box.
The release note assumes that we will have KMS drivers for the Intel, NVIDIA and ATI hardware ranges, however karmic only released with support for Intel. Fedora 12 released with additional support for NVIDIA and ATI, so it seams reasonable that we will have that for the next release. This is a kernel team decision, however.
The fallback case for non-KMS described below assumes that the Design team remain happy with the "reduced look and feel" for those systems.
When using a Kernel Mode Setting driver, the X server has no current need to perform a mode switch if the kernel driver is already loaded; however it does clear the screen to black because it is called with the "-br" (black root) option.
A patch exists that adds a new "-nr" (no root) option to the X server. If supported by the driver, this places the contents of the framebuffer in the X root window, giving a seamless transition until some other X client clears or paints to the root window.
Patches are also required to each driver to support that option.
The X server needs to be called with the new option, and this is called by the display manager. We already have a patch for gdm to identify the first server (the one forced onto vt7), and have written a patch to adjust the options of that server to use "-nr" instead of "-br".
Plymouth packages (as used by our OEM team) will be updated to the current version, and uploaded replacing the usplash package.
We will use an Upstart job to manage Plymouth, and it will be started once the kernel DRM or framebuffer driver is added to the system and stopped when the display manager is started, or the boot sequence otherwise completes. Splash retention is handled by passing the --retain-splash option in case of that event.
Plymouth will render to VT7, the same VT that X will use; it will perform this VT switch itself on startup, meaning that X need not. If Plymouth is not started, boot messages would appear on VT1 as they used to before X is started and invokes the VT switch.