Каждый раз копает обновления, из-за нормальных обновлений, я теряю некоторые значки в меню личинки. Я должен вручную отредактировать/boot/grub/grub.cfg файл и добавить '-человечность класса' (или безотносительно) к строкам, которые больше не имеют '-запись класса и следовательно не отображают значка.
Где, точно, личинка получает инструкцию записать '-запись класса в grub.cfg файл? Я посмотрел на шаблоны, но не вижу ничего очевидного.
Я прочитал несколько руководств личинки онлайн, но я нахожу это тяжелым движением так думал, что я обращусь за помощью!
(Ubuntu 14.04 LTS)
Для кого-либо, кому интересно, я понял это. Папка для заглядывания
/etc/grub.d/
существует набор файлов в здесь, которые являются шаблонами для поколения файла
/boot/grub/grub.cfg
файлы, которыми я интересуюсь,
10_linux*
30_uefi-firmware*
10_linux, файл для записей операционной системы Linux, 30_uefi-микропрограммный файл для записи установки eufi.
Для генерации значка для записи подменю я отредактировал соответствующую строку. Исходная строка была этим
echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
, я добавил опцию CLASS так, чтобы это теперь было похоже на это
echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
Для добавления значка для Системной записи Установки т.е. uefi настроек (BIOS), я отредактировал 30_uefi-встроенное-микропрограммное-обеспечение
, я добавил запись класса, сразу после записей экспорта
CLASS="--class recovery"
, и я добавил опцию CLASS в menuentry строке
menuentry '$LABEL' ${CLASS} \$menuentry_id_option 'uefi-firmware'
, запись класса должна соответствовать значку, который находится в папке значка тем.
/boot/grub/themes/<theme name>/icons
я использовал класс/значок 'восстановления', который показывает значок панели инструментов. Я буду искать что-то немного более подходящее, когда я получу момент, помещу значок в папку значков и изменю запись класса соответственно.
Ваш ответ упомянул поиск лучшего значка UEFI.
Вот значок, я использую для своей личинки системную опцию настройки UEFI:
Вот другой значок в сети:
Пользователям Fedora, это будет полезно при реализации вышеуказанного исправления: https://www.reddit.com/r/Fedora/comments/cg3wl4/i_cant_find_menuentries_of_my_fedora_30_install/
Один из способов сделать это полностью автоматизированным — создать скрипт, который заменяет регулярные выражения в автоматически сгенерированном grub.cfg
, чтобы добавить нужные вам --class
. А затем изменить grub-mkconfig
(/usr/sbin/grub-mkconfig
в производных Ubuntu), чтобы запустить его в конце.
Я использую эту идею в Matter, теме/инструменте grub, который может вам понравиться (бесстыдный штекер).
Основываясь на этом, вы можете сделать это вручную в python, например, эта функция (обратите внимание на регулярное выражение) возвращает список совпадений, каждое из которых содержит имя вашей записи, которую вы можете позже перебрать чтобы создать замену grub.cfg
с правильными --class
es (пример реализации здесь).
def get_entry_names(grub_cfg):
"Gets the entry names from grub.cfg contents"
pattern = (
r"(?P<head>(?:submenu|menuentry) ?)" # menuentry or submenu
r"(?:\"|')" # " or '
r"(?P<entryname>[^\"']*)" # capture the entry name (without quotes)
r"(?:\"|')" # " or '
r"(?P<tail>[^\{]*\{)" # The rest of the entry header until a { is found
)
matchiter = re.finditer(pattern, grub_cfg)
matches = list(matchiter)
return matches