静默启动
本页面适用于那些出于美观或其他原因而希望将其系统的冗余程度限制在最低限度的用户。按照本指南操作将删除启动过程中的所有文本。视频演示
内核参数
quiet
如果您仍然收到打印到控制台的消息,则可能是 dmesg 向您发送它认为重要的消息。您可以使用 quiet loglevel=level
更改将打印这些消息的级别,其中 level
是介于 0 和 7 之间的任何数字,其中 0 是最关键的,而 7 是调试打印级别。
quiet loglevel=3
请注意,这似乎仅在同时使用 quiet
和 loglevel=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 的用户必须同时使用 quiet
和 splash
内核参数,否则将使用 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_profile
或 Zsh 中的 ~/.zprofile
)中的 /dev/null
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then exec startx &>/dev/null fi
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=0
和 GRUB_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=3
或 rd.udev.log_level=3
。请注意,如果您经常在内核日志中收到 Core temperature above threshold, cpu clock throttled
消息,则需要在启动时使用日志级别 2 来静默这些消息。或者,如果您编译自己的内核,请调整 arch/x86/kernel/cpu/mcheck/therm_throt.c
中消息的日志级别。
如果您使用 Intel graphics,另请参阅 Intel graphics#快速启动。
延伸阅读
- 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
禁用延迟接管
如果新行为导致问题,您可以使用 fbcon=nodefer
内核参数 禁用延迟接管。