GRUB2 – zmiana tła oraz czcionki

Uwaga: Ten wpis został utworzony ponad rok temu. Informacje w nim zawarte mogą być nieaktualne!

GRUB2 daje pewną możliwość zmiany swojego wyglądu. Co prawda nie są to aż tak drastyczne zmiany, jak w przypadku BURGa, ale ustawienie własnego tła czy też koloru czcionki powinno niektórych użytkowników zadowolić – ja osobiście z tego nie korzystam, tylko testowałem.

Zmiana tła

Wybór pliku graficznego:
Jest kilka istotnych wymagań odnośnie plików graficznych, które możesz ustawić jako tło w GRUBie:

  • rozszerzenie *.tga, *.png lub *.jpg,
  • 8bitowa głębia kolorów – niestety,
  • obraz zapisany w trybie RGB.

Możesz więc użyć własnych plików graficznych lub skorzystać z tych oferowanych przez system:

sudo apt-get install grub2-splashimages

Pobrane w ten sposób pliki graficzne (rozszerzenie *.tga) zostaną zapisane w /usr/share/images/grub.

Ustawienie tła:

Poniższy opis dotyczy GRUB2 w wersji 1.98 i nowszej (Ubuntu 10.04 oraz nowsze). Opis ustawienia tła w starszych wersjach GRUB2 znajdziesz w dalszej części artykułu

Kod odpowiedzialny za kontrolę tła znajduje się w pliku /etc/grub.d/05_debian_theme:

sudo gedit /etc/grub.d/05_debian_theme

Odszukaj linijkę:

WALLPAPER=/usr/share/images/desktop-base/moreblue-orbit-grub.png

i wytłuszczoną wartość zastąp poprawną ścieżką do pliku graficznego, który chcesz użyć jako tło. Następnie zapisz plik (CTRL+S) i wydaj polecenie:

sudo update-grub

Jeśli dodanie tła się powiedzie, powinna ukazać się informacja:

Found background image...

Jeśli tego nie ujrzysz, oznacza to, że podany przez Ciebie obrazek nie jest kompatybilny z GRUB2.

GRUB2 1.97 (Karmic Koala):
Początek podobny:

sudo gedit /etc/grub.d/05_debian_theme

Odszukaj linię:

for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; do

1. Ścieżka – pogrubiony fragment wskazuje lokalizację, w której GRUB2 będzie szukał plików graficznych. Jak widać, ścieżka do plików graficznych jest z góry narzucona i masz dwie opcje, aby to zmienić:

  • dopisać ścieżkę np:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/moreblue-orbit-grub.{png,tga} ; do
  • przenieść pliki do jednej z sugerowanych lokalizacji (/boot/grub lub /usr/share/images/desktop-base).

2. Nazwa pliku – podkreślona część, czyli moreblue-orbit-grub. to nazwa pliku – kończy się kropką, pamiętaj o tym!

  • jeśli w podanych wcześniej katalogach znajdują się dwa pliki o takiej samej nazwie, to zostanie użyty ten, którego ścieżka została podana wcześniej,
  • jeśli w jednym katalogu znajdują się dwa pliki o takiej samej nazwie, to zostanie użyty ten, którego rozszerzenie znajduje się jako pierwsze (o czym za chwilę).

3. Rozszerzenie – za rozszerzenie odpowiedzialny jest fragment {png,tga}. Dodatkowe rozszerzenie możesz dodać podobnie jak lokalizację:

for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga,jpg} ; do

Ustaw poprawnie ścieżkę, zapisz plik (CTRL + S) i wydaj polecenie:

sudo update-grub

Zmiana koloru czcionki

Zmiany koloru czcionki dokonasz również w pliku /etc/grub.d/05_debian_theme:

sudo gedit /etc/grub.d/05_debian_theme

Zainteresuj się dwiema linijkami:

set color_normal=black/black
set color_highlight=magenta/black

