一、前言

在打造一个舒适美丽的Linux桌面环境时,对于Linux启动的时候的命令行消息我们可以通过内核参数splash=silent quiet loglevel=1来进行隐藏。但是对于Grub的消息我们怎么来隐藏呢。

二、需要隐藏的消息

1.内核启动消息

这个消息指的是Grub将系统启动交给Linux内核之前一般会打印的两个消息:

Loading Linux Linux 5.3.18-lp152.81-default ...
Loading initial ramdisk ...

2.Grub启动消息

这个消息指的是机器BIOS启动进入GRUB菜单前打印的消息,一般是Welcome to GRUB!

三、GRUB消息清除

1.内核启动消息

这个消息输出的直接来源是来自于/boot/grub2/grub.cfg中的如下配置

echo    'Loading Linux 5.3.18-lp152.81-default ...'
linuxefi /boot/vmlinuz-5.3.18-lp152.81-default root=UUID=ade74768-e440-4149-87d2-e073fda71fab  mitigations=auto
echo    'Loading initial ramdisk ...'
initrdefi       /boot/initrd-5.3.18-lp152.81-default

但是这个文件是属于自动生成的,每次内核升级或者更改GRUB设置都会通过执行grub2-mkconfig来自动生成。不过其自动生成的模板在/etc/grub.d/目录下。可以通过更改模板来达到一劳永逸的目的。

  • 1.找到/etc/grub.d/10_linux文件
  • 2.清除Loading Linux消息
    找到下面被注释的代码,将其替换为后面的两行代码。
  if [ -d /sys/firmware/efi ] && [ "x${GRUB_USE_LINUXEFI}" = "xtrue" ]; then
# +------------- Disable Boot Message -----------+
#    sed "s/^/$submenu_indentation/" << EOF
#       echo    '$(echo "$message" | grub_quote)'
#       linuxefi ${rel_dirname}/${basename} ${root_device} ${args}
    sed "s/^/$submenu_indentation/" << EOF
    linuxefi ${rel_dirname}/${basename} ${root_device} ${args}
EOF
  else
# +------------- Disable Boot Message -----------+
#    sed "s/^/$submenu_indentation/" << EOF
#       echo    '$(echo "$message" | grub_quote)'
#       linux   ${rel_dirname}/${basename} ${root_device} ${args}
    sed "s/^/$submenu_indentation/" << EOF
    linux   ${rel_dirname}/${basename} ${root_device} ${args}
EOF    
  • 3.清除Loading initial ramdisk消息
    找到下面被注释的代码,将其替换为后面的两行代码。
  if [ -d /sys/firmware/efi ] && [ "x${GRUB_USE_LINUXEFI}" = "xtrue" ]; then
# +------------- Disable Boot Message -----------+
#       sed "s/^/$submenu_indentation/" << EOF
#       echo    '$(echo "$message" | grub_quote)'
#       initrdefi       $(echo $initrd_path)
    sed "s/^/$submenu_indentation/" << EOF
    initrdefi       $(echo $initrd_path)
EOF
  else
# +------------- Disable Boot Message -----------+
#      sed "s/^/$submenu_indentation/" << EOF
#       echo    '$(echo "$message" | grub_quote)'
#       initrd  $(echo $initrd_path)
    sed "s/^/$submenu_indentation/" << EOF
    initrd  $(echo $initrd_path)
EOF

2.Grub启动消息

对于grub的消息的来源并没有配置文件来让我们修改,它都被写死在grub的二进制文件中。
对于目前通用的UEFI启动来说,它在/boot/efi/EFI/{os_name}/grubx64.efi中。
这时候就需要一个工具来处理它了:grub-shusher

  • 1.下载编译
git clone https://github.com/ccontavalli/grub-shusher.git
cd grub-shusher
make
  • 2.清除GRUB消息
sudo -s
./grub-kernel /boot/efi/EFI/***/grubx64.efi

执行前请注意备份grubx64.efi,避免炸机。

最后

最后配合GRUB_TIMEOUT=0plymouth启动动画你就会得到一个清爽干净的Linux开机体验了。

Q.E.D.


ねだるな、勝ち取れ、さすれば与えれねん