grub 在启动时发出消息 - “错误 - 找不到命令 hwmatch”

grub 在启动时发出消息 - “错误 - 找不到命令 hwmatch”

这个问题错误未知命令 hwmatch正是我所问的,但因为不可重现而被关闭。我的重现性很好。

Ubuntu 18.04 新安装在 64 位 UEFI 机器上。默认 grub 启动选项工作正常,但我想添加一个简短的倒计时(我的正常配置)。/etc/default/grub按正常方式编辑并运行后sudo update-grub,倒计时工作正常,但我收到问题标题中显示的错误。

我尝试了封闭式问题中的解决方案(复制文件),但它似乎不适合我的配置。坦率地说,我发现答案很混乱。

我还尝试编辑/etc/grub.d/10_linux以注释掉使用的 IF-THEN 结构hwmatch。之后我做了一个sudo update-grub但仍然收到错误。

我怎样才能获得倒计时而不看到此错误?

根据评论编辑 -

安装的库存 grub(显示所有未注释掉的行)

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

编辑 grub 以提供倒计时(显示所有未注释掉的行)

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=countdown
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

答案1

要消除错误消息,请将此行添加到/etc/default/grub

GRUB_GFXPAYLOAD_LINUX=keep

来源:#4 评论https://bugs.launchpad.net/ubuntu/+source/grub2-signed/+bug/1840560

这将让代码中的条件以绕过代码块引用的方式得到评估hwmatch

至于缺失的命令有多令人担忧(或不令人担忧):根据mook765 的评论,它只是 grub-pc 的一部分,而不是 grub-efi 的一部分,并且据称在 grub-efi 安装的情况下被视为错误。

在倒计时/菜单上自愿发表评论:

使用

GRUB_TIMEOUT_STYLE=menu

代替

GRUB_TIMEOUT_STYLE=countdown

将使菜单可见(同时保持倒计时功能(在屏幕底部)和自动后退选择不变)。

sudo update-grub编辑完成后别忘了运行。

答案2

我注释掉了使用 hwmatch 的 if-then 结构,/etc/grub.d/10_linux这样就成功了。

请注意,这是一次蛮力和无知修复,因为我不知道在 if-then 结构中选择哪个结果。我选择的那个对我有用,但对你来说可能没用。

运行后sudo update-grub我在启动时得到了期望的结果。

# Use ELILO's generic "efifb" when it's known to be available.
# FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 0 ]; then
  echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
else
  cat << EOF
if [ "\${recordfail}" != 1 ]; then
  if [ -e \${prefix}/gfxblacklist.txt ]; then
#    if hwmatch \${prefix}/gfxblacklist.txt 3; then
#      if [ \${match} = 0 ]; then
        set linux_gfx_mode=keep
#      else
#        set linux_gfx_mode=text
#      fi
#    else
#      set linux_gfx_mode=text
#    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
EOF
fi
cat << EOF
export linux_gfx_mode
EOF

注意:起初这不起作用,因为我在编辑之前复制/etc/grub.d/10_linux到了。但是 中的所有可执行文件都被选中,因此原始文件也被复制了进去。我很幸运系统启动了。我从 中删除了可执行设置,重新运行,这样就成功了。/etc/grub.d/10_linux-backupgrub.d/etc/grub.d/10_linux-backupsudo update-grub

相关内容