这个问题错误未知命令 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-backup
grub.d
/etc/grub.d/10_linux-backup
sudo update-grub