Silent boot

Related articles
Plymouth
This page is for those who prefer to limit the verbosity of their system to a strict minimum, either for aesthetics or other reasons. Following this guide will remove all text from the bootup process.
Video demonstration
Kernel parameters
Change the
kernel parameters
using the configuration options of your
boot loader
, to include the following parameters:
quiet
Note
Adding
vga=current
as a kernel argument avoids weird behaviors like
FS#32309
. Keep in mind that this conflicts with
KMS
, so only use this argument if you are affected by said bug.
If you are still getting messages printed to the console, it may be
dmesg
sending you what it thinks are important messages. You can change the level at which these messages will be printed by using
quiet loglevel=
level
, where
level
is any number between 0 and 7, where 0 is the most critical, and 7 is debug levels of printing.
quiet loglevel=3
Note that this only seems to work if both
quiet
and
loglevel=
level
are used, and they must be in that order (quiet first). The loglevel parameter will only change that which is printed to the console, the levels of
dmesg
itself will not be affected and will still be available through the journal as well as
dmesg
. For more information, see
kernel parameters
.
If you also want to stop systemd from printing its version number when booting, you should also append
udev.log_level=3
to your kernel parameters. If systemd is used in an
initramfs
, append
rd.udev.log_level=3
instead. See
systemd-udevd.service(8) § KERNEL COMMAND LINE
for details.
If you are using the
systemd
hook in the
initramfs
, you may get systemd messages during initramfs initialization. You can pass
systemd.show_status=false
to disable them, or
systemd.show_status=auto
to only suppress successful messages (so in case of errors you can still see them). Actually,
auto
is already passed to
systemd.show_status=auto
when
quiet
is used, however for some motive sometimes systemd inside initramfs does not get it. Below are the parameters that you need to pass to your kernel to get a completely clean boot with systemd in your
initramfs
:
quiet loglevel=3 systemd.show_status=auto rd.udev.log_level=3
Also
touch ~/.hushlogin
to remove the Last login message.
Users of
plymouth
must use both the
quiet
and
splash
kernel parameter, otherwise the
details
fallback theme is used and shows systemd messages.
Remove console cursor blinking
The console cursor at boot keeps blinking if you follow these instructions. This can be solved by passing
vt.global_cursor_default=0
to the kernel
[1]
.
To recover the cursor in the TTY, run:
# setterm -cursor on >> /etc/issue
sysctl
To hide any kernel messages from the console, add or modify the
kernel.printk
line according to
[2]
:
/etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3
agetty
To hide agetty printed issue and "login:" prompt line from the console
[3]
, create a
drop-in snippet
for
getty@tty1.service
.
/etc/systemd/system/getty@tty1.service.d/skip-prompt.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty
--skip-login
--nonewline --noissue --autologin
username
--noreset --noclear - ${TERM}
startx
To hide
startx
messages, you could redirect its output to
/dev/null
in your shell profile file (like
~/.bash_profile
in
Bash
or
~/.zprofile
in
Zsh
):
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
  exec startx &>/dev/null
fi
Note
Redirection is broken with rootless login. See
Xorg#Session log redirection
.
fsck
To hide fsck messages during boot, let systemd check the root filesystem. For this, replace
udev
hook with
systemd
and remove the
fsck
hook:
HOOKS=(base
systemd
autodetect microcode modconf kms keyboard
sd-vconsole
block filesystems)
in
/etc/mkinitcpio.conf
and
regenerate the initramfs
.
See
systemd-fsck@.service(8)
for more info on the options you can pass to
systemd-fsck
- you can change how often the service will check (or not) your filesystems.
Make GRUB silent
To hide GRUB welcome and boot messages, you may install unofficial
grub-silent
AUR
package.
After the installation, it is required to reinstall
GRUB
to necessary partition first.
Then, take an example as
/etc/default/grub.silent
, and make necessary changes to
/etc/default/grub
.
Below three lines are necessary:
/etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
Note
If you set
GRUB_TIMEOUT=0
and
GRUB_HIDDEN_TIMEOUT=1
(or any positive value), set
GRUB_RECORDFAIL_TIMEOUT=$GRUB_HIDDEN_TIMEOUT
instead of
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
. Otherwise pressing
Esc
on boot to show GRUB menu will not work.
Lastly, regenerate the
grub.cfg
file.
Retaining or disabling the vendor logo from UEFI
Modern UEFI systems display a vendor logo on boot until handing over control to the
boot loader
—e.g. Lenovo laptops display a bright red Lenovo logo. This vendor logo is typically blanked by the boot loader—if standard GRUB is used—or by the kernel.
To prevent the kernel from blanking the vendor logo, Linux 4.19 introduced a new configuration option
FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
that retains the contents of the framebuffer until text needs to be printed on the framebuffer console. Since version
4.19.arch1
, the official Arch Linux kernels are compiled with
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
.
When combined with a low loglevel (to prevent text from being printed), the vendor logo can be retained while the system is initialized. Note that GRUB in the standard configuration blanks the screen; consider booting directly an
EFI boot stub
and thus leverage deferred takeover.
Video demonstration
The kernel command line should use
loglevel=3
or
rd.udev.log_level=3
as mentioned above. Note that if you often receive
Core temperature above threshold, cpu clock throttled
messages in the kernel log, you need to use log level 2 to silence these at boot time. Alternatively, if you compile your own kernel, adjust the log level of the message in
arch/x86/kernel/cpu/mcheck/therm_throt.c
.
If you use
Intel graphics
, see also
Intel graphics#Fastboot
.
Further reading:
Phoronix: Linux 4.19 Adds Deferred Console Takeover Support For FBDEV - Cleaner Boot Process
Hans de Goede: Adding deferred fbcon console takeover to the Fedora kernels
Disabling deferred takeover
If the new behavior leads to issues, you can disable deferred takeover by using the
fbcon=nodefer
kernel parameter
.