Grub2 theme 制作

恩,介绍一下怎么制作 grub2 theme。什么是 grub2 theme ? 我在 另一个帖子里 ](启动图形界面(grub2,plymouth,kdm,ksplash ) + 锁屏背景图片的修改) 已经讲过了。
简单的说就是你开机看到的第一个画面。我把制作好了的主题上传了。要用到的素材都在里面 mytheme.tar.gz (868 KB) 方便同学们实践。(好吧,我做的这个主题非常的难看。。。。就像我下面会说的,制作不难,设计才难,要不断的调整,随手做的基本上都不会太好看)

我们知道关于这个主题的全部内容都放在一个文件夹里,理论上这个文件夹可以在任何地方,只要在 /etc/default 中设置让 grub2 可以找到它就可以了。但一般的我们把它们集中放在 /boot/grub2/themes 这个文件夹里。这个文件夹里有什么呢?几个大的要素“图片” “字体” 和一份安排这些图片字体使其变得好看的配置文件。

好了下面我们一边做一边讲解。你也可以把默认的 openSUSE 主题复制到主文件夹下,对照着它看看究竟是怎么一回事。

首先,创建一个文件夹来存放主题,我们可以先把他放在主目录下,比如叫 mytheme,然后在这个文件夹中创建一个配置文件,随便起个名字比如就叫 theme.txt。然后我们就可以开始编辑它了。在编辑的过程中,我们可以逐步的添加自己想要的图片文件。

1.title-text
就是在 grub2 开始最上面的标题,可以省缺,比如 openSUSE 默认主题就是省缺的。它的位置是在上方的中间位置。我们随便写一个让你可以在完成
以后知道这个东西究竟在哪里,万一以后要用到。我们就这样写好了。

 title-text: " 欢迎来到 openSUSE"

2.desktop-image
就是背景图片了。随便取个名字比如 background.png ,然后你可以这样写

desktop-image: "background.png"

找一张喜欢的 png 图片改名为 background.png 放在这个 mytheme 文件夹下。现在我就随便从 google+ 上偷张图好了。你要自己做的时候一定要搭配好,比如和 plymouth 的图片是否统一,如果不统一切换过去看是否协调。

3.terminal-font
这个就是我们要使用的字体了。那么这些字体哪里来?可以用 grub2-mkfont 生成的或者从别的 grub2-theme 里复制。我们来用 grub2-mkfont 生成一个。先选择一个你喜欢的字体,可以去 /usr/share/fonts 文件夹下找,比如我选一个 /usr/share/fonts/truetype/wqy-microhei.ttc 然后就

sudo grub2-mkfont -s 14 -o ~/mytheme/wqy-microhei.pf2 -n wqy-microhei /usr/share/fonts/truetype/wqy-microhei.ttc

-o 用来制定输出的文件,文件名一般以 pf2 为后缀, -s 用来指定字体的大小, -n 用来制定字体的名字。更多的内容可以 man grub2-mkfont

好了,我们可以这样来使用这个字体

 terminal-font: "wqy-microhei"

我们还可以使用

title-color: "#FFFFFF"

