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=640x480
Kod: Zaznacz cały
update-grub
Czy 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=keep
Kod: Zaznacz cały
set gfxmode=${GRUB_GFXMODE}
set gfxpayload=keep
insmod gfxterm
Na koniec
Kod: Zaznacz cały
sudo update-grub
Przydatne 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/