Тема Grub2 / синтаксис — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Удалено содержимое страницы)
Строка 1: Строка 1:
 +
<span style="font-size: 300%">'''Grub2 2.00'''</span>
 +
<br>
 +
Передо мной была поставлена задача реализовать тему для Grub2 на основе эскизов, разработанных дизайнером. Первое, что я сделал - это нашёл в сети документы и справочный материал по возможностям графического оформления Grub2. Оказалось, что таких статей много, но все они неполные, устаревшие и частично неверные.<br>
 +
После я прочёл исходный код Grub2, связанный с графическим оформлением, добавил новую опцию и, попутно, исправил ошибку (оба патча отосланы в апстрим и приняты).<br>
 +
Данная статья аккумулирует в себе всю информацию по синтаксису темы Grub2 версии 2.00<br>
  
 +
= Типы данных =
 +
== Цвет в консоли ==
 +
 +
Цвета текста консоли можно задать в файле /boot/grub2/custom.cfg <br>
 +
Синтаксис файла:
 +
color_normal=text-color/bg-color
 +
menu_color_normal=text-color/bg-color
 +
menu_color_highlight=text-color/bg-color
 +
где "text-color" и "bg-color" - цвета для текста и фона текста из [[#colors_console|набора цветов]].<br>
 +
Важно отметить, что "black" в качестве цвета фона - это "прозрачный" цвет. Если общий фон [[#grub_background|GRUB_BACKGROUND]] терминала не задан, то общий фон считается чёрным. <br>
 +
* color_normal - цвет обычного текста консоли <br>
 +
* menu_color_normal - цвет неактивных пунктов и рамки меню загрузки (в случае, если графическая оболочка Grub2 не загрузилась. Например, если есть фактическая ошибка в файле темы). <br>
 +
* menu_color_highlight - цвет активного пункта меню загрузки.
 +
<br>
 +
 +
== Цвет в теме ==
 +
 +
В файле темы цвет можно описать тремя способами:
 +
* Стиль HTML. Формат "#RRGGBB" или "#RGB", где R, G, B - шестнадцатеричные цифры. (например, "#D4E0EC")
 +
* Значения RGB, разделённые запятой. "(127,127,255)"
 +
* Имена цветов [http://www.w3.org/TR/css3-color/#svg-color SVG 1.0]. Например, cornflowerblue. Указываются в нижнем регистре.
 +
<br>
 +
 +
== Шрифт ==
 +
 +
Grub2 использует собственный [http://grub.gibibit.com/New_font_format формат шрифтов PFF2]. Необходимо использовать утилиту grub-mkfont для конвертации шрифтов одного из форматов BDF, PCF, TTF в формат, понятный для Grub2. У полученного с помощью утилиты файла должно быть разрешение pf2. Полученный файл необходимо поместить в папку с темой (/boot/grub2/themes/rosa/).<br>
 +
В файле темы нужно указывать полное название шрифта и размер (например, "Droid Sans Mono Regular 11").<br>
 +
<br>
 +
 +
== Числовое значение ==
 +
 +
Координаты и длины задаются числовыми значениями.<br>
 +
Можно задать числовое значение тремя способами:
 +
* Аболютное значение - в пикселях (например, 340)
 +
* Относительное значение - в процентах от ширины \ высоты экрана. (например, 40%)
 +
* Смешанное значение - смесь двух первых типов. (например, 50%-120)
 +
<br>
 +
 +
== Текстовая строка ==
 +
 +
Строка текста - набор символов, заключённый в двойные кавычки. (например, "Edit entry")<br>
 +
<br>
 +
 +
== Логическое значение ==
 +
 +
Только два значения.
 +
* true (верно, да, включено)
 +
* false (неверно, нет, выключено)
 +
<br>
 +
 +
== Изображение ==
 +
 +
Абсолютный путь к файлу с изображением. Допустимые форматы: JPG, PNG, TGA; поддерживается прозрачность. (например, "/boot/grub2/themes/rosa/background.png")<br>
 +
<br>
 +
 +
== Графическое оформление элемента ==
 +
 +
Для оформления фона элемента необходимо разрезать картинку фона на 9 частей:
 +
{| class="wikitable" border="1"
 +
| северо-запад<br>(nw) || север<br>(n) || северо-восток<br>(ne)
 +
|-
 +
| запад<br>(w) || центр<br>(c) || восток<br>(e)
 +
|-
 +
| юго-запад<br>(sw) || юг<br>(s) || юго-восток<br>(se)
 +
|}
 +
В скобках указано имя части. Для использования в теме необходимо каждый файл назвать по шаблону NAME_PART.EXT, где
 +
* NAME - имя графического элемента, одинаковое для всех частей одного элемента (example)
 +
* PART - имя части (sw)
 +
* EXT - разрешение (png)
 +
Таким образом, имя файла для данного примера (юго-западная часть элемента example) будет example_sw.png.<br>
 +
Центральная часть растягивается в качестве фона на всю область, занимаемую элементом, остальные части образуют "рамочку" вокруг центральной области.<br>
 +
Для того, чтобы понять, как масштабируются части нашего графического элемента, рассмотрим следующую таблицу:
 +
 +
{| class="wikitable" border="1" style="text-align: center;"
 +
| не масштабируется || ↔ || не масштабируется
 +
|-
 +
| ↕ || горизонтально и вертикально || ↕
 +
|-
 +
| не масштабируется || ↔ || не масштабируется
 +
|}
 +
Если какая-то часть отсутствует, она заменяется пустой.<br>
 +
Файлы с частями необходимо поместить в директорию с темой.<br>
 +
Для использования графического элемента в теме, используем шаблон "example_*.png" (или "NAME_*.EXT" в более общем виде)<br>
 +
<br>
 +
 +
= Ключевые файлы темы =
 +
 +
# /etc/default/grub
 +
# /boot/grub2/custom.cfg
 +
# /boot/grub2/themes/rosa/theme.txt
 +
<br>
 +
 +
= Использование тем =
 +
 +
Графическое меню Grub2 может быть изменено посредством использования темы.<br>
 +
Для этого нужно в директории /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.
 +
<br><br>
 +
 +
==Структура главного файла==
 +
 +
Тема Grub2 может содержать разнообразные элементы - изображения, строки, индикаторы обратного отсчёта времени, графические оформления элементов, меню загрузки. Также могут содержаться специальные элементы - контейнеры. Они содержат другие элементы. Корневой элемент - на самом деле частный случай элемента канва (''canvas''). Контейнеры могут содержать другие контейнеры.<br>
 +
Компоненты и их свойства описываются в обычном текстовом файле (theme.txt).<br>
 +
Главный файл темы содержит только два типа конструкций:
 +
* OPTION = VALUE
 +
* + CONTAINER { ... }
 +
Первая конструкция - объявление значения свойства внутри данного контейнера. Не должно объявляться дважды одно и то же свойство.<br>
 +
Вторая конструкция - начинается со знака "+", далее идёт тип контейнера и в фигурных скобках содержимое - свойства и\или другие контейнеры.<br>
 +
Строчки, начинающиеся с "#" - комментарии.<br>
 +
Допустима как запись
 +
+ 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"
 +
означают одно и то же.
 +
<br><br>
 +
 +
==<span id="common_options">Общие свойства для всех объектов</span>==
 +
 +
Эти свойства применимы ко всем элементам (когда не указано обратное).<br>
 +
Отсчёт идёт, как обычно, от левого верхнего угла.
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| left || Позиция левого края элемента || Числовое ||
 +
|-
 +
| top || Позиция верхнего края элемента || Числовое ||
 +
|-
 +
| width || Ширина элемента || Числовое ||
 +
|-
 +
| height || Высота элемента || Числовое ||
 +
|-
 +
| id || Идентификатор элемента || Строка ||
 +
|}
 +
'''id''' Идентификатор компонента может быть любой текстовой строкой. ID может быть использовано скриптами для обращения к определённым компонентам в дереве компонент GUI. На текущий момент, есть только одно значение ID, опознаваемое Grub2:
 +
:'''__timeout__''' На текущий момент '''id''' имеет особое значение для элементов типа ''[[#progress_bar_options | progress_bar]]'', ''[[#circular_progress_options | circular_progress]]'', ''[[#label_options | label]]''
 +
<br>
 +
 +
==<span id="global_options">Глобальные свойства</span>==
 +
Глобальные свойства описываются в корневом элементе файла ''theme.txt''<br>
 +
Этот элемент на самом деле экземпляр [[#canvas_options | ''canvas'']] с дополнительными опциями:<br>
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| 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 || Цвет фона, если не указано <br>фоновое изображение || Цвет || white
 +
|-
 +
| terminal-box || Оформление консоли || Оформление || Чёрный прямоугольник
 +
|-
 +
| terminal-font || Шрифт консоли || Имя шрифта || Fixed 10
 +
|}
 +
<br>
 +
 +
==<span id="boot_menu_options">Меню загрузки (boot_menu)</span>==
 +
''boot_menu'' описывает графический стиль меню загрузки. Этот компонент обязательно должен быть включён в основной файл темы.<br>
 +
''boot_menu'' обладает всеми [[#common_options | общими свойствами]] и, дополнительно:
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| visible || Показать или спрятать меню загрузки || Логическое || true
 +
|-
 +
| menu_pixmap_style || Оформление меню загрузки || Оформление ||
 +
|-
 +
| item_font || Шрифт пунктов меню || Имя шрифта || Unknown Regular 16
 +
|-
 +
| item_color || Цвет пунктов меню || Цвет || black
 +
|-
 +
| item_pixmap_style<sup>'''[[#boot_menu_star1 | *]]'''</sup> || Оформление неактивных пунктов меню || Оформление ||
 +
|-
 +
| 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'' || Строка ||
 +
|}
 +
:<sup>'''<span id="boot_menu_star1">*</span>'''</sup> Разработано Владимиром Тестовым, ROSA. Добавлено патчем. Отослано в апстрим.
 +
<br>
 +
 +
==<span id="progress_bar_options">Горизонтальный индикатор обратного отсчёта времени (progress_bar)</span>==
 +
Отображение одноцветного или с наложенными текстурами горизонтального индикатора, который даёт графическое представление о времени, через которое выбранный пункт меню будет загружен.<br>
 +
''progress_bar'' обладает всеми [[#common_options | общими свойствами]] и, дополнительно:
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| visible || Показать или спрятать горизонтальный индикатор || Логическое || true
 +
|-
 +
| bg_color || Цвет фона одноцветного горизонтального индикатора || Цвет || "128, 128, 128"
 +
|-
 +
| fg_color || Цвет одноцветного горизонтального индикатора || Цвет || "200, 200, 200"
 +
|-
 +
| border_color || Цвет рамки одноцветного горизонтального индикатора || Цвет || black
 +
|-
 +
| text || Текст, показанный на горизонтальном индикаторе. Возможные значения: <br>@TIMEOUT_NOTIFICATION_SHORT@ <br>@TIMEOUT_NOTIFICATION_MIDDLE@ <br>@TIMEOUT_NOTIFICATION_LONG@, или<br>любая допустимая строка [[#progress_bar_modes | '''**''']] || Строка ||
 +
|-
 +
| text_color || Цвет шрифта || Цвет || black
 +
|-
 +
| font || Используемые шрифт || Имя шрифта || Unknown Regular 16
 +
|-
 +
| bar_style || Фоновое изображение для горизонтального индикатора с наложенными текстурами. Если не указано, то отображается одноцветный горизонтальный индикатор. || Оформление ||
 +
|-
 +
| highlight_style || Изображение для горизонтального индикатора с наложенными текстурами. Если не указано, то отображается одноцветный горизонтальный индикатор. || Оформление ||
 +
|-
 +
| theme_dir || Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл ''theme.txt'' || Строка ||
 +
|}
 +
:'''*''' Необходимо придать id значение "__timeout__" для отображения оставшегося времени
 +
:'''<span id="progress_bar_modes">**</span>'''@TIMEOUT_NOTIFICATION_SHORT@ для "''N''с"<br>@TIMEOUT_NOTIFICATION_MIDDLE@ для "осталось ''N''с." <br>@TIMEOUT_NOTIFICATION_LONG@ для "Выделенный пункт будет выполнен автоматически через ''N''с."<br> где ''N'' - это оставшееся время в секундах.
 +
<br>
 +
 +
==<span id="circular_progress_options">Круговой индикатор обратного отсчёта времени (circular_progress)</span>==
 +
Отображание кругового индикатора, который даёт графическое представление о времени, через которое выбранный пункт меню будет загружен.<br>
 +
''circular_progress'' обладает всеми [[#common_options | общими свойствами]] и, дополнительно:
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| num_ticks || Количество тактов для полного цикла || Числовое || 64
 +
|-
 +
| start_angle || Позиция первого такта (показываемого или убираемого) || Числовое ||-64
 +
|-
 +
| ticks_disappear <sup>'''[[#circular_progress_strange | ?]]'''</sup> || Показывать или убирать такты. Установите на ''false'' для показывания тактов or ''true'' для убирания || Логическое || НЕ УКАЗАНО!!!
 +
|-
 +
| center_bitmap || Изображение, показанное в центре кругового индикатора || Изображение ||
 +
|-
 +
| tick_bitmap || Изображение для отображения тактов || Изображение ||
 +
|-
 +
| theme_dir || Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл ''theme.txt'' || Строка ||
 +
|}
 +
:'''*''' Необходимо придать id значение "__timeout__" для отображения оставшегося времени
 +
:<span id="circular_progress_strange"><sup>'''?'''</sup></span> Будет исправлено?
 +
<br>
 +
 +
==<span id="label_options">Строка (label)</span>==
 +
Компонент ''label'' отображает одну строчку текста на экране.<br>
 +
''label'' обладает всеми [[#common_options | общими свойствами]] и, дополнительно:
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| text || Text to display. Possible values are: <br>@KEYMAP_SHORT@ <br>@KEYMAP_MIDDLE@ <br>@KEYMAP_LONG@, or<br>any valid string [[#label_modes | '''**''']] || Строка ||
 +
|-
 +
| font || Используемый шрифт || Имя шрифта || Unknown Regular 16
 +
|-
 +
| color || Цвет шрифта || Цвет || black
 +
|-
 +
| align || Горизонтальное выравнивание текста. Возможные значения: ''left'' (от левого края), ''center'' (по центру) или ''right'' (от правого края) || Строка || left
 +
|}
 +
:'''*''' Необходимо придать id значение "__timeout__" для отображения оставшегося времени
 +
:Будет отображено ''N''с, где ''N'' - это количество оставшегося времени в секундах.
 +
:'''<span id="label_modes">**</span>''' @KEYMAP_SHORT@ для "«enter»: загрузка, «e»: параметры, «c»: командная строка"<br> @KEYMAP_MIDDLE@ для "Нажмите «enter» для загрузки выбранной ОС, «e» для редактирования команд до загрузки или «c» для получения командной строки."<br> @KEYMAP_LONG@ для "Нажмите «enter» для загрузки выбранной ОС, «e» для редактирования команд до загрузки или «c» для получения командной строки. По ESC осуществляется возврат в предыдущее меню."
 +
 +
<br>
 +
 +
==<span id="image_options">Изображение (image)</span>==
 +
Компонент ''image'' выводит изображение на экран. Изображение масштабируется под размеры компонента. (свойства ''width'' и ''height'')<br>
 +
''image'' обладает всеми [[#common_options | общими свойствами]] и, дополнительно:
 +
{| class="wikitable" border="1"
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| свойство || описание || тип значения || по умолчанию
 +
|-
 +
| file || Имя изображения || Строка ||
 +
|-
 +
| theme_dir || Полный путь к директории с необходимыми текстурами. По умолчанию это та же директория, где находится файл ''theme.txt'' || Строка ||
 +
|}
 +
<br>
 +
 +
==<span id="vbox_options">Вертикальный контейнер (vbox)</span>==
 +
Компонент ''vbox'' - это контейнерный компонент, который выводит другие компоненты внутри себя по вертикали, начиная сверху. Он выставляет ширину каждого компонента внутри себя равной ширине самого широкого компонента. Этот контейнер сохраняет высоты компонентов.<br>
 +
''vbox'' обладает всеми [[#common_options | общими свойствами]] за исключением ''width'' и ''height'', которые игнорируются.
 +
<br><br>
 +
 +
==<span id="hbox_options">Горизонтальный контейнер (hbox)</span>==
 +
Компонент ''hbox'' - это контейнерный компонент, который выводит другие компоненты внутри себя по горизонтали, начиная слева. Он выставляет высоту каждого компонента внутри себя равной высоте самого высокого компонента. Этот контейнер сохраняет ширины компонентов.<br>
 +
''hbox'' обладает всеми [[#common_options | общими свойствами]] за исключением ''width'' и ''height'', которые игнорируются.
 +
<br><br>
 +
 +
==<span id="canvas_options">Канва (canvas)</span>==
 +
Компонент ''canvas'' - это контейнерный компонент, который позволяет размещать другие компоненты согласно их собственным положениями и размерам. В отличие от ''vbox'' и ''hbox'', он не изменяет размеры компонентов.<br>
 +
''сanvas'' обладает всеми [[#common_options | общими свойствами]].
 +
<br><br>
 +
 +
= Опции /etc/default/grub, влияющие на тему =
 +
В файле /etc/default/grub есть несколько опций, напрямую связанных с темой Grub2. Опции задаются в виде OPTION=value, c начала строки, без пробелов, строки, начинающиеся со знака '''#''' - комментарии.<br>
 +
После любых изменений в /etc/default/grub необходимо выполнить update-grub2, чтобы применить эти изменения.<br>
 +
<br>
 +
==GRUB_GFXMODE==
 +
В этом параметре можно задать желаемое разрешение экрана при загрузке Grub2 и в теме Plymoth.<br>
 +
Структура опции: GRUB_GFXMODE=WIDTHxHEIGHT, где
 +
*WIDTH - ширина экрана
 +
*HEIGHT - высота экрана
 +
Например,
 +
GRUB_GFXMODE=1024x768
 +
<br>
 +
==GRUB_THEME==
 +
В этой опции нужно указать полный путь к теме Grub2.<br>
 +
Структура опции: GRUB_THEME="FULL_PATH", где
 +
*FULL_PATH - полный путь к файлу ''theme.txt'' выбранной темы.
 +
Например,
 +
GRUB_THEME="/boot/grub2/themes/rosa/theme.txt"
 +
<br>
 +
 +
==LANG и LANGUAGE==
 +
Для выбора локали Grub2, отличной от локали, выбранной в системе, стоит использовать данные опции.<br>
 +
Реккомендуется использовать одновременно обе опции с одинаковым параметром для полного перевода.<br>
 +
Структура опции LANG="xx_XX" и LANGUAGE="xx_XX", где
 +
*xx_XX - выбранный язык, например, ru_RU<br>
 +
Например,
 +
LANG=ru_RU
 +
LANGUAGE=ru_RU
 +
<br>
 +
 +
==<span id="grub_background">GRUB_BACKGROUND</span>==
 +
Чтобы задать фон консоли (непрозрачная картинка форматов PNG, JPG, TGA), необходимо прописать полный путь к файлу картинки в качестве параметра данной опции.<br>
 +
Структура опции: GRUB_BACKGROUND="FULL_PATH", где
 +
*FULL_PATH - полный путь до файла картинки.
 +
Например,
 +
GRUB_BACKGROUND="/boot/grub2/themes/rosa/terminal_background.png"
 +
<br>
 +
 +
= <span id="colors_console"> Приложение А. Таблица цветов консоли. </span>=
 +
{| class="wikitable" border="1"
 +
|+ Цвета консоли
 +
|- style="background:#7ebeec; color:black;font-weight: bold; text-align: center;"
 +
| символ || имя цвета || значение
 +
|-
 +
| 0 || black ||  bgcolor="#000000" | <span style="color:#ffffff"> #000000 </span>
 +
|-
 +
| 1 || blue || bgcolor="#0000a8" | <span style="color:#ffffff"> #0000a8 </span>
 +
|-
 +
| 2 || green || bgcolor="#00a800" | <span style="color:#ffffff"> #00a800 </span>
 +
|-
 +
| 3 || cyan || bgcolor="#00a8a8" | <span style="color:#ffffff"> #00a8a8 </span>
 +
|-
 +
| 4 || red || bgcolor="#a80000" | <span style="color:#ffffff"> #a80000 </span>
 +
|-
 +
| 5 || magenta || bgcolor="#a800a8" | <span style="color:#ffffff"> #a800a8 </span>
 +
|-
 +
| 6 || brown || bgcolor="#a85400" | <span style="color:#ffffff"> #a85400 </span>
 +
|-
 +
| 7 || light-gray || bgcolor="#a8a8a8" | <span style="color:#000000"> #a8a8a8 </span>
 +
|-
 +
| 8 || dark-gray || bgcolor="#545454" | <span style="color:#ffffff"> #545454 </span>
 +
|-
 +
| 9 || light-blue || bgcolor="#5454fe" | <span style="color:#ffffff"> #5454fe </span>
 +
|-
 +
| A || light-green || bgcolor="#54fe54" | <span style="color:#000000"> #54fe54 </span>
 +
|-
 +
| B || light-cyan || bgcolor="#54fefe" | <span style="color:#000000"> #54fefe </span>
 +
|-
 +
| C || light-red || bgcolor="#fe5454" | <span style="color:#000000"> #fe5454 </span>
 +
|-
 +
| D || light-magenta || bgcolor="#fe54fe" | <span style="color:#000000"> #fe54fe </span>
 +
|-
 +
| E || yellow || bgcolor="#fefe54" | <span style="color:#000000"> #fefe54 </span>
 +
|-
 +
| F || white || bgcolor="#fefefe" | <span style="color:#000000"> #fefefe </span>
 +
|}
 +
<br><br>
 +
Владимир Тестов, ROSA, 2012.

Версия 13:00, 27 декабря 2012

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