入門準備與設定流程 (How to Begin)
了解 GRUB2 主題檔案結構、設定檔修改與開機引導程式更新機制。
當我們想要為 GRUB2 打造自訂主題時,必須建立標準目錄結構,並告訴系統主題組態檔案的絕對路徑。以下是完整的標準建立步驟:
theme.txt。GRUB2 在每次開機時都會重新解析此檔案,因此修改 theme.txt 內容無需重新執行更新指令即可在重開機時生效;但如果變更了 /etc/default/grub 中的主題路徑,則必須執行更新指令以重新產生 grub.cfg。
1. 建立主題目錄與設定檔
建議將新主題放置於 /boot/grub2/themes/(或某些發行版的 /boot/grub/themes/)目錄下:
# 建立主題目錄
sudo mkdir -p /boot/grub2/themes/my_theme/
# 建立核心主題檔案 theme.txt
sudo touch /boot/grub2/themes/my_theme/theme.txt
2. 修改 /etc/default/grub 設定檔
在 /etc/default/grub 檔案中指定 GRUB_THEME 變數為主題設定檔的完整路徑:
# 指定 GRUB2 主題檔案之絕對路徑(注意:同一個參數不可重複出現多次)
GRUB_THEME="/boot/grub2/themes/my_theme/theme.txt"
3. 重新產生開機設定檔 (update-grub2)
變更 /etc/default/grub 後,必須重新產生引導組態 /boot/grub2/grub.cfg:
# 若系統具備 update-grub2 腳本(需 root 權限):
sudo update-grub2
# 若系統沒有 update-grub2,則執行標準指令:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
核心概念與九宮格切片原理 (Common Conceptions & 9-Slice)
掌握 GRUB2 支援之元件種類,以及關鍵的 9 區域切片(9-Slice / 9-Zones)伸縮機制。
GRUB2 預定義元素類型 (Types of Elements)
| 元件名稱 | 說明 | 特點與限制 |
|---|---|---|
root |
最頂層容器(擴展自 Canvas) | 全螢幕尺寸,用來設定背景、全域字型、標題及控制台裝飾。 |
boot_menu |
開機作業系統選單 | 核心元件,具備選中高亮框、圖標、字型配色與自訂滾動條。 |
progress_bar |
水平倒數進度條 | 支援單色填色與圖形切片模式,可顯示剩餘秒數權杖。 |
circular_progress |
環形倒數計時指示器 | 以環狀排列刻度(Ticks)展示剩餘時間,支援自訂旋轉角度。 |
label |
單行文字標籤 | 輸出文字,無自動換行機制,若長度超過寬度會自動拉長。 |
image |
靜態圖片 | 輸出 PNG 圖片,預設尺寸為圖片原始大小,可設定拉伸。 |
vbox / hbox |
垂直 / 水平排列容器 | 自動依序堆疊子元素,並將次軸尺寸統一重設為最大子元素尺寸。 |
canvas |
相對座標自由畫布容器 | 子元素採相對座標,子元素以逆序(Reverse Order)繪製。 |
九宮格圖形切片(9-Slice Scaling)原理
在 GRUB2 中,所有具有邊框裝飾的元素(例如按鈕 button_*.png、選單框 menu_*.png、控制台外框 inbox_*.png)都採用 9 個區域(Zones) 拼接:
| 分區類別 | 涵蓋切片 | 縮放行為 | 尺寸約束 |
|---|---|---|---|
| 四角區 | NW NE SW SE |
固定原始像素 絕對不拉伸、保證剛性圓角 |
W, H 固定 |
| 南北邊界 | N S |
水平單向延展 寬度隨容器伸展,厚度鎖定 |
H = HNW |
| 東西邊界 | W E |
垂直單向延展 高度隨容器伸展,厚度鎖定 |
W = WNW |
| 中央核心 | Center |
雙向平鋪延展 水平與垂直平鋪填滿剩餘空間 |
自動填滿 |
根元素與全域設定 (Root Canvas & Global Options)
掌握 theme.txt 的頂層設定與最容易犯錯的語法分隔符號規則。
| 設定層級 | 單詞連接符號 | 鍵值指派符號 | ✓ 正確標準語法 | ✕ 常見致命錯誤 (報錯/無效) |
|---|---|---|---|---|
|
全域選項 (Global) 如背景、標題、全域字型 |
- 減號 (Hyphen) | : 冒號 (Colon) |
title-text: "GNU Grub"desktop-image: "bg.png"
|
title_text = "GNU Grub"⚠️ 引擎無視該行,背景/標題遺失 |
|
組件屬性 (Component) 如 boot_menu, progress_bar |
_ 底線 (Underscore) | = 等號 (Equals) |
item_height = 30selected_item_color = "#fff"
|
item-height: 30⚠️ 組件解析中斷,排版錯位破版 |
title-text: ...);「內層組件底線接、等號分」(item_height = ...)。這是 90% 主題新手最容易踩中導致外觀失效的隱形陷阱!
| 全域選項名稱 | 預設與功能說明 | 渲染特性與重要限制 |
|---|---|---|
desktop-image |
背景圖片路徑(如 "background.png") |
自動拉伸填滿螢幕。若設定了此屬性,則 desktop-color 將被忽略。 |
desktop-color |
單色背景色值(如 "#000000") |
僅在未指定 desktop-image 時生效。 |
title-text |
標題文字(如 "GNU GRUB") |
永遠置中對齊。文字基線(Baseline)位置固定於 40 + ascent 像素處。設為 "" 可隱藏。 |
terminal-box |
終端機控制台邊框切片(如 "inbox_*.png") |
繪製於控制台矩形外側(OUTSIDE),並於內側中央預留 3px 的內縮邊距(padding)。 |
terminal-font |
終端機文字字型 | 新增字型至主題目錄後,需執行 update-grub2。 |
水平倒數進度條 (progress_bar)
單色填色模式、九宮格切片模式以及隱藏外框之星號技巧。
progress_bar 元件專門用來視覺化倒數剩餘時間。若要啟用倒數連動,必須將其 id 設定為特殊常數 __timeout__。
環形倒數進度條 (circular_progress) 與 Parrots 鸚鵡角
揭密 GRUB2 獨創的 256 鸚鵡度量單位、起始角度與消失模式。
環形指示器透過在圓周圍繪製一圈刻度圖片(tick_bitmap)並環繞中心背景圖片(center_bitmap)來展示倒數。這其中有幾個極為特殊的渲染限制:
tick_bitmap)不支援旋轉與縮放,且角度以整數 parrots 步進,建議將 num_ticks 設為 2 的次方(如 8 或 16),刻度才能精確坐落於整數點位,達成絕對軸對稱。
若啟用
ticks_disappear = "True",刻度將逐個消逝;若為預設,則隨時間遞增累積至缺 1 滿圓。
容器排版與逆序繪製 (vbox, hbox, canvas)
理解彈性排版容器行為,以及 Canvas 極具顛覆性的繪製順序機制。
在
canvas(包含根畫布 root)中,子元素的繪製順序與一般的 HTML / CSS 恰恰相反!如果在 theme.txt 中,元素 A 寫在元素 B 之前,則 GRUB2 會先畫 B,再畫 A(亦即 A 會覆蓋在 B 之上)!
通用繪製特性與座標容錯機制 (Common Features)
了解繪製邊界、無效數值修復公式與缺字自動回退(Fallback)。
1. 座標越界與數值自動修復演算法
當我們在 theme.txt 中設定的座標或尺寸超出父容器範圍時,GRUB2 引擎會依循以下防呆修復規則(令父容器寬高為 parent_width 與 parent_height):
💡 實用技巧:這項特性可以善用在多螢幕解析度自適應上,讓右緣或底緣自動對齊父容器或螢幕邊界!
2. 字型符號回退替換機制 (Fallback)
若在 theme.txt 中指定的字型未找到,或該字型缺少某些特定字元(例如終端機邊框符號、特殊符號),GRUB2 會自動從主題目錄中存在的其他字型中挑選最適合的符號補上。
因此,若在螢幕上看到邊框變成問號(?)或虛線,即代表當前字型缺少該字元,需補充適當的字型檔。
字型轉換指南 (Font Creation with grub2-mkfont)
將 TTF / OTF 轉換為 GRUB2 專用 .pf2 格式,調整基線與 Ascent / Descent。
GRUB2 無法直接讀取標準 TrueType 字型,必須透過官方工具 grub2-mkfont 轉為專屬的點陣字型格式 .pf2。
GRUB2 不支援字距微調(Kerning)。
外部關鍵設定與環境變數 (Outside theme.txt)
掌握 /etc/default/grub 核心控制參數與語言環境設定。
| 參數名稱 | 設定檔案 | 作用與注意事項 |
|---|---|---|
GRUB_THEME |
/etc/default/grub |
指定 theme.txt 之絕對路徑。必須確保同個檔案中無重複定義。 |
GRUB_BACKGROUND |
/etc/default/grub |
控制台終端機的背景圖片路徑。該圖片必須為不透明格式(若有透明度將無法正常顯示)。 |
LANG 與 LANGUAGE |
/etc/default/grub |
若需變更開機引導程式之語言,這兩個參數必須同時設定為完全相同的值!例如:LANG="zh_TW.UTF-8" 與 LANGUAGE="zh_TW.UTF-8"。
|
theme.txt 智慧語法校驗與錯誤診斷 (Syntax Linter & Validator)
即時靜態語法解析,精確揪出全域/組件符號顛倒、高度公式違背、括號缺失與切片約束衝突。
GRUB2 開機引導程式的設定檔解析器極度嚴苛。只要一個全域選項誤用了等號 =,或選單高度未依據官方精確公式計算,就可能導致開機畫面直接黑屏、破圖或退回文字救援模式。
本校驗器在瀏覽器前端進行深度靜態語法健檢,支援即時分析錯誤行號、違規原因並提供精準的綠色修復代碼建議。
GRUB2 完整開機模擬器與 theme.txt 產生器
整合全篇知識的實體開機螢幕!支援鍵盤 ↑ / ↓ 方向鍵操作切換、倒數計時連動與一鍵產生代碼。
# 點擊上方「一鍵產生標準 theme.txt」以查看由本系統產生的規範化設定檔...



































