Этот вопрос Ошибка неизвестной команды 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_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=""
Я прокомментировал если затем структура в /etc/grub.d/10_linux
это использовало hwmatch, и это работало.
Обратите внимание, что это была Грубая сила, и Незнание фиксируют, потому что я не знал который из результатов в если затем структура выбирать. Тот, который я выбрал работавший для меня, это не может для Вас.
После выполнения 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
, и это сделало это.
Чтобы избавиться от сообщения об ошибке, добавьте эту строку в /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
после завершения редактирования.