Pierwsza linijka odpowiada za kolor tekstu oraz tła linii, która nie jest zaznaczona.
Druga linijka odpowiada za kolor tekstu oraz tła linii, która jest zaznaczona.

/black (na drugiej pozycji) domyślnie odpowiada za przezroczystość, więc jeśli używasz pliku graficznego jako tło, nie zmieniaj tej wartości. Każda inna wartość spowoduje wyświetlenie solidnego koloru, który zniszczy cały efekt.

Dostępne kolory

black

blue

brown

cyan

dark-gray

green

light-cyan

light-blue

light-green

light-gray

light-magenta

light-red

magenta

red

white

yellow

Po ustawieniu koloru zapisz plik (CTRL+S) i wydaj polecenie:

sudo update-grub
Powyższy artykuł jest luźnym tłumaczeniem tekstu Splash Images and Theming
Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.
  • Aragami

    Hmmm juz kiedys tego próbowałem i nic…. teraz spróbowałem raz jeszcze i znowu nie stosuje mi tła. Ani 10.04 ani w 10.10 tło mi sie nie zmienia :/

  • rafiozo1

    Mi zadziałało od razu w10.10

  • x

    a jak pozbyć się całkowicie obrazka z gruba 1.98?

    • Szmitas

      Calkowicie tla? Czyli jaki mialby byc efekt?

  • x

    podobny do gruba w ubuntu 8.04

    • Szmitas

      Może się mylę i nie wiem do końca o co chodzi, ale standardowo GRUB ma czarny kolor. Jedynie w 11.04 zmienili na fiolet, o to chodzi?

  • x

    mam takie o to okropne tło: http://www.linuxnov.com/wp-content/uploads/2010/12/Screenshot-Screenshot-of-Linux-Mint-Debian-201012-Snapshot-1.png (z taką różnicą że mam linux mint debian edition x64) i chcę go się pozbyć-zamienić na czarne

  • x

    oczywiście mam na myśli zainstalowany system na dysku twardym-ten obrazek to przykładowy znaleziony z neta

    • Szmitas

      Pokaż mi co siedzi w pliku /etc/grub.d/05_debian_theme

  • x

    #!/bin/sh
    set -e

    # grub-mkconfig helper script.
    # Copyright (C) 2010 Alexander Kurtz
    #
    # GRUB is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # GRUB is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with GRUB. If not, see .

    # Include the GRUB helper library for grub-mkconfig.
    . /usr/lib/grub/grub-mkconfig_lib

    # We want to work in /boot/grub/ only.
    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=cyan/blue”
    echo „${1}set menu_color_highlight=white/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-640×480.png
    0431e97a6c661084c59676c4baeeb8c2f602edb8 debian-blueish-wallpaper-640×480.png
    968ecf6696c5638cfe80e8e70aba239526270864 debian-blueish-wallpaper-640×480.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.
    for background in *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG *.tga *.TGA; do
    if set_background_image "${background}"; then
    exit 0
    fi
    done

    # Next try to use the background image and colors specified by desktop-base.
    if set_background_image "${WALLPAPER}" "${COLOR_NORMAL}" "${COLOR_HIGHLIGHT}"; then
    exit 0
    fi

    # If we haven't found a background image yet, use the default from desktop-base.
    if set_background_image "/usr/share/images/desktop-base/desktop-grub.png"; then
    exit 0
    fi

    # Finally, if all of the above fails, use the default theme.
    set_default_theme

    • Szmitas

      Na wszelki wypadek zrób kopię zapasową i użyj tego:

      #!/bin/sh
      set -e
      
      # grub-mkconfig helper script.
      # Copyright (C) 2010  Alexander Kurtz 
      #
      # GRUB is free software: you can redistribute it and/or modify
      # it under the terms of the GNU General Public License as published by
      # the Free Software Foundation, either version 3 of the License, or
      # (at your option) any later version.
      #
      # GRUB is distributed in the hope that it will be useful,
      # but WITHOUT ANY WARRANTY; without even the implied warranty of
      # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      # GNU General Public License for more details.
      #
      # You should have received a copy of the GNU General Public License
      # along with GRUB.  If not, see .
      
      # Include the GRUB helper library for grub-mkconfig.
      . /usr/lib/grub/grub-mkconfig_lib
      
      # We want to work in /boot/grub/ only.
      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 a monochromatic theme for Ubuntu.
      	echo "${1}set menu_color_normal=white/black"
      	echo "${1}set menu_color_highlight=black/light-gray"
      
      	if [ -e /lib/plymouth/themes/default.grub ]; then
      		sed "s/^/${1}/" /lib/plymouth/themes/default.grub
      	fi
      }
      
      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 < 
      

  • x

    dowiedziałem się że w mincie prawdopodobnie trzeba zmienić plik sudo gedit /etc/grub.d/06_mint_theme więc go podaję#!/bin/bash -e

    source /usr/lib/grub/grub-mkconfig_lib

    set_mono_theme()
    {
    cat <&2
    use_bg=true
    break
    fi
    fi
    done
    fi

    # set the background if possible
    if ${use_bg} ; then
    prepare_grub_to_access_device `${grub_probe} –target=device ${bg}`
    cat << EOF
    insmod ${reader}
    if background_image `make_system_path_relative_to_its_root ${bg}` ; then
    set color_normal=white/black
    set color_highlight=white/light-gray
    else
    EOF
    fi

    # otherwise, set a monochromatic theme for Ubuntu
    if ${use_bg} ; then
    set_mono_theme | sed -e "s/^/ /g"
    echo "fi"
    else
    set_mono_theme
    fi

  • x

    wkleiłem to co podałeś i pojawiło się:
    krzychu@acer-aspire-5734z ~ $ sudo update-grub
    Generating grub.cfg …
    /etc/grub.d/05_debian_theme: 122: Syntax error: newline unexpected

    więc przywrócę wcześniejszy konfig

  • x

    przepraszam źle zaznaczyłem sudo gedit /etc/grub.d/06_mint_theme jest w nim:

    #!/bin/bash -e

    source /usr/lib/grub/grub-mkconfig_lib

    set_mono_theme()
    {
    cat <&2
    use_bg=true
    break
    fi
    fi
    done
    fi

    # set the background if possible
    if ${use_bg} ; then
    prepare_grub_to_access_device `${grub_probe} –target=device ${bg}`
    cat << EOF
    insmod ${reader}
    if background_image `make_system_path_relative_to_its_root ${bg}` ; then
    set color_normal=cyan/blue
    set color_highlight=white/blue
    else
    EOF
    fi

    # otherwise, set a monochromatic theme for Ubuntu
    if ${use_bg} ; then
    set_mono_theme | sed -e "s/^/ /g"
    echo "fi"
    else
    set_mono_theme
    fi

  • x

    niewiem czemu ale całość się nie wkleiła daję więc linka:

    http://wklejto.pl/96586

    • Szmitas

      Spróbuj przeszukać wszystkie pliki w /etc/grub.d/ pod kątem wyrażenia WALLPAPER=.

  • SemaX

    To może by ktoś tak zapodał dobrym plikiem debian-theme bo u mnie nie da się żadnym z tych sposobów o których jest tu mowa.

  • vgfhgj

    WALLPAPER=/usr/share/images/desktop-base/moreblue-orbit-grub.png nie ma takiej lini frajerze

  • am

    a jak sie nazywa akcja, ktora zachodzi po GRUBie – w zaleznosci od ustawien w /boot/default/grub moze byc ekran z nazwa systemu i krecacym sie koleczkiem albo przesuwajaca sie w gore lista z podanym czasem i uruchamianymi modulami ? (mam nadzieje, ze dobrze to opisalem i wiadomo, o co mi chodzi)….wlasnie w tej przesuwajacej sie liscie chcialem zmienic kolor czcionek…