#!/bin/sh
|
#
|
# Usage:
|
# bootanim start [timeout]
|
# bootanim stop
|
#
|
# Example hook:
|
# root@RK3588:/# more /etc/bootanim.d/gst-bootanim.sh
|
# #!/bin/sh
|
# gst-play-1.0 /etc/bootanim.d/bootanim.mp4 -q --no-interactive
|
|
SCRIPT=/usr/bin/bootanim
|
HOOK_DIR=/etc/bootanim.d/
|
PID_FILE=/tmp/bootanim.pid
|
LOG_FILE=/tmp/bootanim.log
|
TIMEOUT=${2:-5}
|
|
pid_sid()
|
{
|
ps x -o pid,sid | grep -w $@
|
}
|
|
bootanim_start()
|
{
|
[ -d $HOOK_DIR ] || return
|
|
echo "Starting bootanim: $$..."
|
|
# Freeze display server
|
touch /dev/null $XSERVER_FREEZE_DISPLAY $WESTON_FREEZE_DISPLAY
|
|
# Start bootanim hooks
|
for hook in $(find $HOOK_DIR -maxdepth 1 -name "*.sh"); do
|
echo "Starting hook: $hook..."
|
$hook&
|
done
|
|
# Save bootanim's pid
|
echo $$ > $PID_FILE
|
}
|
|
bootanim_stop()
|
{
|
[ -f $PID_FILE ] || return
|
|
# Parse our sid (same as bootanim's pid)
|
SID=$(cat $PID_FILE; rm -rf $PID_FILE)
|
[ -n "$SID" ] || return
|
|
# Parse children pid
|
CPID=$(pid_sid $SID | xargs -n 2 | cut -d' ' -f1 | xargs)
|
|
echo "Stopping bootanim: ${CPID:-none} for $SID..."
|
|
# Pause children
|
[ -n "$CPID" ] && kill -STOP $CPID &>/dev/null
|
|
# Unfreeze display server
|
rm -f $XSERVER_FREEZE_DISPLAY $WESTON_FREEZE_DISPLAY
|
sleep .1
|
|
# Kill children
|
[ -n "$CPID" ] && kill -9 $CPID &>/dev/null
|
}
|
|
case "$1" in
|
start|"")
|
# Make sure that we own this session (pid equals sid)
|
if ! pid_sid -q "$$$" || [ $(realpath "$0") != $SCRIPT ] ; then
|
setsid $SCRIPT $@
|
else
|
# Run it
|
$SCRIPT stop
|
bootanim_start 2>&1 | tee -a $LOG_FILE&
|
|
# Timeout killer
|
start-stop-daemon -S -q -b -n bootanim-stop \
|
-x /bin/sh -- -c "sleep $TIMEOUT; $SCRIPT stop"
|
fi
|
;;
|
stop)
|
bootanim_stop 2>&1 | tee -a $LOG_FILE
|
;;
|
*)
|
echo "Usage: $0 [start|stop]"
|
;;
|
esac
|
|
:
|