Silent boot - ArchWiki

Jump to content
From ArchWiki

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 both 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.

## 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=-/usr/bin/agetty --skip-login --nonewline --noissue --autologin username --noclear %I $TERM

## startx

To hide `startx` messages, you could redirect its output to `/dev/null`, in your .bash_profile like so:

Note: Redirection is broken with rootless login. See Xorg#Session log redirection.

    $ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null

## fsck

To hide fsck messages during boot, let systemd check the root filesystem. For this, replace udev hook with systemd:

    HOOKS=( base systemd fsck )

in `/etc/mkinitcpio.conf` and regenerate the initramfs.

Now edit `systemd-fsck-root.service` and `systemd-fsck@.service` and configure `StandardOutput` and `StandardError` like this:

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/lib/systemd/systemd-fsck
    StandardOutput=null
    StandardError=journal+console
    TimeoutSec=0

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-silentAUR 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:

    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 `grub.cfg` file.

## Retaining or disabling the vendor logo from BIOS

Modern UEFI systems display a vendor logo on boot until handing over control to the bootloader; e.g. Lenovo laptops display a bright red Lenovo logo. This vendor logo is typically blanked by the bootloader (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. As of November 2018 (Linux 4.19.1), 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 using EFISTUB booting instead to boot directly into the kernel 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.

Category:

- Boot process