无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: MistHill

[原创] GRUB4DOS的Gfxboot核心扩展

    [复制链接]
发表于 2012-3-6 20:52:04 | 显示全部楼层 |阅读模式
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方面。

?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。
?psid=1
  另外增加了一个Ctrl+F1热键,由于显示“关于”对话框,不论hide_help为何值,此热键总是有效;类似于不论hide_poweroff为何值,F10总是有效。在hide_help=0时,初始F1也被定义为“关于”,键入F1一次后被定义为“帮助”。
?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. 数字倒计时重叠在时钟或环形点倒计时上时不可用;只处理了与水平进度条重叠的情况。

?psid=1

点评

http://www.fuheishu.com 腹黑书  发表于 2014-12-21 21:04
娘子为夫好寂寞 http://www.bqks.com/booklist_5885.html  发表于 2014-7-31 17:54

评分

参与人数 1无忧币 +10 收起 理由
zhs509 + 10 谢谢分享。。。

查看全部评分

发表于 2012-3-6 20:58:18 | 显示全部楼层
楼主能否分享一下ISO模版。。。
看到ISO模版了,我上传一下,大家可以直接下载测试效果!

[ 本帖最后由 zhs509 于 2012-3-6 21:58 编辑 ]

gfxmenu.Template.7z

302.38 KB, 下载次数: 1279, 下载积分: 无忧币 -2

这个是ISO模版,可以测试效果!核心文件是/boot/grub/message

回复

使用道具 举报

 楼主| 发表于 2012-3-6 21:05:05 | 显示全部楼层
原帖由 zhs509 于 2012-3-6 20:58 发表
楼主能否分享一下ISO模版。。。

第一次发帖,无上传权限。帖子里有ISO模版的链接。
PS: 曾用过您的VBE模版,谢谢!

点评

混沌剑神 www.aoswx.com/book/991.html 永生之门www.gmwxw.com/book/4185.html  发表于 2014-9-26 14:46
回复

使用道具 举报

发表于 2012-3-6 21:56:38 | 显示全部楼层
谢谢分享,确实很酷啊!下次合盘用上看看!

下次试试看,企鹅+时钟的效果!

[ 本帖最后由 zhs509 于 2012-3-6 22:03 编辑 ]
回复

使用道具 举报

发表于 2012-3-6 23:16:51 | 显示全部楼层
不错

最后一张图,看起来像 burg grub2,很漂亮……
回复

使用道具 举报

发表于 2012-3-7 06:25:53 | 显示全部楼层
gfxboot.cfg
这个文件在那里,message压缩包中么?
回复

使用道具 举报

发表于 2012-3-7 08:51:33 | 显示全部楼层

回复 #6 my9823 的帖子

是在message里面。。。
回复

使用道具 举报

发表于 2012-3-7 09:29:33 | 显示全部楼层
楼主是强人,特来学习,一直想读gfxboot的源代码,每次都放弃了。

看来,如果继续开发和扩展gfxboot的话,还是非常有前途的。
回复

使用道具 举报

发表于 2012-3-7 09:54:10 | 显示全部楼层
是很漂亮,不过还是g4d内建的vbe好用。
回复

使用道具 举报

发表于 2012-3-11 00:07:16 | 显示全部楼层
不错!挺酷的。。。。。。
回复

使用道具 举报

发表于 2012-4-9 23:49:51 | 显示全部楼层

回复 #1 MistHill 的帖子

老大,强人也,顶起来!
回复

使用道具 举报

发表于 2012-4-10 00:10:00 | 显示全部楼层
界面挺漂亮的,支持下
回复

使用道具 举报

发表于 2012-4-10 08:30:51 | 显示全部楼层
看起来不错 有时间去弄弄
回复

使用道具 举报

发表于 2012-4-10 14:56:31 | 显示全部楼层
Very nice.
请问启动菜单中的Win7pe streamlined network edition在哪里有下载吗?
这个PE是否包含浏览器 支持网络呢?

原帖由 MistHill 于 2012-3-6 20:52 发表
bean发布gfxboot-3.3-custom后,出现了GfxMenuInstaller、MsgDiyer、GfxMenu_Tools等基于bean编译init核心的gfxmenu定制应用。核心编程方面目前只有ded发布了一个自己编译的init和RIPPER-GFX with GUI,但它放弃 ...
回复

使用道具 举报

发表于 2012-4-15 16:04:08 | 显示全部楼层
message修改後怎打包呢?謝謝!
回复

使用道具 举报

发表于 2012-11-8 16:22:30 | 显示全部楼层
坐下来慢慢学习ing……
回复

使用道具 举报

发表于 2013-1-22 17:13:14 | 显示全部楼层
这个挺有意思  学习下  看看怎么用
回复

使用道具 举报

发表于 2013-2-23 22:00:36 | 显示全部楼层
非常酷的界面啊!!真不错
回复

使用道具 举报

发表于 2013-4-7 10:12:25 | 显示全部楼层
很好,迟来的学习
回复

使用道具 举报

M
发表于 2013-4-7 12:06:42 | 显示全部楼层
去年的帖子么?还是论坛时间出了问题?
回复

使用道具 举报

发表于 2013-5-8 11:43:21 | 显示全部楼层
原来我一直只知其一不知其二啊,内核的东西确实有点深奥,学习ING……
回复

使用道具 举报

发表于 2013-7-26 23:53:43 | 显示全部楼层
楼主分享下这个模板
回复

使用道具 举报

发表于 2013-12-3 15:06:09 | 显示全部楼层

是很漂亮,不过还是g4d内建的vbe好用。
回复

使用道具 举报

发表于 2013-12-6 12:35:20 | 显示全部楼层
来学习挺酷的。。。。。。
回复

使用道具 举报

发表于 2016-9-10 10:35:35 | 显示全部楼层
感谢分享,感谢 分享 ,,,,,,
回复

使用道具 举报

发表于 2016-9-10 15:36:16 | 显示全部楼层
请问下大神message的打包工具是什么?temple文件中message文件使用cpio打包再解包,就黑屏了,
回复

使用道具 举报

发表于 2018-6-12 01:12:03 | 显示全部楼层
朋友请原谅翻译,我只会说西班牙语。 你可以用gfxboot.cfg来帮助我把透明(menu_bar_color)。  我正在创建一个32 GB的Pendriver usb,多个操作系统的多重启动。  注意:我使用这个文件gfxboot-3.3-custom.zip,用cpio编译(GFX-RIPPER)。  谢谢...
回复

使用道具 举报

发表于 2018-6-12 01:34:11 | 显示全部楼层
朋友请原谅翻译,我只会说西班牙语。 你能帮我用gfxboot.cfg如何设置transparent_bar_color菜单。  我正在创建一个32 GB的Pendriver usb,多个操作系统的多重启动。  注意:我使用这个文件gfxboot-3.3-custom.zip,用cpio编译(GFX-RIPPER)。  谢谢...
回复

使用道具 举报

发表于 2019-4-25 20:41:52 来自手机 | 显示全部楼层
终于晓得jpg怎么显示不出来了。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-18 14:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表