GRUB_BACKGROUND doesn't work right now, as background_image only works after 'terminal_output gfxterm' has been called.
I looked at lifting that restriction, but it seemed moderately complex to do so and it wasn't clear what the semantics ought to be if you tear down gfxterm and re-initialise it (would we need to have a new option to background_image to delete the cached bitmap or something?); and after all background_image is documented as loading the background image for the *active* terminal, not for some future terminal. Instead of all that, it seems best to just arrange not to run background_image until gfxterm has been set as the active output terminal. This patch does that. It means that several commands are now unconditional at run-time when they were previously conditional on loadfont succeeding, but I think that's OK; none of those commands will result in different behaviour unless gfxterm is the active output terminal anyway. 2010-07-05 Colin Watson <cjwat...@ubuntu.com> * util/grub.d/00_header.in: Process GRUB_THEME and GRUB_BACKGROUND after setting gfxterm as the active terminal. GRUB_BACKGROUND doesn't work otherwise. === modified file 'util/grub.d/00_header.in' --- util/grub.d/00_header.in 2010-06-29 15:20:49 +0000 +++ util/grub.d/00_header.in 2010-07-05 15:15:51 +0000 @@ -127,40 +127,74 @@ if loadfont `make_system_path_relative_t set gfxmode=${GRUB_GFXMODE} load_video insmod gfxterm +fi EOF +fi + +case x${GRUB_TERMINAL_INPUT} in + x) + # Just use the native terminal + ;; + x*) + cat << EOF +if terminal_input ${GRUB_TERMINAL_INPUT} ; then true ; else + # For backward compatibility with versions of terminal.mod that don't + # understand terminal_input + terminal ${GRUB_TERMINAL_INPUT} +fi +EOF + ;; +esac + +case x${GRUB_TERMINAL_OUTPUT} in + x) + # Just use the native terminal + ;; + x*) + cat << EOF +if terminal_output ${GRUB_TERMINAL_OUTPUT} ; then true ; else + # For backward compatibility with versions of terminal.mod that don't + # understand terminal_output + terminal ${GRUB_TERMINAL_OUTPUT} +fi +EOF + ;; +esac + +if [ "x$gfxterm" = x1 ]; then if [ "x$GRUB_THEME" != x ] && [ -f "$GRUB_THEME" ] \ && is_path_readable_by_grub "$GRUB_THEME"; then echo "Found theme: $GRUB_THEME" >&2 prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_THEME"` | sed -e "s/^/ /" cat << EOF - insmod gfxmenu +insmod gfxmenu EOF themedir="`dirname "$GRUB_THEME"`" for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do if [ -f "$x" ]; then cat << EOF - loadfont (\$root)`make_system_path_relative_to_its_root $x` +loadfont (\$root)`make_system_path_relative_to_its_root $x` EOF fi done if [ x"`echo "$themedir"/*.jpg`" != x"$themedir/*.jpg" ] || [ x"`echo "$themedir"/*.jpeg`" != x"$themedir/*.jpeg" ]; then cat << EOF - insmod jpeg +insmod jpeg EOF fi if [ x"`echo "$themedir"/*.png`" != x"$themedir/*.png" ]; then cat << EOF - insmod png +insmod png EOF fi if [ x"`echo "$themedir"/*.tga`" != x"$themedir/*.tga" ]; then cat << EOF - insmod tga +insmod tga EOF fi cat << EOF - set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME` +set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME` EOF elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \ && is_path_readable_by_grub "$GRUB_BACKGROUND"; then @@ -173,45 +207,12 @@ EOF esac prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_BACKGROUND"` | sed -e "s/^/ /" cat << EOF - insmod $reader - background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"` +insmod $reader +background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"` EOF fi - cat << EOF -fi -EOF fi -case x${GRUB_TERMINAL_INPUT} in - x) - # Just use the native terminal - ;; - x*) - cat << EOF -if terminal_input ${GRUB_TERMINAL_INPUT} ; then true ; else - # For backward compatibility with versions of terminal.mod that don't - # understand terminal_input - terminal ${GRUB_TERMINAL_INPUT} -fi -EOF - ;; -esac - -case x${GRUB_TERMINAL_OUTPUT} in - x) - # Just use the native terminal - ;; - x*) - cat << EOF -if terminal_output ${GRUB_TERMINAL_OUTPUT} ; then true ; else - # For backward compatibility with versions of terminal.mod that don't - # understand terminal_output - terminal ${GRUB_TERMINAL_OUTPUT} -fi -EOF - ;; -esac - # Gettext variables and module if [ "x${LANG}" != "xC" ] && [ -d "${locale_dir}" ] ; then prepare_grub_to_access_device $(${grub_probe} --target=device ${locale_dir}) -- Colin Watson [cjwat...@ubuntu.com] _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel