summaryrefslogtreecommitdiffstats
path: root/abs/core/plymouth/plymouth.functions
blob: b8666436cae7d04fff66520b344bff2d679aa29e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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: