69 lines
3.8 KiB
Bash
Executable File
69 lines
3.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Launch KFMon if it isn't already running...
|
|
KFMON_LOG="/usr/local/kfmon/kfmon.log"
|
|
if ! pkill -0 kfmon ; then
|
|
echo "[START] [$(date +'%Y-%m-%d @ %H:%M:%S')] [INFO] [PID: $$] Starting KFMon . . ." >> "${KFMON_LOG}"
|
|
KFMON_BIN="/usr/local/kfmon/bin/kfmon"
|
|
if [ -x "${KFMON_BIN}" ] ; then
|
|
LIBC_FATAL_STDERR_=1 "${KFMON_BIN}" &
|
|
# NOTE: The PID shown here is not terribly helpful, since the first thing KFMon will do will be to fork twice to daemonize...
|
|
echo "[START] [$(date +'%Y-%m-%d @ %H:%M:%S')] [INFO] [PID: $$] Launched KFMon! (Initial PID: $!)" >> "${KFMON_LOG}"
|
|
else
|
|
echo "[START] [$(date +'%Y-%m-%d @ %H:%M:%S')] [ERR!] [PID: $$] KFMon binary '${KFMON_BIN}' cannot be executed!" >> "${KFMON_LOG}"
|
|
fi
|
|
else
|
|
# NOTE: I'm sometimes seeing wonky behavior after an update, where we trip the "already running" check when we actually *do* need to be launched...
|
|
# Possibly due to the specific timing at which on-animator runs around updates?
|
|
echo "[START] [$(date +'%Y-%m-%d @ %H:%M:%S')] [WARN] [PID: $$] KFMon is already running (PID: $(pidof kfmon || echo 'N/A'))!" >> "${KFMON_LOG}"
|
|
fi
|
|
|
|
# Optionally, ditch the pickel progress bar for FBInk's, for shit'n giggles.
|
|
# (And also because eating > 50% CPU to draw a progress bar is ridiculous).
|
|
# NOTE: That CPU usage does have an impact on boot times.
|
|
# As an example, on a H2O running FW 4.15, after a sync && reboot && exit over SSH:
|
|
# It (roughly) takes: 10s to actually power cycle (the double screen flash), 25s to start showing the progress bar,
|
|
# 37s for Nickel to show up.
|
|
# Switching to FBInk shaves those timings down to 10s, 24s and 34s, which might seem small,
|
|
# but relative to the amount of time on-animator actually runs, amounts to at least a 10% speedup...
|
|
# And on a Forma (still on 4.15), it shaves those same timings from 7s, 14s, 28s down to 7s, 11s, 25s ;).
|
|
# NOTE: The new spinner introduced in FW 4.17 appears to be *slightly* more efficient, but is still far from optimal,
|
|
# probably in part because of the overhead involved with zlib & piping all that data around.
|
|
# I haven't bothered timing it again, though.
|
|
|
|
# NOTE: While this works as-is on current FW, this *may* be problematic on older FW,
|
|
# where Nickel *might* have been relying on pickel to setup the fb...
|
|
# This could probably be worked-around by shipping and using fbdepth like we do on KOReader,
|
|
# (except only for the rotation, in order not to break old 16bpp only FW versions).
|
|
# But other custom stuff that relies on the pickel setup would be left in the lurch regardless, though...
|
|
# As that's a decision we'd be hard pressed to make on our own, leave this in the user's hands,
|
|
# defaulting to a safe behavior (i.e., the vanilla progress bar).
|
|
|
|
# NOTE: Given when we're launched by rcS, we know onboard is mounted at that point
|
|
KFMON_BAR_FLAG="/mnt/onboard/.adds/kfmon/config/BAR"
|
|
|
|
if [ -f "${KFMON_BAR_FLAG}" ] ; then
|
|
FBINK_SHIM_BIN="/usr/local/kfmon/bin/shim"
|
|
|
|
# NOTE: There's a bit of trickery involved where we have to launch FBInk under the on-animator.sh process name,
|
|
# just so it gets killed when on-animator gets the axe,
|
|
# because that's done in a way we can't do anything about from here (SIGKILL, which isn't propagated, and isn't trappable).
|
|
# Ideally, we'd use exec -a, but busybox doesn't support that flag, so, instead,
|
|
# we exec a shim binary that just execs FBInk under a different process name,
|
|
# and with the relevant options for what we want to do...
|
|
exec ${FBINK_SHIM_BIN}
|
|
else
|
|
PRODUCT="$(/bin/sh /bin/kobo_config.sh)"
|
|
[ "${PRODUCT}" != "trilogy" ] && PREFIX="${PRODUCT}-"
|
|
|
|
i=0
|
|
while true ; do
|
|
i=$((((i + 1)) % 11))
|
|
image="/etc/images/${PREFIX}on-${i}.raw.gz"
|
|
if [ -s "${image}" ] ; then
|
|
zcat "${image}" | /usr/local/Kobo/pickel showpic 1
|
|
usleep 250000
|
|
fi
|
|
done
|
|
fi
|