Тема Grub2 / синтаксис

Материал из Rosalab Wiki
Версия от 15:35, 25 февраля 2013; Vladimir.testov (обсуждение | вклад) (Структура главного файла)

Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

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 терминала не задан, то общий фон считается чёрным.

  • 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" в более общем виде)

Ключевые файлы темы

  1. /etc/default/grub
  2. /boot/grub2/custom.cfg
  3. /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
  • OPTION = VALUE
  • + COMPONENT { ... }

Первая конструкция - объявление значения глобального свойства. Не должно объявляться дважды одно и то же свойство.
Вторая конструкция - объявление значения свойства внутри элементов. Не должно объявляться дважды одно и то же свойство в пределах одного элемента.
Третья конструкция - начинается со знака "+", далее идёт тип компонента и в фигурных скобках содержимое - свойства и\или другие компоненты.
Строчки, начинающиеся с "#" - комментарии.
Допустима как запись

+ 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:

__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 описывает графический стиль меню загрузки. Этот компонент обязательно должен быть включён в основной файл темы.
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.