来给字体设置颜色。关于颜色的选项可以参考 这篇文章 ](http://wiki.rosalab.ru/en/index.php/Grub2_theme_/_reference)

4.terminal-box

一般如果你不使用主题话你会发现中间给你选择的一些启动菜单是被一个框框框住的,那么这个就是来定义使用这些框框样式的,一般的你可以这样写

terminal-box: "inbox_*.png"

然后在文件夹中放置这样的一些文件

顾名思义就是 东、南、西、北、中、东南、西南、东北、西北这几个方位了。

在这里为了大家方便,我提供了一份在主题里,你们可以自己复制进去就好。

5.boot_menu

下面是重头戏,设计启动菜单的样子,这个大概是这样的。

+ boot_menu {
        left = 50%-300
        top = 50%-100
        width = 600
        height = 289
   
        selected_item_color = "#0000FF"
        selected_item_pixmap_style = "button_*.png"

        menu_pixmap_style = "inbox_*.png"

        item_padding = 20
       
        item_spacing = 20
        item_height = 30
}

好了,读图时代,我们一个通过图片来让大家来感受一下。

我们简单的这样写

+ boot_menu {
        left = 50%-300
        top = 50%-100
        width = 600
        height = 300
  
        selected_item_color = "#0000FF"
}

那么,他就是这样的


这个设置的就是,左边开始的地方,上边开始的地方,宽度,高度。还有被选择的文字的颜色

增加一点内容

+ boot_menu {
        left = 50%-300
        top = 50%-100
        width = 600
        height = 289
   
        selected_item_color = "#0000FF"
        selected_item_pixmap_style = "button_*.png"

        menu_pixmap_style = "inbox_*.png"

        item_padding = 20
       
        item_spacing = 20
        item_height = 30
}

注意这个 button 和上面所说的 inbox 的规则是一样一样的。关于其它参数的说明可以看下图:



怎么只有文字,当然我们可以用 icon 再追加下面内容

icon_width = 32
icon_height = 32
item_icon_space = 4

大概的示意图就是这样的


那么,怎么使用 icon 呢,你可以在 mytheme 文件夹下面创建一个 icon 文件,把发行版 logo 的 png 文件放进去,完了,把名字和 /etc/default/grub 文件中的 GRUB_DISTRIBUTOR 统一,比如默认的为 GRUB_DISTRIBUTOR=“openSUSE 13.1”

名字里有空格不方面,我们可以改名为 GRUB_DISTRIBUTOR=“openSUSE”,然后在 icon 文件夹里放一个 openSUSE.png 文件,系统就会找到它了,或者你吧 icon 里的 png 文件改成 openSUSE-13-1.png。用 - 代替空格和 “.”。这些 logo 可以去 默认的 openSUSE 主题文件夹里找,/boot/grub2/themes/openSUSE/icon 里有大多数主流发行版的 logo。如果你是多系统引导的话,可以使用 sudo os-prober 查看你的发行版在这里使用的名字,然后和 png 文件名统一。

6.progress_bar

就是开机时候会有一段时间的等待,让你来选择引导的选项。然后会有一个进度条。这个和上面的 boot_menu 差不多

+ progress_bar {
        left = 50%-300
        top = 50%+200
        width = 600
        height = 50
      
        id = "__timeout__"
        text = "@TIMEOUT_NOTIFICATION_LONG@"
      
        bar_style = "inbox_*.png"
        highlight_style = "progress_*.png"
}

关于 text 这段,就是进度条上显示的文字 @TIMEOUT_NOTIFICATION_LONG@ 表示他会显示自动倒计时的文字

它的几个选项是这样的。

7.circular_progress

就好比 win8 启动时那个不断转动的圈圈,其实就是两张图片的叠加。我们来看一个实例。

+ circular_progress {
        left = 50%-450
        top = 50%+310
        id = "__timeout__"
        width = 51
        height = 51
        center_bitmap = "center.png"
        tick_bitmap = "tick.png"
        num_ticks = 8
}

那个 center_bitmap=“center.png” 用来指定中间的图片,我使用了一个红色的圈圈,你可以使用 openSUSE 的 logo 试一试,正好也是圆的。那个 tick_bitmap=“tick.png” 则指定了绕着那个圈圈转的小点的样式。

8.label

就是标签啦,可以显示你想要显示的文字。比如

+ label {
        left = 50%-300
        top = 50%+220
        height = 30
        width = 600
      
        color = "white"
      
        align = "right"
      
        text = "Some text."
}

也可以显示动态的文字,比如像上面的进度条显示的一样。

+ label {
        left = 50%-350
        top = 50%+260
        height = 30
        width = 30
      
        id = "__timeout__"
      
        color = "white"
}

或者说一些固定的提示语

+ label {
        left = 50%-300
        top = 50%+220
        height = 30
        width = 600
      
        color = "cyan"
      
        align = "center"
      
        text = "@KEYMAP_SHORT@"
}

好了,就这样简单,我们自己的一个主题做好了。。。最后一步,把它复制到 /boot/grub2/themes 文件夹下,编辑 /etc/default/gurb 让 grub2 找到它。或者简单一点使用 YaST 的引导加载器。。。。现在你可以开始尝试一下你的新主题,恩,确实非常非常粗糙难看。。。

  1. 小结

好了,写了那么多有点乱。。。。我们来总结一下。。。
总的来说 grub2 themes 的配置文件写作是简单的。比较模糊的地方可以模仿别人的。比较难的是找到好的搭配图片。安排好合理的布局。
你去看默认的 openSUSE 主题,你会发现它非常的短,只用到了进度条和菜单。

配置文件主要就是那么几点。

a. 全局的设置:标题啊,字体啊,背景图片啊。关于字体,建议复制默认主题的。如果要自己生成的话可能需要反复调整好几次。。。像刚才那样随意的生成可能存在大小显示的问题。。。

b. 各个要素的安排,无非就是 boot_menu progress_bar circular_progress circular_progress label。他们的配置也非常的相似,最前面的都是安排他们的位置。其实影响美观的主要的也就是位置大小。还有前面说的各种图片。

好了,大概就是这样。

PS: 本文很大的参考了 这里 ](http://wiki.rosalab.ru/en/index.php/Grub2_theme_tutorial) 。用了很多它的素材,某种意义就是它的简化版,那边的跟详细一点,想深入的同学可以参考。
PS1: 大家有什么好的创意,比如设计的样式,欢迎分享。或者说有什么好看的图片非常适合做 grub2 背景的,也可以推荐。最最好的, 希望大家可以踊跃的分享自己的作品。
PS3:给自己挖一个坑,看能不能把 plymouth , kdm 和 ksplash 主题制作介绍都做出来,最后整理到 wiki。。。

2赞

学习了

这个教程太棒了,我记得我以前也自己制作过 GRUB 的界面,完全忘记了,哈哈!又可以学习了!

我下载了一个主题,把它解压然后放到/boot/grub2/themes/,又到YaST把主题文件改成这个文件夹下面的theme.txt,可是重启以后只看到背景图片
本来应该是这样的:



但是现在我只看到背景图片,右边的boot选项一个都没有,我只能盲选进入系统!
而且circular_progress那些一个都看不到。。。
下面是theme.txt:

# Designed for 1920x1020 resolution.

message-font: "Ubuntu Regular 16"
title-text: ""
terminal-font: "Calibri Regular 16"
desktop-image: "desktop.png"
terminal-box: "terminal_*.png"

+ boot_menu {  
   left = 1250
   width = 550
   top = 350
   height = 40%
   item_font = "Ubuntu Regular 40"
   item_color = "#231f20"
   selected_item_color= "#f08080"
   icon_width = 78
   icon_height = 80
   item_height = 80
   item_padding = 20
   item_icon_space = 40
   item_spacing = 20
   max_items_shown = 7
   scrollbar = false
}

+ circular_progress
{
   id = "__timeout__"
   left = 500
   width = 100
   top = 100
   height = 100
   num_ticks = 46
   ticks_disappear = true
   start_angle = -60
   center_bitmap = "centerQ.png"
   tick_bitmap = "startQ.png"
}


这是文件夹中的东西

#INSTALL INSTRUCTIONS
1) Run: sudo mkdir /usr/share/grub/themes (IF DONE SKIP TO TWO.)

