静默启动

出自 ArchWiki

本页面适用于那些出于美观或其他原因而希望将其系统的冗余程度限制在最低限度的用户。按照本指南操作将删除启动过程中的所有文本。视频演示

内核参数

使用您的引导加载器的配置选项更改内核参数,以包含以下参数

quiet
注意:添加 vga=current 作为内核参数可以避免像 FS#32309 这样的奇怪行为。请记住,这与 KMS 冲突,因此仅当您受到上述错误影响时才使用此参数。

如果您仍然收到打印到控制台的消息,则可能是 dmesg 向您发送它认为重要的消息。您可以使用 quiet loglevel=level 更改将打印这些消息的级别,其中 level 是介于 0 和 7 之间的任何数字,其中 0 是最关键的,而 7 是调试打印级别。

quiet loglevel=3

请注意,这似乎仅在同时使用 quietloglevel=level 时才有效,并且它们必须按该顺序(先 quiet)。loglevel 参数仅更改打印到控制台的内容,dmesg 本身的级别不会受到影响,并且仍将通过日志以及 dmesg 提供。有关更多信息,请参见内核参数

如果您还想阻止 systemd 在启动时打印其版本号,则还应将 udev.log_level=3 附加到您的内核参数。如果在 initramfs 中使用 systemd,请改为附加 rd.udev.log_level=3。有关详细信息,请参见systemd-udevd.service(8) § KERNEL COMMAND LINE

如果您在 initramfs 中使用 systemd 钩子,则在 initramfs 初始化期间可能会收到 systemd 消息。您可以传递 systemd.show_status=false 来禁用它们,或者 systemd.show_status=auto 仅禁止显示成功的消息(因此,如果发生错误,您仍然可以看到它们)。实际上,当使用 quiet 时,auto 已经传递给 systemd.show_status=auto,但是由于某些动机,initramfs 中的 systemd 有时不会获得它。以下是您需要传递给内核的参数,以便在 initramfs 中使用 systemd 获得完全干净的启动

quiet loglevel=3 systemd.show_status=auto rd.udev.log_level=3

另请 touch ~/.hushlogin 以删除上次登录消息。

plymouth 的用户必须同时使用 quietsplash 内核参数,否则将使用 details 后备主题并显示 systemd 消息。

移除控制台光标闪烁

如果您按照这些说明操作,启动时控制台光标会一直闪烁。可以通过将 vt.global_cursor_default=0 传递给内核来解决此问题[1]

要在 TTY 中恢复光标,请运行

# setterm -cursor on >> /etc/issue

sysctl

要隐藏控制台中的任何内核消息,请根据 [2] 添加或修改 kernel.printk

/etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3

agetty

要从控制台隐藏 agetty 打印的问题和“login:”提示行[3],为 getty@tty1.service 创建一个drop-in snippet

/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

要隐藏 startx 消息,您可以将其输出重定向到 shell 配置文件(例如 Bash 中的 ~/.bash_profileZsh 中的 ~/.zprofile)中的 /dev/null

if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
  exec startx &>/dev/null
fi
注意:重定向在无根登录中已损坏。请参阅 Xorg#会话日志重定向

fsck

要隐藏启动期间的 fsck 消息,请让 systemd 检查根文件系统。为此,请将 udev 钩子替换为 systemd 并删除 fsck 钩子

HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block filesystems)

/etc/mkinitcpio.conf 中,并重新生成 initramfs

有关您可以传递给 systemd-fsck 的选项的更多信息,请参见 systemd-fsck@.service(8) - 您可以更改服务检查文件系统的频率(或不检查)。

使 GRUB 静默

要隐藏 GRUB 欢迎和启动消息,您可以安装非官方的 grub-silentAUR 软件包。

安装后,需要先将 GRUB 重新安装到必要的分区。

然后,以 /etc/default/grub.silent 为例,并对 /etc/default/grub 进行必要的更改。

以下三行是必要的

/etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
注意:如果您设置 GRUB_TIMEOUT=0GRUB_HIDDEN_TIMEOUT=1(或任何正值),请设置 GRUB_RECORDFAIL_TIMEOUT=$GRUB_HIDDEN_TIMEOUT 而不是 GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT。否则,在启动时按 Esc 显示 GRUB 菜单将不起作用。

最后,重新生成 grub.cfg 文件。

保留或禁用 BIOS 中的厂商徽标

现代 UEFI 系统在启动时显示厂商徽标,直到将控制权移交给引导加载程序;例如,联想笔记本电脑显示鲜艳的红色联想徽标。此厂商徽标通常会被引导加载程序(如果使用标准 GRUB)或内核清除。

为了防止内核清除厂商徽标,Linux 4.19 引入了一个新的配置选项 FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER,该选项保留帧缓冲区的内容,直到需要在帧缓冲区控制台上打印文本为止。自版本 4.19.arch1 起,官方 Arch Linux 内核在编译时使用了 CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y

当与低日志级别(以防止打印文本)结合使用时,可以在系统初始化时保留厂商徽标。请注意,标准配置中的 GRUB 会清除屏幕;考虑直接引导 EFI 引导桩,从而利用延迟接管。

视频演示

内核命令行应使用上面提到的 loglevel=3rd.udev.log_level=3。请注意,如果您经常在内核日志中收到 Core temperature above threshold, cpu clock throttled 消息,则需要在启动时使用日志级别 2 来静默这些消息。或者,如果您编译自己的内核,请调整 arch/x86/kernel/cpu/mcheck/therm_throt.c 中消息的日志级别。

如果您使用 Intel graphics,另请参阅 Intel graphics#快速启动

延伸阅读

禁用延迟接管

如果新行为导致问题,您可以使用 fbcon=nodefer 内核参数 禁用延迟接管。