Grub2 2.00
Передо мной была поставлена задача реализовать тему для Grub2 на основе эскизов, разработанных дизайнером. Первое, что я сделал - это нашёл в сети документы и справочный материал по возможностям графического оформления Grub2. Оказалось, что таких статей много, но все они неполные, устаревшие и частично неверные.
После я прочёл исходный код Grub2, связанный с графическим оформлением, добавил новую опцию и, попутно, исправил ошибку (оба патча отосланы в апстрим).
Данная статья аккумулирует в себе всю информацию по синтаксису темы Grub2 версии 2.00
Цвета текста консоли можно задать в файле /boot/grub2/custom.cfg
Синтаксис файла:
color_normal=text-color/bg-color menu_color_normal=text-color/bg-color menu_color_highlight=text-color/bg-color
где "text-color" и "bg-color" - цвета для текста и фона текста из набора цветов.
Важно отметить, что "black" в качестве цвета фона - это "прозрачный" цвет. Если общий фон GRUB_BACKGROUND терминала не задан, то общий фон считается чёрным.
В файле темы цвет можно описать тремя способами:
Grub2 использует собственный формат шрифтов PFF2. Необходимо использовать утилиту grub-mkfont для конвертации шрифтов одного из форматов BDF, PCF, TTF в формат, понятный для Grub2. У полученного с помощью утилиты файла должно быть разрешение pf2. Полученный файл необходимо поместить в папку с темой (/boot/grub2/themes/rosa/).
В файле темы нужно указывать полное название шрифта и размер (например, "Droid Sans Mono Regular 11").
Координаты и длины задаются числовыми значениями.
Можно задать числовое значение тремя способами:
Строка текста - набор символов, заключённый в двойные кавычки. (например, "Edit entry")
Только два значения.
Абсолютный путь к файлу с изображением. Допустимые форматы: JPG, PNG, TGA; поддерживается прозрачность. (например, "/boot/grub2/themes/rosa/background.png")
Для оформления фона элемента необходимо разрезать картинку фона на 9 частей:
северо-запад (nw) |
север (n) |
северо-восток (ne) |
запад (w) |
центр (c) |
восток (e) |
юго-запад (sw) |
юг (s) |
юго-восток (se) |
В скобках указано имя части. Для использования в теме необходимо каждый файл назвать по шаблону NAME_PART.EXT, где
Таким образом, имя файла для данного примера (юго-западная часть элемента example) будет example_sw.png.
Центральная часть растягивается в качестве фона на всю область, занимаемую элементом, остальные части образуют "рамочку" вокруг центральной области.
Для того, чтобы понять, как масштабируются части нашего графического элемента, рассмотрим следующую таблицу:
не масштабируется | ↔ | не масштабируется |
↕ | горизонтально и вертикально | ↕ |
не масштабируется | ↔ | не масштабируется |
Если какая-то часть отсутствует, она заменяется пустой.
Файлы с частями необходимо поместить в директорию с темой.
Для использования графического элемента в теме, используем шаблон "example_*.png" (или "NAME_*.EXT" в более общем виде)
Графическое меню Grub2 может быть изменено посредством использования темы.
Для этого нужно в директории /boot/grub2/themes/ создать пустую поддиректорию (например, example/), в ней создать файл theme.txt, прописать в /etc/default/grub строчку c полным путём к файлу theme.txt
GRUB_THEME="/boot/grub2/themes/example/theme.txt"
После любых изменений в /etc/default/grub необходимо выполнить update-grub2.
Тема Grub2 может содержать разнообразные элементы - изображения, строки, индикаторы обратного отсчёта времени, графические оформления элементов, меню загрузки. Также могут содержаться специальные элементы - контейнеры. Они содержат другие элементы. Корневой элемент - на самом деле частный случай элемента канва (canvas). Контейнеры могут содержать другие контейнеры.
Компоненты и их свойства описываются в обычном текстовом файле (theme.txt).
Главный файл темы содержит только три типа конструкций:
Первая конструкция - объявление значения глобального свойства. Не должно объявляться дважды одно и то же свойство.
Вторая конструкция - объявление значения свойства внутри элементов. Не должно объявляться дважды одно и то же свойство в пределах одного элемента.
Третья конструкция - начинается со знака "+", далее идёт тип компонента и в фигурных скобках содержимое - свойства и\или другие компоненты.
Строчки, начинающиеся с "#" - комментарии.
Допустима как запись
+ COMPONENT {OPTION_1 = VALUE_1 OPTION_2 = VALUE_2 ... OPTION_N = VALUE_N }
так и многострочная запись
+ COMPONENT { OPTION_1 = VALUE_1 OPTION_2 = VALUE_2 ... OPTION_N = VALUE_N }
Пробелы игнорируются. Так что строчки
color = "127, 127, 0"
color="127,127,0"
означают одно и то же.
Эти свойства применимы ко всем элементам (когда не указано обратное).
Отсчёт идёт, как обычно, от левого верхнего угла.
свойство | описание | тип значения | по умолчанию |
left | Позиция левого края элемента | Числовое | |
top | Позиция верхнего края элемента | Числовое | |
width | Ширина элемента | Числовое | |
height | Высота элемента | Числовое | |
id | Идентификатор элемента | Строка |
id Идентификатор компонента может быть любой текстовой строкой. ID может быть использовано скриптами для обращения к определённым компонентам в дереве компонент GUI. На текущий момент, есть только одно значение ID, опознаваемое Grub2:
Глобальные свойства описываются в корневом элементе файла theme.txt
Этот элемент на самом деле экземпляр canvas с дополнительными опциями:
свойство | описание | тип значения | по умолчанию |
title-text | Заголовок меню | Строка | Загрузочное меню GRUB |
title-font | Шрифт заголовка | Имя шрифта | Unknown Regular 16 |
title-color | Цвет шрифта заголовка | Цвет | black |
message-font | Шрифт текста сообщений GRUB | Имя шрифта | Unknown Regular 16 |
message-color | Цвет текста сообщений GRUB | Цвет | white |
message-bg-color | Фоновый цвет сообщений GRUB | Цвет | black |
desktop-image | Фоновое изображение | Изображение | |
desktop-color | Цвет фона, если не указано фоновое изображение |
Цвет | white |
terminal-box | Оформление консоли | Оформление | Чёрный прямоугольник |
terminal-font | Шрифт консоли | Имя шрифта | Fixed 10 |
boot_menu описывает графический стиль меню загрузки. Этот компонент обязательно должен быть включён в основной файл темы.
boot_menu обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
visible | Показать или спрятать меню загрузки | Логическое | true |
menu_pixmap_style | Оформление меню загрузки | Оформление | |
item_font | Шрифт пунктов меню | Имя шрифта | Unknown Regular 16 |
item_color | Цвет пунктов меню | Цвет | black |
item_pixmap_style * | Оформление неактивных пунктов меню | Оформление | |
selected_item_font | Шрифт выбранного пункта меню. Допустимые значения - имя шрифта или inherit. Когда установлено inherit, используется шрифт, установленный для свойства item_font | Имя шрифта | inherit |
selected_item_color | Цвет выбранного пункта меню. Допустимые значения - цвет или inherit. Когда установлено inherit, используется цвет, установленный для свойства item_color | Цвет | inherit |
selected_item_pixmap_style | Оформление выбранного пункта меню | Оформление | |
item_height | Высота каждого пункта меню | Числовое | 42 |
item_padding | Пространство, оставляемое по каждую сторону от пунктов меню | Числовое | 14 |
item_spacing | Пространство между пунктами меню | Числовое | 16 |
icon_width | Ширина иконки пунктов меню | Числовое | 32 |
icon_height | Высота иконки пунктов меню | Числовое | 32 |
item_icon_space | Пространство между иконкой и текстом пункта меню | Числовое | 4 |
scrollbar | Показать или спрятать полосу прокрутки | Логическое | true |
scrollbar_width | Ширина полосы прокрутки | Числовое | 16 |
scrollbar_frame | Оформление фона полосы прокрутки | Оформление | |
scrollbar_thumb | Оформление ползунка полосы прокрутки | Оформление |
Отображение одноцветного или с наложенными текстурами горизонтального индикатора, который даёт графическое представление о времени, через которое выбранный пункт меню будет загружен.
progress_bar обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
visible | Показать или спрятать горизонтальный индикатор | Логическое | true |
bg_color | Цвет фона одноцветного горизонтального индикатора | Цвет | "128, 128, 128" |
fg_color | Цвет одноцветного горизонтального индикатора | Цвет | "200, 200, 200" |
border_color | Цвет рамки одноцветного горизонтального индикатора | Цвет | black |
text | Текст, показанный на горизонтальном индикаторе. Возможные значения: @TIMEOUT_NOTIFICATION_SHORT@ @TIMEOUT_NOTIFICATION_MIDDLE@ @TIMEOUT_NOTIFICATION_LONG@, или любая допустимая строка ** |
Строка | |
text_color | Цвет шрифта | Цвет | black |
font | Используемые шрифт | Имя шрифта | Unknown Regular 16 |
bar_style | Фоновое изображение для горизонтального индикатора с наложенными текстурами. Если не указано, то отображается одноцветный горизонтальный индикатор. | Оформление | |
highlight_style | Изображение для горизонтального индикатора с наложенными текстурами. Если не указано, то отображается одноцветный горизонтальный индикатор. | Оформление |
Отображание кругового индикатора, который даёт графическое представление о времени, через которое выбранный пункт меню будет загружен.
circular_progress обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
num_ticks | Количество тактов для полного цикла | Числовое | 64 |
start_angle | Позиция первого такта (показываемого или убираемого) ** | Числовое | -64 |
ticks_disappear | Показывать или убирать такты. Установите на false для показывания тактов or true для убирания | Логическое | False |
center_bitmap | Изображение, показанное в центре кругового индикатора | Изображение | |
tick_bitmap | Изображение для отображения тактов | Изображение |
Компонент label отображает одну строчку текста на экране.
label обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
text | Text to display. Possible values are: @KEYMAP_SHORT@ @KEYMAP_MIDDLE@ @KEYMAP_LONG@, or any valid string ** |
Строка | |
font | Используемый шрифт | Имя шрифта | Unknown Regular 16 |
color | Цвет шрифта | Цвет | black |
align | Горизонтальное выравнивание текста. Возможные значения: left (от левого края), center (по центру) или right (от правого края) | Строка | left |
Компонент image выводит изображение на экран. Изображение масштабируется под размеры компонента. (свойства width и height)
image обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
file | Имя изображения | Изображение |
Компонент vbox - это контейнерный компонент, который выводит другие компоненты внутри себя по вертикали, начиная сверху. Он выставляет ширину каждого компонента внутри себя равной ширине самого широкого компонента. Этот контейнер сохраняет высоты компонентов.
vbox обладает всеми общими свойствами за исключением width и height, которые игнорируются.
Компонент hbox - это контейнерный компонент, который выводит другие компоненты внутри себя по горизонтали, начиная слева. Он выставляет высоту каждого компонента внутри себя равной высоте самого высокого компонента. Этот контейнер сохраняет ширины компонентов.
hbox обладает всеми общими свойствами за исключением width и height, которые игнорируются.
Компонент canvas - это контейнерный компонент, который позволяет размещать другие компоненты согласно их собственным положениями и размерам. В отличие от vbox и hbox, он не изменяет размеры компонентов.
сanvas обладает всеми общими свойствами.
В файле /etc/default/grub есть несколько опций, напрямую связанных с темой Grub2. Опции задаются в виде OPTION=value, c начала строки, без пробелов, строки, начинающиеся со знака # - комментарии.
После любых изменений в /etc/default/grub необходимо выполнить update-grub2, чтобы применить эти изменения.
В этом параметре можно задать желаемое разрешение экрана при загрузке Grub2 и в теме Plymoth.
Структура опции: GRUB_GFXMODE=WIDTHxHEIGHT, где
Например,
GRUB_GFXMODE=1024x768
В этой опции нужно указать полный путь к теме Grub2.
Структура опции: GRUB_THEME="FULL_PATH", где
Например,
GRUB_THEME="/boot/grub2/themes/rosa/theme.txt"
Для выбора локали Grub2, отличной от локали, выбранной в системе, стоит использовать данные опции.
Реккомендуется использовать одновременно обе опции с одинаковым параметром для полного перевода.
Структура опции LANG="xx_XX" и LANGUAGE="xx_XX", где
Например,
LANG=ru_RU LANGUAGE=ru_RU
Чтобы задать фон консоли (непрозрачная картинка форматов PNG, JPG, TGA), необходимо прописать полный путь к файлу картинки в качестве параметра данной опции.
Структура опции: GRUB_BACKGROUND="FULL_PATH", где
Например,
GRUB_BACKGROUND="/boot/grub2/themes/rosa/terminal_background.png"
символ | имя цвета | значение |
0 | black | #000000 |
1 | blue | #0000a8 |
2 | green | #00a800 |
3 | cyan | #00a8a8 |
4 | red | #a80000 |
5 | magenta | #a800a8 |
6 | brown | #a85400 |
7 | light-gray | #a8a8a8 |
8 | dark-gray | #545454 |
9 | light-blue | #5454fe |
A | light-green | #54fe54 |
B | light-cyan | #54fefe |
C | light-red | #fe5454 |
D | light-magenta | #fe54fe |
E | yellow | #fefe54 |
F | white | #fefefe |
Владимир Тестов