if [[ -x /usr/bin/plymouth && -x /usr/sbin/plymouthd ]]; then ply_client() { /usr/bin/plymouth --ping && /usr/bin/plymouth "$@"; } ply_daemon() { /usr/sbin/plymouthd "$@"; } # save a function under a new name save_function() { local ORIG=$(declare -f $1) eval "$2${ORIG#$1}" } save_function stat_busy std_stat_busy save_function stat_fail std_stat_fail # overwrite status functions stat_busy() { ply_client --update="$1" ply_client message --text="$1" std_stat_busy "$@" } stat_fail() { #ply_client --quit std_stat_fail "$@" } # update after local filesystems are mounted ply_sysinit_postmount() { ply_client --sysinit; } add_hook sysinit_postmount ply_sysinit_postmount # stop plymouth after rc.multi ply_quit_boot() { ply_client quit --retain-splash } add_hook multi_end ply_quit_boot # stop plymouth before shutdown ply_quit_shutdown() { ply_quit_boot [[ $(ps h $(cat /tmp/plymouthd)) ]] && kill -9 $(cat /tmp/plymouthd) } add_hook shutdown_poweroff ply_quit_shutdown # start plymouth at the beginning of rc.shutdown ply_shutdown_start(){ XPID=`pidof X` if [ "$XPID" ]; then if [ "`runlevel | cut -c 3`" != '5' ]; then local DM for DM in slim gdm kdm xdm entrance; do ck_daemon "$DM" || stop_daemon "$DM" done fi kill -9 $XPID &> /dev/null fi ply_daemon --mode=shutdown --pid-file=/tmp/plymouthd ply_client --show-splash # don't get killed by kill_all add_omit_pids `cat /tmp/plymouthd` } add_hook shutdown_start ply_shutdown_start fi # vim: set ts=2 sw=2 ft=sh noet: