Тема Grub2 / синтаксис
Grub2 2.00
Передо мной была поставлена задача реализовать тему для Grub2 на основе эскизов, разработанных дизайнером. Первое, что я сделал - это нашёл в сети документы и справочный материал по возможностям графического оформления Grub2. Оказалось, что таких статей много, но все они неполные, устаревшие и частично неверные.
После я прочёл исходный код Grub2, связанный с графическим оформлением, добавил новую опцию и, попутно, исправил ошибку (оба патча отосланы в апстрим и приняты).
Данная статья аккумулирует в себе всю информацию по синтаксису темы Grub2 версии 2.00
Содержание
- 1 Типы данных
- 2 Ключевые файлы темы
- 3 Использование тем
- 3.1 Структура главного файла
- 3.2 Общие свойства для всех объектов
- 3.3 Глобальные свойства
- 3.4 Меню загрузки (boot_menu)
- 3.5 Горизонтальный индикатор обратного отсчёта времени (progress_bar)
- 3.6 Круговой индикатор обратного отсчёта времени (circular_progress)
- 3.7 Строка (label)
- 3.8 Изображение (image)
- 3.9 Вертикальный контейнер (vbox)
- 3.10 Горизонтальный контейнер (hbox)
- 3.11 Канва (canvas)
- 4 Опции /etc/default/grub, влияющие на тему
- 5 Приложение А. Таблица цветов консоли.
Типы данных
Цвет в консоли
Цвета текста консоли можно задать в файле /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 терминала не задан, то общий фон считается чёрным.
- color_normal - цвет обычного текста консоли
- menu_color_normal - цвет неактивных пунктов и рамки меню загрузки (в случае, если графическая оболочка Grub2 не загрузилась. Например, если есть фактическая ошибка в файле темы).
- menu_color_highlight - цвет активного пункта меню загрузки.
Цвет в теме
В файле темы цвет можно описать тремя способами:
- Стиль HTML. Формат "#RRGGBB" или "#RGB", где R, G, B - шестнадцатеричные цифры. (например, "#D4E0EC")
- Значения RGB, разделённые запятой. "(127,127,255)"
- Имена цветов SVG 1.0. Например, cornflowerblue. Указываются в нижнем регистре.
Шрифт
Grub2 использует собственный формат шрифтов PFF2. Необходимо использовать утилиту grub-mkfont для конвертации шрифтов одного из форматов BDF, PCF, TTF в формат, понятный для Grub2. У полученного с помощью утилиты файла должно быть разрешение pf2. Полученный файл необходимо поместить в папку с темой (/boot/grub2/themes/rosa/).
В файле темы нужно указывать полное название шрифта и размер (например, "Droid Sans Mono Regular 11").
Числовое значение
Координаты и длины задаются числовыми значениями.
Можно задать числовое значение тремя способами:
- Аболютное значение - в пикселях (например, 340)
- Относительное значение - в процентах от ширины \ высоты родительского контейнера (или экрана, если родительский элемент - корневой). (например, 40%)
- Смешанное значение - смесь двух первых типов. (например, 50%-120)
Текстовая строка
Строка текста - набор символов, заключённый в двойные кавычки. (например, "Edit entry")
Логическое значение
Только два значения.
- true (верно, да, включено)
- false (неверно, нет, выключено)
Изображение
Абсолютный путь к файлу с изображением. Допустимые форматы: JPG, PNG, TGA; поддерживается прозрачность. (например, "/boot/grub2/themes/rosa/background.png")
Графическое оформление элемента
Для оформления фона элемента необходимо разрезать картинку фона на 9 частей:
северо-запад (nw) |
север (n) |
северо-восток (ne) |
запад (w) |
центр (c) |
восток (e) |
юго-запад (sw) |
юг (s) |
юго-восток (se) |
В скобках указано имя части. Для использования в теме необходимо каждый файл назвать по шаблону NAME_PART.EXT, где
- NAME - имя графического элемента, одинаковое для всех частей одного элемента (example)
- PART - имя части (sw)
- EXT - разрешение (png)
Таким образом, имя файла для данного примера (юго-западная часть элемента example) будет example_sw.png.
Центральная часть растягивается в качестве фона на всю область, занимаемую элементом, остальные части образуют "рамочку" вокруг центральной области.
Для того, чтобы понять, как масштабируются части нашего графического элемента, рассмотрим следующую таблицу:
не масштабируется | ↔ | не масштабируется |
↕ | горизонтально и вертикально | ↕ |
не масштабируется | ↔ | не масштабируется |
Если какая-то часть отсутствует, она заменяется пустой.
Файлы с частями необходимо поместить в директорию с темой.
Для использования графического элемента в теме, используем шаблон "example_*.png" (или "NAME_*.EXT" в более общем виде)
Ключевые файлы темы
- /etc/default/grub
- /boot/grub2/custom.cfg
- /boot/grub2/themes/rosa/theme.txt
Использование тем
Графическое меню 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).
Главный файл темы содержит только два типа конструкций:
- OPTION = VALUE
- + CONTAINER { ... }
Первая конструкция - объявление значения свойства внутри данного контейнера. Не должно объявляться дважды одно и то же свойство.
Вторая конструкция - начинается со знака "+", далее идёт тип контейнера и в фигурных скобках содержимое - свойства и\или другие контейнеры.
Строчки, начинающиеся с "#" - комментарии.
Допустима как запись
+ CONTAINER {OPTION_1 = VALUE_1 OPTION_2 = VALUE_2 ... OPTION_N = VALUE_N }
так и многострочная запись
+ CONTAINER { 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:
- __timeout__ На текущий момент id имеет особое значение для элементов типа progress_bar, circular_progress, label
Глобальные свойства
Глобальные свойства описываются в корневом элементе файла 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 | Оформление ползунка полосы прокрутки | Оформление | |
theme_dir | Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл theme.txt | Строка |
- Разработано Владимиром Тестовым, ROSA. Добавлено патчем. Отослано в апстрим.
Горизонтальный индикатор обратного отсчёта времени (progress_bar)
Отображение одноцветного или с наложенными текстурами горизонтального индикатора, который даёт графическое представление о времени, через которое выбранный пункт меню будет загружен.
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 | Изображение для горизонтального индикатора с наложенными текстурами. Если не указано, то отображается одноцветный горизонтальный индикатор. | Оформление | |
theme_dir | Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл theme.txt | Строка |
- * Необходимо придать id значение "__timeout__" для отображения оставшегося времени
- **@TIMEOUT_NOTIFICATION_SHORT@ для "Nс"
@TIMEOUT_NOTIFICATION_MIDDLE@ для "осталось Nс."
@TIMEOUT_NOTIFICATION_LONG@ для "Выделенный пункт будет выполнен автоматически через Nс."
где N - это оставшееся время в секундах.
Круговой индикатор обратного отсчёта времени (circular_progress)
Отображание кругового индикатора, который даёт графическое представление о времени, через которое выбранный пункт меню будет загружен.
circular_progress обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
num_ticks | Количество тактов для полного цикла | Числовое | 64 |
start_angle | Позиция первого такта (показываемого или убираемого) | Числовое | -64 |
ticks_disappear ? | Показывать или убирать такты. Установите на false для показывания тактов or true для убирания | Логическое | НЕ УКАЗАНО!!! |
center_bitmap | Изображение, показанное в центре кругового индикатора | Изображение | |
tick_bitmap | Изображение для отображения тактов | Изображение | |
theme_dir | Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл theme.txt | Строка |
- * Необходимо придать id значение "__timeout__" для отображения оставшегося времени
- ? Будет исправлено?
Строка (label)
Компонент 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 |
- * Необходимо придать id значение "__timeout__" для отображения оставшегося времени
- Будет отображено Nс, где N - это количество оставшегося времени в секундах.
- ** @KEYMAP_SHORT@ для "«enter»: загрузка, «e»: параметры, «c»: командная строка"
@KEYMAP_MIDDLE@ для "Нажмите «enter» для загрузки выбранной ОС, «e» для редактирования команд до загрузки или «c» для получения командной строки."
@KEYMAP_LONG@ для "Нажмите «enter» для загрузки выбранной ОС, «e» для редактирования команд до загрузки или «c» для получения командной строки. По ESC осуществляется возврат в предыдущее меню."
Изображение (image)
Компонент image выводит изображение на экран. Изображение масштабируется под размеры компонента. (свойства width и height)
image обладает всеми общими свойствами и, дополнительно:
свойство | описание | тип значения | по умолчанию |
file | Имя изображения | Изображение | |
theme_dir | Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл theme.txt | Строка |
Вертикальный контейнер (vbox)
Компонент vbox - это контейнерный компонент, который выводит другие компоненты внутри себя по вертикали, начиная сверху. Он выставляет ширину каждого компонента внутри себя равной ширине самого широкого компонента. Этот контейнер сохраняет высоты компонентов.
vbox обладает всеми общими свойствами за исключением width и height, которые игнорируются.
Горизонтальный контейнер (hbox)
Компонент hbox - это контейнерный компонент, который выводит другие компоненты внутри себя по горизонтали, начиная слева. Он выставляет высоту каждого компонента внутри себя равной высоте самого высокого компонента. Этот контейнер сохраняет ширины компонентов.
hbox обладает всеми общими свойствами за исключением width и height, которые игнорируются.
Канва (canvas)
Компонент canvas - это контейнерный компонент, который позволяет размещать другие компоненты согласно их собственным положениями и размерам. В отличие от vbox и hbox, он не изменяет размеры компонентов.
сanvas обладает всеми общими свойствами.
Опции /etc/default/grub, влияющие на тему
В файле /etc/default/grub есть несколько опций, напрямую связанных с темой Grub2. Опции задаются в виде OPTION=value, c начала строки, без пробелов, строки, начинающиеся со знака # - комментарии.
После любых изменений в /etc/default/grub необходимо выполнить update-grub2, чтобы применить эти изменения.
GRUB_GFXMODE
В этом параметре можно задать желаемое разрешение экрана при загрузке Grub2 и в теме Plymoth.
Структура опции: GRUB_GFXMODE=WIDTHxHEIGHT, где
- WIDTH - ширина экрана
- HEIGHT - высота экрана
Например,
GRUB_GFXMODE=1024x768
GRUB_THEME
В этой опции нужно указать полный путь к теме Grub2.
Структура опции: GRUB_THEME="FULL_PATH", где
- FULL_PATH - полный путь к файлу theme.txt выбранной темы.
Например,
GRUB_THEME="/boot/grub2/themes/rosa/theme.txt"
LANG и LANGUAGE
Для выбора локали Grub2, отличной от локали, выбранной в системе, стоит использовать данные опции.
Реккомендуется использовать одновременно обе опции с одинаковым параметром для полного перевода.
Структура опции LANG="xx_XX" и LANGUAGE="xx_XX", где
- xx_XX - выбранный язык, например, ru_RU
Например,
LANG=ru_RU LANGUAGE=ru_RU
GRUB_BACKGROUND
Чтобы задать фон консоли (непрозрачная картинка форматов PNG, JPG, TGA), необходимо прописать полный путь к файлу картинки в качестве параметра данной опции.
Структура опции: GRUB_BACKGROUND="FULL_PATH", где
- 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 |
Владимир Тестов, ROSA, 2013.