跳转至内容

静默启动

来自 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 钩子,你可能会在 initramfs 初始化期间收到 systemd 消息。你可以传递 systemd.show_status=false 来禁用它们,或者传递 systemd.show_status=auto 以仅抑制成功消息(这样在出错时你仍然能看到)。实际上,当使用 quiet 时,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 --noreset --noclear - ${TERM}

startx

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

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

fsck

要隐藏启动期间的 fsck 消息,请让 systemd 检查根文件系统。为此,在 /etc/mkinitcpio.conf 中将 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 文件。

保留或禁用 UEFI 厂商 Logo

现代 UEFI 系统在启动时会显示厂商 Logo,直到将控制权交给 引导加载程序 —— 例如,联想笔记本会显示一个亮红色的 Lenovo 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 boot stub 以利用延迟接管。

视频演示

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

如果你使用 Intel 显卡,请参阅 Intel graphics#Fastboot

进一步阅读

禁用延迟接管

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

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.