跳转至内容

静默启动

来自 ArchWiki

此页面适用于那些为了美观或其他原因而希望将系统冗余降至最低的用户。遵循本指南将移除启动过程中的所有文本。 视频演示

内核参数

通过您的 引导加载程序 的配置选项,更改 内核参数,以包含以下参数。

quiet
注意vga=current 作为内核参数可以避免出现 FS#32309 这样的奇怪行为。请注意,这与 KMS 冲突,因此仅当您受到上述 bug 的影响时才应使用此参数。

如果您仍然看到消息打印到控制台,可能是 dmesg 正在向您发送它认为重要的消息。您可以通过使用 quiet loglevel=level 来更改这些消息的打印级别,其中 level 是 0 到 7 之间的任意数字,0 是最关键的,7 是调试级别的打印。

quiet loglevel=3

请注意,这似乎只有在同时使用 quietloglevel=level 时才有效,并且它们必须按此顺序(quiet 在前)。loglevel 参数仅更改打印到控制台的内容,dmesg 本身的级别不会受到影响,并且仍然可以通过 journal 和 dmesg 访问。更多信息,请参见 内核参数

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

如果您在 initramfs 中使用了 systemd hook,您可能会在 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 打印的 issue 和“login:”提示行 [3],为 getty@tty1.service 创建一个 drop-in snippet

/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

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

if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
  exec startx &>/dev/null
fi
注意 在无根登录时重定向会失效。请参阅 Xorg#Session log redirection

fsck

要在启动时隐藏 fsck 消息,让 systemd 检查根文件系统。为此,请替换 udev hook 为 systemd,并移除 fsck hook。

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 文件。

保留或禁用 UEFI 的厂商 Logo

现代 UEFI 系统在启动时会显示一个厂商 Logo,直到将控制权移交给 引导加载程序——例如,联想笔记本电脑会显示一个亮红色的联想 Logo。这个厂商 Logo 通常会被引导加载程序(如果使用标准 GRUB)或内核置为黑色。

为了防止内核将厂商 Logo 置为黑色,Linux 4.19 引入了一个新的配置选项 FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER,它会保留帧缓冲的内容,直到需要在帧缓冲控制台上打印文本为止。自版本 4.19.arch1 起,官方 Arch Linux 内核都编译了 CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y

当结合低 loglevel(以防止打印文本)时,可以在系统初始化时保留厂商 Logo。请注意,标准配置下的 GRUB 会使屏幕变黑;请考虑直接引导一个 EFI 引导存根,从而利用延迟接管。

视频演示

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

如果您使用 Intel 显卡,请也参考 Intel graphics#Fastboot

进一步阅读

禁用延迟接管

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