Естетичне редагування grub.cfg


10

EDIT: (для наочності) Я хочу змінити зовнішній вигляд меню завантаження grub, редагуючи конфігураційні файли (можливо, але не обов’язково grub.cfg).

Отже, будь-який користувач ubuntu знає, як заповнилось меню завантаження після кількох оновлень ядра. Ще в дні menu.lst ви можете налаштувати меню, щоб приховати небажані параметри, але все одно залишати їх доступними.

Наприклад, якщо меню вашої гриби виглядало так:

A
B
C
D

Ви можете зробити параметри C і D невидимими, вставивши порожній параметр між B і C. Таким чином, параметри C і D не були б видимі під час завантаження, але стануть видимими, якщо ви прокрутите їх донизу в меню завантаження.

Спроба цього ж фокусу в grub.cfg ні до чого не призвела. Отже, я шукаю спосіб досягти цього самого результату за допомогою нового меню grub, редагуючи файл grub.cfg. Інші естетичні налаштування також вітаються.

Дякую

EDIT2: Якщо приховати записи меню неможливо, я хотів би вставити роздільник між ними, щоб меню виглядало так:

А
Б

- Інші--
C
D


Ви хочете внести всі зміни в grub.cfg ? якщо ви використовуєте update-grub для його автоматичного генерування, ви, ймовірно, хочете відредагувати сценарії під /etc/grub.d ; див. короткий огляд на superuser.com/questions/102692/… .
квакш-кіхот

@ ~ quack: це трохи допомагає та є досить інформативним. Я все ще сподіваюся на спосіб приховати записи меню або принаймні поставити роздільник між ними.
Малабарба

Тож, мабуть, видалення старих ядер - це не варіант?
Боббі

Відповіді:


8

Спочатку зрозумійте, як Ubuntu налаштовує Grub2.

  • /boot/grub/grub.cfg - це меню Grub2
  • команда update-grub автоматично генерує цей файл
  • ... читаючи налаштування за замовчуванням з / etc / defaults / grub
  • ... та запуску оболонок у /etc/grub.d

Отже, якщо ви не хочете редагувати grub.cfg після кожного оновлення ядра, ви хочете налаштувати сценарії в /etc/grub.d, щоб ваші зміни застосовувалися в будь - який час, коли буде запущено оновлення-grub .


По-друге, щоб відповісти на ваше перше запитання безпосередньо, я не знайомий з будь-якими способами зробити конкретні параметри завантаження невидимими, але все ще доступними через меню Grub. Є багато дрібниць про Grub1, які не переробили в Grub2, і це не здивувало б мене, якби це була одна з них.

Натомість ви можете зробити всі записи меню невидимими (до виділення), встановивши колір шрифту меню таким же, як і колір тла. У /etc/grub.d/05_debian_theme змініть menu_color_normal так, щоб перший колір (шрифт) відповідав другому кольору (фону). Залиште меню_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 .


Якщо ви хочете щось красивіше, використовуйте Grub-плескітні зображення або теми. Мені потрібно дати точну перевірку цих тем, але перевірити ресурси нижче.


Ресурси:

У UbuntuForums є два великі посібники з Grub2, які я дізнався і люблю:

GNU Grub 2 - ще один чудовий ресурс. У нього є набір сценаріїв для налаштування Karb's Grub2 ( повне розкриття: я їх не пробував ).

Сторінка формату теми Grub Wiki - обов'язкова для хакерства тем Grub2.


Нічого, дякую за відповідь. Соромлячись, що деякі функції не зробили цю версію. Я вже спробував вставити роздільник, він не спрацював, тому що я залишив його порожнім між дужками. Все вище, здається, працює. Знову дякую.
Малабарба

@D Connors - так, про Grub1 мені не вистачало кількох речей, але в цілому я думаю, що Grub2 - це вдосконалення. у нього є своя крива навчання. Я очікую, що розробники докладуть більше зусиль для графічних здібностей Grub2 за рахунок текстового меню, але, можливо, це зміниться в міру розвитку проекту.
хит-кіхот

5

Сепаратор може бути зроблений з тире, якщо його першим символом є пробіл. Крім того, необов’язково використовувати команду linux для розділу розділювача, ви можете використовувати будь-яку команду, як це:

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}

Або навіть "правдиво" повернутися безшумно:

menuentry " -----------------------------------------------------------" {
  true
}

0

Якщо ви не використовуєте інші ядра, ви можете просто видалити їх за допомогою інтерфейсу менеджера пакунків, який вам підходить. Це автоматично видаляє їх з grub.cfg


Я рідко використовую їх для усунення несправностей, коли мені трапляється накрутити поточну установку. Крім того, ядра були лише прикладом, у мене також є 3 інші завантажувальні розділи, які я хотів би приховати, але все ще маю їх доступними.
Малабарба

(щоб уникнути плутанини. Коли я сказав "сховати", я не мав на увазі "приховати розділ", я мав на увазі лише "приховати поважний запис ОС у меню завантаження")
Malabarba
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.