GRUB4DOS的Gfxboot核心扩展
bean发布gfxboot-3.3-custom后,出现了GfxMenuInstaller、MsgDiyer、GfxMenu_Tools等基于bean编译init核心的gfxmenu定制应用。核心编程方面目前只有ded发布了一个自己编译的init和RIPPER-GFX with GUI,但它放弃了传统的gfxboot.cfg,而从menu.lst读入定制参数,这不是我所需要的。但很有意思,可以了解一下。本核心扩展主要针对timeout提供了四种图形呈现:数字倒计时、水平进度条、时钟和环形点倒计时。定制参数沿用gfxboot.cfg的方式,以保证尽可能的兼容现有的应用。源码和ded同样是基于gfxboot-3.3-custom的。因为openSUSE的源码,就timeout.inc而言,从早期的版本到目前最新的gfxboot-4.4.7-65.1,基本就没有更新,功能的增强可能在video和audio方面。
https://public.bay.livefilestore.com/y1pE0qH_fcc3Wx_qzmYKfzuhuJN0kOTev1eX3S9mRLLyW2H02xsTbDJCOloBz8xJ-8kRUqI_cJRc88WpoNcI5adyA/all.jpg?psid=1
本图仅为示范,实际使用时可选择数字方式与其他三种的组合。
定制参考
========
原有参数说明
------------
penguin
由于这个版本已不再支持penguin主题,此参数已无效。
welcome
在gfxboot-3.3-custom版本中,splash已屏蔽,此参数无效。
boot_show
GRUB4DOS中Boot Options无意义,其值应为0。
xmenu_hide_current
建议设置为1。
disable_num_key
菜单定制调试阶段可设为1;发布时应设为0,以允许菜单项热键。
扩展参数说明
------------
disable_ESC_key
当值为1时,在主界面ESC键被忽略,不会出现以下提示,避免切换到文本模式;缺省值为0。
https://public.bay.livefilestore.com/y1prbFcwJwPEa58O2mCCfnuRCRh70R5Q50rQfQxdsDNgs-xTlFOvwANmA8cbTj8pYlA8NMEboj_VzWD3ZPs8qkA8A/toTextMode.jpg?psid=1
另外增加了一个Ctrl+F1热键,由于显示“关于”对话框,不论hide_help为何值,此热键总是有效;类似于不论hide_poweroff为何值,F10总是有效。在hide_help=0时,初始F1也被定义为“关于”,键入F1一次后被定义为“帮助”。
https://public.bay.livefilestore.com/y1pupsKiFfUWJVICVubvGQCciqV6Ghfeqkbn0R-Ys_dgYpHBv6eKcX7o2F7ouIoCg-oi6qa9WWfHUJ0x62thIhZaQ/about.jpg?psid=1
一.数字倒计时
timeout_digit_enable
缺省值为1,显示数字倒计时。
timeout_digit_x
文本框中心横坐标,缺省值为靠屏幕右沿。
timeout_digit_y
文本框上沿纵坐标,缺省值为靠屏幕上沿。
timeout_digit_color
文本颜色,缺省值为白色。
timeout_digit_bg_color
文本框颜色,缺省值为黑色。
timeout_digit_bg_alpha
文本框透明度,取值范围:0~255。缺省值为0,完全透明,即不显示文本框。
timeout_digit_margin
文本边距,缺省值为2像素。
timeout_digit_s_enable
控制文本是否显示小写字母s;缺省值为1。
提示:文本字体是单独定义的,程序会查找message是否包含16x16.timer.fnt文件,如果字体存在则使用之,否则会使用不同于主字体16x16.fnt的内置字体。定制见后面字体制作及资源包部分。
二.水平进度条
timeout_bar_enable
缺省值为0,不显示水平进度条。
timeout_bar_width
进度条宽度,缺省值为200像素。
timeout_bar_height
色彩进度条高度,缺省值为10像素。如果message包含图片进度文件bar.jpg或bar_a.jpg,此值被忽略,使用图片高度。
timeout_bar_x
进度条左上角横坐标,缺省值由程序计算,进度条屏幕居中。
#timeout_bar_y
进度条左上角纵坐标,缺省值由程序计算,进度条与Fx热键位置纵向对齐。
timeout_bar_bg_color
色彩进度条背景色,缺省值绿色。如果文件bar_a.jpg存在,此值被忽略。
timeout_bar_progress_color
色彩进度条颜色,缺省值红色。如果文件bar.jpg存在,此值被忽略。
timeout_bar_bg_alpha
进度条背景透明度,取值范围:0~255。缺省值为192。
timeout_bar_progress_alpha
进度条透明度,取值范围:0~255。缺省值为192。
timeout_bar_step_size
进度条步长。缺省值为1像素,即进度条是连续的,非间断式。
解释:进度条分为色彩或图片,或两者的组合共四种,取决于文件bar.jpg和bar_a.jpg的存在与否:两者都存在为图片进度条,两者都不存在为色彩进度条,其中之一存在为色彩图片组合进度条。两文件必须为1像素宽,高度应相同。定制见后面图片处理及资源包部分。
三.时钟
timeout_clock_enable
缺省值为0,不显示时钟。
clock_image_x
时钟图片左上角横坐标,缺省值由程序计算,图片屏幕居中。
clock_image_y
时钟图片左上角纵坐标,缺省值10像素。
clock_image_alpha
时钟图片透明度,取值范围:0~255。缺省值为255。
clock_secondhand_color
时钟秒针颜色,缺省值为红色。
clock_secondhand_end_length
时钟秒针尾部长度,缺省值为10像素。
clock_secondhand_tip_fix
时钟秒针针尖修正值,缺省值为20像素。此值控制秒针的长度,以与图片相匹配。
clock_secondhand_center_fix_x
时钟秒针中心横坐标修正值,缺省值为0。可为负数,用于修正秒针旋转中心与时钟图片中心重合。
clock_secondhand_center_fix_y
时钟秒针中心纵坐标修正值,缺省值为0。可为负数,用于修正秒针旋转中心与时钟图片中心重合。
说明:时钟图片clock.jpg必须存在,否则无论timeout_clock_enable的取值如何都不会显示。定制时图片应尽量制作成正方形;一个可选的、与之大小相同的clock_a.jpg将作为蒙板使用。
四.环形点倒计时
timeout_circulardot_enable
缺省值为0,不显示环形点倒计时。
circulardot_image_x
图片左上角横坐标,缺省值由程序计算,图片屏幕居中。
circulardot_image_y
图片左上角纵坐标,缺省值10像素。
circulardot_image_clear
控制终止计时后是否保留图片,缺省值为0,即保留图片,适合图片作为Logo的情形。
circulardot_image_alpha
图片透明度,取值范围:0~255。缺省值为255。
说明:由于程序计算能力的限制,使用此功能有严格的要求。首先两个图片head.jpg和head_a.jpg必须存在,缺一不可。其次,图片宽和高不能更改。head.jpg的内容可定制,head_a.jpg中心部分的形状可结合head.jpg作相应修改,但不可破坏图片周边的环形点。
参考资料
========
1. bean的经典文章:
1) 分享:gfxmenu定制高级教程(新增可定制菜单)[http://bbs.znpc.net/viewthread.php?tid=5500]
2) Configurable gfxmenu[http://reboot.pro/7155/]
2. openSUSE的“SDB:Gfxboot”[http://en.opensuse.org/SDB:Gfxboot]
3. Colin Bennett的“Themes for GRUB 2 Graphical Menu”[http://grub.gibibit.com/Themes]
4. ded的“@DED-LEGO@ - flexible configuration (the gfxboot with the configuration directly from "menu.lst")”[http://reboot.pro/13437/]
演示模板说明
============
附件gfxmenu.Template.7z(300KB)解开后为可启动光盘映像gfxmenu.Template.iso(860KB),可用虚拟机加载试用。
映像仅包含两个文件,仅为菜单测试用,不包含示例菜单所需要的相应映像和外部命令:
1. grldr,版本GRUB4DOS 0.4.6a 2012-02-27,内置了menu.lst。可换用其他版本和自己的菜单,但message里的16x16.fnt、translations.en、translations.zh_CN、translations.zh_TW必须作相应修改。
2. message,其中主字库16x16.fnt(80KB)为演示所需的英、简、繁三种语言小字库,仅包括了帮助、演示菜单、程序控件所必须的字符集。
https://qbvfvw.bay.livefilestore ... download&psid=1
资源包说明
==========
gfxmenu.Resource.7z(38KB)
1. timer.font里的字库用于替换16x16.timer.fnt
2. bar.images里的图片用于替换bar.jpg或bar_a.jpg
3. clock.images里的图片用于替换clock.jpg和clock_a.jpg
4. head.images里的图片用于替换head.jpg和head_a.jpg
https://qbvfvw.bay.livefilestore ... download&psid=1
几个重要问题的说明
==================
1. 制作符合gfxmenu要求的图片
Gfxboot支持JPG或PCX两种格式的图片,对JPG仅支持16/32位两种模式。经常遇到的问题是:为什么Photoshop保存的jpg无法使用?由于jpg压缩时的复杂性,参数众多,这里有一个叫做Chroma Subsampling的问题。gfxboot解析器为保证核心的小巧高效,在图像质量和文件大小上进行了均衡,采样因子为2x2,1x1,1x1(即所谓的4:1:1)压缩的jpg图片才会被正确处理,否则将无法正常显示。
在文章“ImpulseAdventure - JPEG Chroma Subsampling”[http://www.impulseadventure.com/photo/chroma-subsampling.html]的末尾,列出了Photoshop CS2在保存方式和不同Quality值组合时采用的Chroma Subsampling值,仅Save As/Quality 0-6、Save For Web/Quality 0-50两种可用,这样低的Quality值图片已经惨不忍睹,无法使用。我这里在Photoshop CS3上测试的结果是,Save As/任何Quality值都不能正常显示,Save for Web & Devices/Quality=50时可用,但图片质量下降厉害。也就是说不同版本的Photoshop,内部算法都不一样。如果用较高的Quality值保存,再用Windows自带的“画图”保存一下,也是可以显示的,但是Quality值不可控制,经常不能满足要求。
这里提供一个很好的解决方案,使用Independent JPEG Group的开源CJPEG,目前版本是8d 15-Jan-2012。下载一个5.28MB的文件http://jpegclub.org/jcropsrc.zip,显然包括源码,但我们只需要其中编译好的可执行程序,解压出jpeg-8d\cjpeg\Release\cjpeg.exe,仅159,744字节。然后在命令行键入:
cjpeg.exe -quality 85 -optimize -sample 2x2,1x1,1x1 输入图片(.jpg或.bmp) 输出图片.jpg
这里可以调整quality的值,直到观察图片无明显噪点就可以了。
如果对Photoshop不熟悉,可用GIMP2。可在http://www.gimp.org/下载,目前稳定版本大概是2.6.12,for Windows的约20.2MB。功能也十分强大,支持多国语言。在保存为JPEG时,点开"Advanced Options",选择"Subsampling: 2x2,1x1,1x1 (smallest file)",再选择合适的Quality。同为开源项目,猜想GIMP2应该是用了IJG的库。
关于bar.jpg/bar_a.jpg的制作。
新建一个图片,宽度100或200像素,能观察整体效果即可,高度按需要设定。纵向拉一个灰度渐变,仔细调整到满意的效果。然后复制这个灰度图像,简单一点的话就用Colorize上色,要精确一点的话用Curves上色,最后把这些图像裁减为1像素宽度保存。
2. 字库的定制
gfxboot-3.3-custom里面的chs.txt是bean预先定义的约300个常用字符,直接使用它是不可取的。首先字库会比较大,约300KB,有些字符根本就用不到,其次,菜单中有的字符又没有包含进去出现掉字的情况。可以用mkblfont.exe强大的功能来定制小字库。
主字库16x16.fnt的制作
---------------------
1) 安装要用到的字体。
2) 在命令提示符下用copy将help-boot.*.html或*.hlp+*.tr+translations.*复制合并为my_chs.txt,通配符*包括准备使用的语言如en、zh_CN、zh_TW等等。这里还可以使用vbscript脚本过滤掉半角字符和相同的字符。
3) dir %systemroot%\fonts\*.ttf %systemroot%\fonts\*.ttc /w /o:N | find ".tt" /i
4) mkblfont.exe -v -l 20 -a 0x20-0x7e -t my_chs.txt -f trebuc:prop=0:space_width=4:size=17:nobitmap=1:autohint=1:bold=0 -f simhei:prop=1:space_width=4:size=18:nobitmap=1:autohint=1:bold=0 16x16.fnt >f.log
参数解释:
-l xx:行高xx;
-a 0x20-0x7e:西文字符集;
-t my_chs.txt:全角字符集,必须为UTF-8编码的文件;
-f trebuc:西文字体,-f simhei:全角字体,字体名按第3)步显示根据需要输入,不含后缀;
prop=x:字符间附加间距;
space_width=x:字符间间距;
size=xx:字体高度;
nobitmap=1:有些矢量字体里也包含一些点阵字体,nobitmap=1是让mkblfont忽略它们,直接使用矢量字体;
autohint=1:打开反锯齿的效果;
bold=0:不转为粗体。
最后应检查日志文件f.log,"Missing Chars"行下面是否有缺字出现,必要时应重新选择字体文件,再次生成16x16.fnt。最好写成一个cmd批处理方便一些。
数字倒计时字库制作
------------------
1)~3)步同上。
4) mkblfont.exe -v -l 20 -a 0x30-0x39,0x73 -f tahoma:prop=0:space_width=4:size=17:nobitmap=1:autohint=1:bold=0 16x16.timer.fnt >f.s.log
-a 0x30-0x39,0x73:只包含数字0-9和小写字母s。
可参考makefile文件里的字库制作部分,更复杂的可指定多个字体文件并定义相应的字符集。
3. 菜单翻译文件的定制
Gfxboot通过热键F2来实现菜单语言的切换。要使用几种语言就要准备相应的翻译文件。如英、简、繁就需要translations.en、translations.zh_CN、translations.zh_TW。
加上menu.lst就有四个文件,文件要求为:
a) UTF-8编码;
b) 不得有BOM;
c) 换行符只能是unix的LF(\n),不能是Windows的CR+LF(\r\n);
d) 文件末尾一定要有一个空行,即\n\n。
menu.lst文件title后面的文本称为标记文本,与之对应的翻译文件必须要有完全相同的标记文本,接下来是一行翻译文本。程序不会进行错误检查,只简单地按\n来分离文本,一行标记,一行翻译。如果为可读性而用一个空行,会造成只有奇数行被翻译的现象,要用就必须用两个空行。
结束语
======
1. 不得用于商业用途;不对使用造成的后果承担责任。
2. 程序未考虑水平进度条、时钟和环形点倒计时重叠的情况。
3. 数字倒计时重叠在时钟或环形点倒计时上时不可用;只处理了与水平进度条重叠的情况。
https://public.bay.livefilestore.com/y1pupsKiFfUWJWs8uheFzne1Nv18_HCGo675Xt8_OVUyZUcmZh3H74TWhMFQh1K-eXC48jH3jUWUor1j11Xopsrdg/ubuntu.jpg?psid=1 不错
最后一张图,看起来像 burg grub2,很漂亮…… 谢谢分享,确实很酷啊!下次合盘用上看看!
下次试试看,企鹅+时钟的效果!
[ 本帖最后由 zhs509 于 2012-3-6 22:03 编辑 ] 原帖由 zhs509 于 2012-3-6 20:58 发表 http://bbs.wuyou.net/images/common/back.gif
楼主能否分享一下ISO模版。。。
第一次发帖,无上传权限。帖子里有ISO模版的链接。
PS: 曾用过您的VBE模版,谢谢! 楼主能否分享一下ISO模版。。。
看到ISO模版了,我上传一下,大家可以直接下载测试效果!
[ 本帖最后由 zhs509 于 2012-3-6 21:58 编辑 ] gfxboot.cfg
这个文件在那里,message压缩包中么?
回复 #6 my9823 的帖子
是在message里面。。。 楼主是强人,特来学习,一直想读gfxboot的源代码,每次都放弃了。看来,如果继续开发和扩展gfxboot的话,还是非常有前途的。 是很漂亮,不过还是g4d内建的vbe好用。 不错!挺酷的。。。。。。
回复 #1 MistHill 的帖子
老大,强人也,顶起来! 界面挺漂亮的,支持下 看起来不错 有时间去弄弄 Very nice.请问启动菜单中的Win7pe streamlined network edition在哪里有下载吗?
这个PE是否包含浏览器 支持网络呢?
原帖由 MistHill 于 2012-3-6 20:52 发表 http://bbs.wuyou.net/images/common/back.gif
bean发布gfxboot-3.3-custom后,出现了GfxMenuInstaller、MsgDiyer、GfxMenu_Tools等基于bean编译init核心的gfxmenu定制应用。核心编程方面目前只有ded发布了一个自己编译的init和RIPPER-GFX with GUI,但它放弃 ... message修改後怎打包呢?謝謝! 坐下来慢慢学习ing…… 这个挺有意思学习下看看怎么用 非常酷的界面啊!!真不错 很好,迟来的学习 去年的帖子么?还是论坛时间出了问题? 原来我一直只知其一不知其二啊,内核的东西确实有点深奥,学习ING…… https://public.bay.livefilestore.com/y1pupsKiFfUWJWs8uheFzne1Nv18_HCGo675Xt8_OVUyZUcmZh3H74TWhMFQh1K-eXC48jH3jUWUor1j11Xopsrdg/ubuntu.jpg 楼主分享下这个模板
是很漂亮,不过还是g4d内建的vbe好用。 来学习挺酷的。。。。。。 感谢分享,感谢 分享 ,,,,,, 请问下大神message的打包工具是什么?temple文件中message文件使用cpio打包再解包,就黑屏了, 朋友请原谅翻译,我只会说西班牙语。 你可以用gfxboot.cfg来帮助我把透明(menu_bar_color)。我正在创建一个32 GB的Pendriver usb,多个操作系统的多重启动。注意:我使用这个文件gfxboot-3.3-custom.zip,用cpio编译(GFX-RIPPER)。谢谢... 朋友请原谅翻译,我只会说西班牙语。 你能帮我用gfxboot.cfg如何设置transparent_bar_color菜单。我正在创建一个32 GB的Pendriver usb,多个操作系统的多重启动。注意:我使用这个文件gfxboot-3.3-custom.zip,用cpio编译(GFX-RIPPER)。谢谢... 终于晓得jpg怎么显示不出来了。。。
页:
[1]