2) Run: sudo cp --recursive ./surface /usr/share/grub/themes

3) Add the following line to /etc/default/grub:
   GRUB_THEME=/usr/share/grub/themes/surface/theme.txt

4) Make the repair title and icon for kernel repair.

   Open /etc/grub.d/10_linux and search for(towards bottom) for:
   echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)'
   Insert the following immediatly after:
   --class recovery --class repair
   (note: edit "Advanced options for %s" to "Repair")

5) Make the Secure Boot title and icon.

   Open etc/grub.d/30_uefi-firmware and search for(towards bottom) :
   menuentry '$LABEL'
   Insert the following immediatly after:
   --class secure --class recovery
   (note: edit '$Label' to "Secure Boot")

6) Make the Windows title and icon for Windows launch.

   Open etc/grub.d/25_custom and you will see the following:
   menuentry "Windows UEFI bkpbootmgfw.efi" { 
   search --fs-uuid --no-floppy --set=root BE36-A896 
   chainloader (${root})/EFI/Microsoft/Boot/bkpbootmgfw.efi 
   } 
   menuentry "Windows Boot UEFI loader" { 
   search --fs-uuid --no-floppy --set=root BE36-A896 
   chainloader (${root})/EFI/Boot/bkpbootx64.efi 
   }
   Delete one of the menuentry settings then insert after ":
   --class windows
   (note: edit title as desired.)

7) Run: sudo update-grub

这是作者给的安装介绍,不过这个主题本来是提供给Ubuntu的,所以路径不一样,但是按理来说是可以用的,都是GRUB2。
请问知道解决方法吗?

@AlienNum7

当然一个都没有了,因为你即没有 ubuntu 也没有 win,只有一个 openSUSE 单系统,他的选项里只有图片没有文字,他的 ubuntu 字样也是 icon 的一部分,你没有 设置好 icon 当然什么也显示不出来的啦。请仔细看我的教程。

简单的说,就是找一个 openSUSE 的 icon,最好和这个颜色搭,把名字改成 openSUSE-13-1.png ,丢到主题文件夹里的 icon 文件夹里,然后在升级 gurb2 。

我是仔细看过你的教程之后才回复这帖的~
我已经找了 icon,而且连分辨率我也自己调整过,文件名也是匹配的,也 update 了 grub2,但就是进到引导界面只看到背景图片,其他甚至连一个文字都看不见,也没有引导选项,但其实是存在的,因为我直接按回车就能继续引导。
问题是那些引导项的字体哪里去了,图标为什么会没显示?

后来我还特地换回初始的 grub2 主题,就是绿蜥蜴的那个,然后图片名称也改好了配对好了,重启以后还是没有图标显示(但起码能显示引导项,没有丢失文字)。

不明觉厉,标记备用

请把主题的下载地址贴出来。我试一试。

绿蜥蜴的那个是可以显示图标的。只是绿蜥蜴的图标是绿色的。会被选中的横条遮挡。