Para fazer com que a barra de progresso funcione no bootsplash é necessário alterar alguns arquivos. Primeiro de tudo, crie o arquivo /etc/rc.d/rc.bootsplash e adicione o seguinte texto a ele:
#!/bin/sh
function progressbar(){
if [ $# != 1 ]
then
echo "Use: progressbar {progresso}"
exit 1
fi
echo "show $(( 65534 * $1 / 100 ))" > /proc/splash
}
Transforme-o em executável para que ele possa ser inicializado durante o boot:
# chmod +x /etc/rc.d/rc.bootsplash
Nos arquivos de inicialização rc.S e rc.M, adicione logo após a linha que dá início ao script (#!/bin/bash):
. /etc/rc.d/rc.bootsplash
No rc.S, acrescente as linhas progressbar 10, 20, 30, 40, 50 no arquivo fora das funções de script. Coloque onde você quiser mas tente distribuir os 'progressbar' igualmente durante todo o arquivo. Essas 'progress X' determinarão o comprimento da barra de progresso antes e após a conclusão de certas funções. Veja o começo de meu rc.S:
#!/bin/sh
. /etc/rc.d/rc.bootsplash
progressbar 10
PATH=/sbin:/usr/sbin:/bin:/usr/bin
# Mount /proc right away:
/sbin/mount -v proc /proc -n -t proc
if [ -w /proc/sys/kernel/hotplug ]; then
if grep -wq nohotplug /proc/cmdline ; then
echo "/dev/null" > /proc/sys/kernel/hotplug
elif [ ! -x /etc/rc.d/rc.hotplug ]; then
if [ ! "$(uname -r | cut -f 1,2 -d .)" = "2.4" ]; then
# We must be running a 2.4.x kernel, so turn off hotplug:
echo "/dev/null" > /proc/sys/kernel/hotplug
fi
fi
fi
# Start devfsd if necessary. On newer kernels, udev should be used instead.
if [ -x /etc/rc.d/rc.devfsd ]; then
/etc/rc.d/rc.devfsd start
fi
# Mount sysfs next, if the kernel supports it:
if [ -d /sys ]; then
if cat /proc/filesystems | grep -wq sysfs ; then
if ! cat /proc/mounts | grep -wq sysfs ; then
/sbin/mount -v sysfs /sys -n -t sysfs
fi
fi
fi
progressbar 20
# Enable swapping:
/sbin/swapon -a
No arquivo rc.M, faça a mesma coisa. O arquivo rc.M entra em ação depois que o rc.S já foi completamente lido, portanto iremos adicionar progressbar 60, 70, 80, 90. Veja o começo de meu rc.M:
#!/bin/sh
. /etc/rc.d/rc.bootsplash
progressbar 6
# Tell the viewers what's going to happen.
echo "Going multiuser..."
# Screen blanks after 15 minutes idle time, and powers down in one hour
# if the kernel supports APM or ACPI power management:
/bin/setterm -blank 15 -powersave powerdown -powerdown 60
# Set the hostname.
if [ -r /etc/HOSTNAME ]; then
/bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .)
else
# fall back on this old default:
echo "darkstar.example.net" > /etc/HOSTNAME
/bin/hostname darkstar
fi
progressbar 70
Agora, iremos configurar a barra de progresso na hora do desligamento do sistema. Para isso teremos que editar o arquivo /etc/rc.d/rc.6 e adicionar as linhas de 'progressbar'. Veja o exemplo:
#! /bin/sh
. /etc/rc.d/rc.bootsplash
# Volta o bootsplash pra tela silent
/sbin/splash -s -u 0 /etc/bootsplash/themes/current/config/ARQUIVOTEMA.cfg
progressbar 10
# Set the path.
PATH=/sbin:/etc:/bin:/usr/bin
Uma coisa interessante é que, se você quiser adicionar uma barra ao contrário (ela começa no fim e encolhe até o começo), basta trocar o progressbar 10, por progressbar 90 e ir adicionando as linhas progressbar de forma decrescente até o fim do arquivo.