静默启动
本页适用于那些出于美观或其他原因而倾向于将其系统启动的记录严格限制在最低限度的人。遵循本指南将删除启动过程中的所有文本。演示视频
内核参数[编辑 | 编辑源代码]
quiet
如果您仍发现消息被打印到控制台,则可能是dmesg向您发送了它认为重要的消息。您可以使用 quiet loglevel=level
来更改打印这些消息的级别,其中 level
是0到7之间的任意数字,其中0代表只有最关键的,7代表打印的调试级别(debug levels)。
quiet loglevel=3
请注意,只有同时使用 quiet
和 loglevel=level
且 quiet 在前才应当有效。loglevel 参数只会更改打印到控制台的内容,dmesg 本身的级别不会受到影响,并且仍然可以通过日志(journal)和 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
删除最后登录消息。
移除控制台光标闪烁[编辑 | 编辑源代码]
如果按照以下说明,启动时的控制台光标会一直闪烁。这可以通过向内核传递 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
的附加片段。
/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
消息,您可以在你的 .bash_profile 中重定向它的输出到 /dev/null
,类似于这样:
$ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null
fsck[编辑 | 编辑源代码]
要在引导期间隐藏 fsck 消息,请让 systemd 检查根文件系统。为此,请将 udev 钩子替换为 systemd:
HOOKS=( base systemd fsck )
在 /etc/mkinitcpio.conf
中并重新生成 initramfs。
现在编辑 systemd-fsck-root.service
和 systemd-fsck@.service
并配置 StandardOutput
和 StandardError
类似于这样:
[Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/systemd-fsck StandardOutput=null StandardError=journal+console TimeoutSec=0
见 systemd-fsck@.service(8) 获得可以传递给 systemd-fsck
的选项的更多信息,您可以更改服务检查(或不检查)文件系统的频率。
使 GRUB 静默[编辑 | 编辑源代码]
要隐藏 GRUB 欢迎和引导消息,您可以安装非官方的 grub-silentAUR 包。
安装完成后,需要先将 GRUB 重新安装到必要的分区中。
然后,以 /etc/default/grub.silent
为例,对 /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
,该选项将保留帧缓冲区的内容,直到需要在帧缓冲区控制台上打印文本为止。截至2018年11月(Linux 4.19.1),官方的 Arch Linux 内核使用 CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
编译。
当与低日志级别相结合(以防止打印文本)时,可以在系统初始化时保留供应商徽标。请注意,标准配置中的 GRUB 会清空屏幕;考虑使用 EFISTUB 引导来直接引导到内核中,从而利用延迟接管(deferred takeover)。
内核命令行应该使用上面提到的 loglevel=3
或 rd.udev.log_level=3
。请注意,如果您经常在内核日志中收到 Core temperature above threshold, cpu clock throttled
消息,则需要使用日志级别2在启动时使这些消息静音。或者,如果您编译自己的内核,请调整 arch/x86/kernel/cpu/mcheck/therm_throt.c
中消息的日志级别。
如果你使用 Intel 图形处理器,另见 Intel 图形处理器#Fastboot。
延伸阅读:
- 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
禁用延迟接管(deferred takeover)[编辑 | 编辑源代码]
如果新行为导致问题,可以使用 fbcon=nodefer
内核参数禁用延迟接管。