Во-первых, понять, как Ubuntu настраивает Grub2.
- /boot/grub/grub.cfg - это меню Grub2
- команда update-grub автоматически генерирует этот файл
- ... читая настройки по умолчанию из /etc/defaults/grub
- ... и запуска скриптов в /etc/grub.d
Итак, если вы не хотите редактировать grub.cfg после каждого обновления ядра, вы хотите настроить скрипты в /etc/grub.d, чтобы ваши изменения применялись каждый раз, когда запускается update-grub .
Во-вторых, чтобы ответить на ваш первый вопрос напрямую, я не знаком с какими-либо способами сделать определенные параметры загрузки невидимыми, но все же доступными через меню Grub. В Grub1 есть много мелочей, которые не были переопределены в Grub2, и меня не удивит, если это будет одна из них.
Вместо этого вы можете сделать все пункты меню невидимыми (пока они не будут выделены), установив цвет шрифта меню таким же, как цвет фона. В /etc/grub.d/05_debian_theme измените menu_color_normal так, чтобы первый цвет (шрифт) соответствовал второму цвету (фон). Оставьте menu_color_highlight другим, чтобы отображалась запись под курсором.
# example from a likely-tweaked Karmic /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/white
# ...to this
set menu_color_normal=black/black
set menu_color_highlight=black/white
Получение разделителя в меню Grub.
В Grub1 вы добавляете новую запись, подобную этой. Насколько я помню, вам нужно было корневое объявление, чтобы сделать его действительным пунктом меню, иначе Grub1 проигнорировал его.
# separator
title --------------------
root
Я подозреваю, что Grub2 может быть похожим. Очень простой пункт меню выглядит следующим образом в grub.cfg:
# basic example
menuentry "Memory test (memtest86)" {
linux /boot/memtest86+.bin
}
Так как «что-нибудь» в двойных кавычках отображается как заголовок, вы можете подделать разделитель с этим. Как и Grub1, Grub2 хочет, чтобы ключевое слово linux рассматривало его как реальную запись меню, поэтому будьте осторожны, чтобы случайно не выбрать его.
# a separator! no, really!
menuentry "....." {
linux /boot/memtest86+.bin
}
К сожалению, "ничего" не означает ничего; в то время как я проверял это, я пробовал длинную строку черт ("----------------"), и это никогда не работало. Но ему нравится короткая цепочка точек, показанная выше, так что вы можете использовать это.
.....
Теперь, как сделать один разделитель. Чтобы собрать и разместить их там, где вы хотите их автоматически, вам нужно добавить их в сценарии в /etc/grub.d.
Для этого примера давайте поместим простой разделитель между различными разделами grub.cfg. Если вы посмотрите на /etc/grub.d, вы увидите следующие скрипты:
- 00_header
- 05_debian_theme
- 10_linux - записи для ядер Ubuntu и восстановления
- 20_memtest86+ - запись для Memtest86+
- 30_os-prober - записи для Windows и других дистрибутивов Linux
- 40_custom - ничего по умолчанию; специальные записи пользователя могут идти здесь
Мы создадим новый скрипт, разделитель и поместим в него следующее:
#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
linux /boot/memtest86+.bin
}
EOF
Теперь переместите этот сценарий на место для первого разделителя и свяжите его на месте для остальных. Сценарии выполняются по порядку, поэтому, если вы хотите, чтобы первый был перед 10_linux, назовите его 09_separator или что-то в этом роде.
cd /etc/grub.d
# start the editor, paste in the script above, save, and exit
sudo nano separator
# set executable
sudo chmod +x separator
# rename into the first position
mv separator 09_separator
# link into remaining positions (can also use cp)
ln -s 09_separator 19_separator
ln -s 09_separator 29_separator
# not really necessary since 40_custom is empty by default
ln -s 09_separator 39_separator
Если в /etc/default/grub определена определенная запись по умолчанию, вам может потребоваться ее обновить - Grub2 начинает считать пункты меню с 0, и каждый из этих "разделителей" является действительной записью, поэтому они тоже учитываются. Если ваша предыдущая запись по умолчанию была 0, и вы добавили один разделитель перед ней, не забудьте изменить GRUB_DEFAULT на 1
Теперь запустите update-grub и изучите /boot/grub/grub.cfg - там вы увидите разделители. Если вы это сделаете, перезагрузите компьютер и проверьте их.
....
Если вы хотите разместить разделители в другом месте, скажем, между разными версиями ядра, вам нужно будет отредактировать 10_linux (или другой скрипт) напрямую и найти подходящее место для добавления разделителя. Вы можете использовать строки из сценария выше; включите все, кроме первого #!/bin/sh line.
Если вы хотите что-то красивее, используйте заставки Grub или темы. Я должен дать вам raincheck на эти темы, но проверьте ресурсы ниже.
Ресурсы:
На UbuntuForum есть два больших руководства по Grub2, которые я знаю и люблю:
GNU Grub 2 - еще один замечательный ресурс. У него есть набор скриптов для настройки Grub2 от Karmic (полное раскрытие: я их не пробовал).
Страница формата тем Grub Wiki обязательна для взлома тем Grub2.