Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- test -d "${GRUB_PREFIX}"; cd "${GRUB_PREFIX}"
- # Set the location of a possibly necessary cache file for the background image.
- # NOTE: This MUST BE A DOTFILE to avoid confusing it with user-defined images.
- BACKGROUND_CACHE=".background_cache"
- set_default_theme(){
- # Set the traditional Debian blue theme.
- echo "${1}set menu_color_normal=light-cyan/black"
- echo "${1}set menu_color_highlight=white/blue"
- }
- set_custom_theme(){
- # Set custom color theme.
- echo "${1}set menu_color_normal=light-cyan/black"
- echo "${1}set menu_color_highlight=white/light-blue"
- echo "${1}set color_normal=white/black"
- echo "${1}set color_highlight=white/light-blue"
- }
- set_background_image(){
- # Step #1: Search all available output modes ...
- local output
- for output in ${GRUB_TERMINAL_OUTPUT}; do
- if [ "x$output" = "xgfxterm" ]; then
- break
- fi
- done
- # ... and check if we are able to display a background image at all.
- if ! [ "x${output}" = "xgfxterm" ]; then
- return 1
- fi
- # Step #2: Check if the specified background image exists.
- if ! [ -f "${1}" ]; then
- return 2
- fi
- # Step #3: Search the correct GRUB module for our background image.
- local reader
- case "${1}" in
- *.jpg|*.JPG|*.jpeg|*.JPEG) reader="jpeg";;
- *.png|*.PNG) reader="png";;
- *.tga|*.TGA) reader="tga";;
- *) return 3;; # Unknown image type.
- esac
- # Step #4: Check if the necessary GRUB module is available.
- if ! [ -f "${reader}.mod" ]; then
- return 4
- fi
- # Step #5: Check if GRUB can read the background image directly.
- # If so, we can remove the cache file (if any). Otherwise the backgound
- # image needs to be cached under /boot/grub/.
- if is_path_readable_by_grub "${1}"; then
- rm --force "${BACKGROUND_CACHE}.jpeg" \
- "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga"
- elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then
- set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}"
- else
- return 5
- fi
- # Step #6: Prepare GRUB to read the background image.
- if ! prepare_grub_to_access_device "`${grub_probe} --target=device "${1}"`"; then
- return 6
- fi
- # Step #7: Everything went fine, print out a message to stderr ...
- echo "Found background image: ${1}" >&2
- # ... and write our configuration snippet to stdout. Use the colors
- # desktop-base specified. If we're using a user-defined background, use
- # the default colors since we've got no idea how the image looks like.
- # If loading the background image fails, use the default theme.
- echo "insmod ${reader}"
- echo "if background_image `make_system_path_relative_to_its_root "${1}"`; then"
- if [ -n "${2}" ]; then
- echo " set color_normal=${2}"
- fi
- if [ -n "${3}" ]; then
- echo " set color_highlight=${3}"
- fi
- if [ -z "${2}" ] && [ -z "${3}" ]; then
- echo " true"
- fi
- echo "else"
- set_default_theme " "
- echo "fi"
- }
- # Earlier versions of grub-pc copied the default background image to /boot/grub
- # during postinst. Remove those obsolete images if they haven't been touched by
- # the user. They are still available under /usr/share/images/desktop-base/ if
- # desktop-base is installed.
- while read checksum background; do
- if [ -f "${background}" ] && [ "x`sha1sum "${background}"`" = "x${checksum} ${background}" ]; then
- echo "Removing old background image: ${background}" >&2
- rm "${background}"
- fi
- done <<EOF
- 648ee65dd0c157a69b019a5372cbcfea4fc754a5 debian-blueish-wallpaper-640x480.png
- 0431e97a6c661084c59676c4baeeb8c2f602edb8 debian-blueish-wallpaper-640x480.png
- 968ecf6696c5638cfe80e8e70aba239526270864 debian-blueish-wallpaper-640x480.tga
- 11143e8c92a073401de0b0fd42d0c052af4ccd9b moreblue-orbit-grub.png
- d00d5e505ab63f2d53fa880bfac447e2d3bb197c moreblue-orbit-grub.png
- f5b12c1009ec0a3b029185f6b66cd0d7e5611019 moreblue-orbit-grub.png
- EOF
- # Include the configuration of desktop-base if available.
- if [ -f "/usr/share/desktop-base/grub_background.sh" ]; then
- . "/usr/share/desktop-base/grub_background.sh"
- fi
- # First check whether the user has specified a background image explicitly.
- # If so, try to use it. Don't try the other possibilities in that case
- # (#608263).
- if [ -n "${GRUB_BACKGROUND+x}" ]; then
- set_background_image "${GRUB_BACKGROUND}" || set_default_theme
- exit 0
- fi
- # Next search for pictures the user put into /boot/grub/ and use the first one.
- # Next try to use the background image and colors specified by desktop-base.
- # If we haven't found a background image yet, use the default from desktop-base.
- # Finally, if all of the above fails, use the default theme.
- set_background_image "`ls -1 *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG *.tga *.TGA 2>/dev/null | head -1`" ||
- set_background_image "${WALLPAPER}" "${COLOR_NORMAL}" "${COLOR_HIGHLIGHT}" ||
- set_background_image "/boot/grub/images/boot.png" ||
- set_default_theme
- set_custom_theme
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement