Nie mogę poradzić sobie ze zmuszeniem GRUB2 do wyświetlania ekranu powitalnego podczas ładowania systemu. Obrazek pojawia się podczas wyświetlania menu gruba, a potem już tylko wyświetlają się wyniki ładowania skryptów. Z tego co widzę to wszystko jest dobrze i powinno działać.
/etc/grub.d/05_debian_theme:
Kod: Zaznacz cały
#!/bin/bash -e                                       
source /usr/lib/grub/grub-mkconfig_lib
# this allows desktop-base to override our settings
f=/usr/share/desktop-base/grub_background.sh       
if test -e ${f} ; then                             
  source ${f}                                      
else                                               
  WALLPAPER="/usr/share/images/desktop-base/moreblue-orbit-grub.png"
  COLOR_NORMAL="black/black"                                        
  COLOR_HIGHLIGHT="magenta/black"                                   
fi                                                                  
set_blue_theme()
{               
  cat << EOF    
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
EOF
}
# check for usable backgrounds
use_bg=false
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
  for i in /boot/grub/`basename ${WALLPAPER}` ${WALLPAPER} ; do
    if is_path_readable_by_grub $i ; then
      bg=$i
      case ${bg} in
        *.png)          reader=png ;;
        *.tga)          reader=tga ;;
        *.jpg|*.jpeg)   reader=jpeg ;;
      esac
      if test -e /boot/grub/${reader}.mod ; then
        echo "Found background image: `basename ${bg}`" >&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=${COLOR_NORMAL}
  set color_highlight=${COLOR_HIGHLIGHT}
else
EOF
fi
# otherwise, set the traditional Debian blue theme
if ${use_bg} ; then
  set_blue_theme | sed -e "s/^/  /g"
  echo "fi"
else
  set_blue_them
fi
Kod: Zaznacz cały
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Kod: Zaznacz cały
GRUB_CMDLINE_LINUX_DEFAULT="quiet"Kod: Zaznacz cały
GRUB_GFXMODE=640x480Kod: Zaznacz cały
update-grubCzy ktoś ma pomysł o co chodzi?
Dodane:
Jeszcze mi na myśl jedna rzecz przyszła. Czy może ktoś sprawdzić, czy po starcie systemu macie wgrany moduł glxterm? Wydaje mi się, że powinien on być wgrany wraz ze startem systemu i od niego zależy wyświetlanie obrazka. U mnie nie ma.
Dodane:
Temat rozwiązany.
Po pierwsze GRUB2 nie obsługuje wyświetlania grafiki podczas startu systemu i nie wiem skąd mi się wzięło przekonanie, że jest inaczej.
Tak więc powróciłem do splashy. Jednak wymagało to trochę pracy gdyż, GRUB2 nie używa już poleceń bufora ramki vga=791. Żeby na Debianie cieszyć się poprawnym splashy należy:
1. w /etc/default/grub:
Kod: Zaznacz cały
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"Kod: Zaznacz cały
#!/bin/sh                                         
### BEGIN INIT INFO                               
# Provides:          splashy                      
# Required-Start:    mountkernfs                  
# Required-Stop:                                  
# Default-Start:     S                            
# Default-Stop:      0 6                          
# Short-Description: A script to calculate the progress percentage for init scripts
# Description:       This calculates the progress percentage for the scripts in    
#                    /etc/rcS.d and /etc/rc$CURRENT_RUNLEVEL.d. This will also     
#                    start Splashy at boot (if not already started from initramfs),
#                    and at shutdown (yes, when "stop" argument is given,          
#                    which is really counter-intuitive).                           
### END INIT INFO                                                                  
# Author: Tim Dijkstra <tim@famdijkstra.org>, 
#         Luis Mondesi <lemsx1@gmail.com>     
#         Luca Capello <luca@pca.it>          
#                                             
# If called in the rc[06].d runlevels with the stop target it will start 
# splashy in 'shutdown' mode. In the rcS.d runlevel it will try          
# to start splashy if it didn't start yet from initramfs.                
#                                                                        
# When it decides to start splashy it will first calculate the           
# progress percentage which will be used by the calls to splashy_update  
# in the log_end_msg functions.                                          
# This is really simple. We just count them and put them                 
# in alpha-numeric order. Their percentage is then just                  
# int( their number on the list * ( 100 / total number on list) )        
#                                                                        
# Of course not all packages use log_end_msg yet, but that               
# doesn't matter. The packages that do, will trigger the update                                                                                                     
# anyway. This may result in big jumps in the percentage.                                                                                                           
# The more scripts start using it, the more granular it will become.                                                                                                
#                                                                                                                                                                   
#                                                                                                                                                                   
# This script also needs to detect if Splashy is running and if not                                                                                                 
# start it. It's assumed that this will only be run while halt/reboot                                                                                               
# and at RUNLEVEL S.                                                                                                                                                
#                                                                                                                                                                   
                                                                                                                                                                    
PATH="/sbin:/bin:/usr/sbin:/usr/bin"                                                                                                                                
NAME="splashy"                                                                                                                                                      
DESC="Boot splash manager"                                                                                                                                          
STEPS_DIR="/lib/init/rw/$NAME"                                                                                                                                      
DEBUG=0                                                                                                                                                             
[ -r "/etc/default/$NAME" ] && . "/etc/default/$NAME"
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
if [ -r "/lib/lsb/init-functions" ]; then                           
    . "/lib/lsb/init-functions"                                     
else                                                                
    echo "Could not read file /lib/lsb/init-functions. Please install lsb-base"
    exit 1                                                                     
fi                                                                             
set -e
[ "$ENABLE" = "1" ] && log_warning_msg "To enable $NAME add 'splash' to the kernel command line. Use of ENABLE in /etc/default/$NAME is deprecated.";
check_to_enable () {
        ENABLE=0    
        SINGLE=false
        SPLASH=false
        FBMODESET=false
        for x in $(cat /proc/cmdline); do
            case $x in                   
                single)                  
                    SINGLE="true"        
                ;;                       
                splash)                  
                    SPLASH="true"        
                ;;                       
                nosplash)                
                    SPLASH="false"       
                ;;                       
                vga=*|video=*)           
                    FBMODESET="true"     
                ;;                       
            esac                         
        done                             
        [B]# grub2 gfxmode?                 
        [ "$FBMODESET" != "true" ] && [ -f /boot/grub/grub.cfg ] && \
        grep -q "^[[:space:]]*set[[:space:]]*gfxmode=" /boot/grub/grub.cfg && \
                FBMODESET="true" [/B]                                              
        [ "$SPLASH" = "true" -a "$FBMODESET" = "true" ] && ENABLE=1
        [ "$SINGLE" = "true" ] && ENABLE=0                         
        if [ "$ENABLE" = "0" ]; then
            log_warning_msg "To enable $NAME on multiuser runlevel add 'splash' and a valid framebuffer videomode to the kernel command line"
            exit 0                                                                                                                           
        fi                                                                                                                                   
}                                                                                                                                            
calculate_steps () {
        log_daemon_msg "(Re)generating splash steps for"
        [ -f /etc/inittab ] &&  RLVL=`sed -n 's/id:\([2345]\):initdefault:/\1/ p' /etc/inittab`
        [ ! -d $STEPS_DIR ] && mkdir -p $STEPS_DIR
        #                                         
        # Mount a tmpfs on $STEPS_DIR             
        #                                         
        # on Ubuntu our Steps dir gets umounted if using /dev/shm/splashy
        # we will always use /lib/init/rw/splashy and mount a tmpfs there
        SHM_OPT=                                                         
        [ "${SHM_SIZE:=$TMPFS_SIZE}" ] && SHM_OPT="-osize=$SHM_SIZE"     
        mount -n -t tmpfs shmfs $STEPS_DIR                               
        TMP=`mktemp -p $STEPS_DIR`
        # While booting rcS will also be executed
        # we only care about the scripts that actually call log_end_msg
        # if not we could end up never completing our progressbar!     
        grep -l log_end_msg /etc/rcS.d/S* > $TMP 2> /dev/null || true  
        for ILVL in ${RLVL:=2} 0 6; do
            # in debian rc.local runs log_end_msg conditionally. we simply skip that
            grep -l log_end_msg /etc/rc$ILVL.d/[KS]* 2> /dev/null | grep -v rc.local >> $TMP  || true
                                                                                                     
            NR=`sed -n -e '$=' $TMP`                                                                 
            I=1                                                                                      
            for SCR in `cat $TMP`; do                                                                
                echo "$SCR $(($I*100/$NR))"                                                          
                I=$(($I+1))                                                                          
            done > "$STEPS_DIR/$ILVL-progress"                                                       
            # Truncate $TMP file
            echo -n > $TMP      
            log_action_cont_msg " rc$ILVL.d"
        done                                
        # In the first stage of booting RUNLEVEL will be S
        ln -sf "$STEPS_DIR/${RLVL:=2}-progress" "$STEPS_DIR/S-progress"
        rm -f $TMP                                                     
        log_action_end_msg 0
}                           
# Bug #400598,#401999
if [ -z "${RUNLEVEL:-}" ]; then
    # we need only the current level
    RUNLEVEL=`runlevel | sed 's/^. //'`
fi                                     
case "$1" in
    start)  
        check_to_enable
        # We start splashy in rcS.d if we haven't already in initramfs
        [ "x$RUNLEVEL" = "xN S" -o "x$RUNLEVEL" = "xS" ] || exit 0    
        calculate_steps                                               
        log_daemon_msg "Starting $DESC" $NAME
        if [ "$DEBUG" = "1" ]; then          
            pidof $NAME > /dev/null || \     
            echo "$0: Splashy not running?" >> $STEPS_DIR/splashy.log
        fi                                                           
        if (pidof $NAME > /dev/null); then                           
            # as suggested by John Hughes <john@calva.com> Bug# 462626
            # Splashy is running and we want to avoid our TTY to be corrupted
            stty -icanon -clocal                                             
        else                                                                 
            /sbin/$NAME boot                                                 
            sleep 0.2                                                        
        fi                                                                   
        # Before X starts we need to turn off the cursor to avoid artifacts: 
        for i in 7 8 9 10 11 12; do                                          
            if [ -c /dev/tty$i ]; then                                       
                setterm -cursor off > /dev/tty$i || true                     
            fi                                                               
        done                                                                 
        log_end_msg $?                                                       
    ;;                                                                       
    stop)                                                                    
        check_to_enable                                                      
                                                                             
        # avoid displaying ugly text at shutdown                             
        clear >/dev/tty8                                                     
        clear >/dev/tty1                                                     
        # wait for all gdm servers to exit (DBTS# 504389)                    
        COUNTER=0                                                            
        ATTEMPTS=10                                                          
        set +e                                                               
        while [ $COUNTER -lt $ATTEMPTS ]; do                                 
            ps -C "gdm"                                                      
            if [ $? -eq 0 ]; then                                            
                sleep 0.5                                                    
                COUNTER=`expr $COUNTER + 1` #works in dash
            else
                break
            fi
        done
        set -e
        if [ $COUNTER -eq $ATTEMPTS ]; then
            echo "$NAME stopping because gdm is still active"
            exit
        fi
        /sbin/splashy_chvt 8
        calculate_steps
        # sanity check, kill Splashy if running (old bug)
        pidof $NAME > /dev/null && splashy_update "exit" && pkill -9 splashy
        log_daemon_msg "Starting $DESC" $NAME
        /sbin/$NAME shutdown
        sleep 0.2
        # tell killall5 to not kill us too early at shutdown/restart:
        pidof $NAME >> /var/run/sendsigs.omit
        RET=$?
        [ -d /lib/init/rw/sendsigs.omit.d ] || mkdir -p /lib/init/rw/sendsigs.omit.d
        cat /var/run/sendsigs.omit >> /lib/init/rw/sendsigs.omit.d/splashy
        # log_end_msg calls splashy_update, so we need to allow Splashy to start
        sleep 0.5
        log_end_msg $RET
    ;;
    restart|force-reload)
        calculate_steps $RUNLEVEL
        ;;
    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0
3. W /etc/grub.d/00_header wpisać:
Kod: Zaznacz cały
set gfxpayload=keepKod: Zaznacz cały
set gfxmode=${GRUB_GFXMODE}                                               
  set gfxpayload=keep                                                       
  insmod gfxterm Na koniec
Kod: Zaznacz cały
sudo update-grubPrzydatne linki:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=539239
http://harrison3001.blogspot.com/2009/0 ... o-set.html
http://linuxers.org/howto/how-change-gr ... ash-images
http://blogs.koolwal.net/2008/12/16/how ... sh-images/