diff --git a/kindle/extensions/koreader/menu.json b/kindle/extensions/koreader/menu.json index 9896aa2de..e747f5462 100644 --- a/kindle/extensions/koreader/menu.json +++ b/kindle/extensions/koreader/menu.json @@ -1,30 +1,30 @@ { "items": [ { - "name": "Koreader", + "name": "KOReader", "priority": 0, "items": [ { "name": "Start the filemanager", "priority": 1, - "action": "nice -n -7 /mnt/us/koreader/koreader.sh", + "action": "/mnt/us/koreader/koreader.sh", "params": "/mnt/us/documents" }, { "name": "Open the last document", "priority": 2, - "action": "nice -n -7 /mnt/us/koreader/koreader.sh" + "action": "/mnt/us/koreader/koreader.sh" }, { "name": "Start the filemanager (no framework)", "priority": 3, - "action": "nice -n -7 /mnt/us/koreader/koreader.sh", + "action": "/mnt/us/koreader/koreader.sh", "params": "--framework_stop /mnt/us/documents" }, { "name": "Open the last document (no framework)", "priority": 4, - "action": "nice -n -7 /mnt/us/koreader/koreader.sh", + "action": "/mnt/us/koreader/koreader.sh", "params": "--framework_stop" } ] diff --git a/kindle/koreader.sh b/kindle/koreader.sh index e2bafd5b5..048cf51da 100755 --- a/kindle/koreader.sh +++ b/kindle/koreader.sh @@ -6,24 +6,54 @@ PROC_FIVEWAY="/proc/fiveway" [ -e $PROC_KEYPAD ] && echo unlock > $PROC_KEYPAD [ -e $PROC_FIVEWAY ] && echo unlock > $PROC_FIVEWAY +# Check which type of init system we're running on +if [ -d /etc/upstart ] ; then + INIT_TYPE="upstart" + # We'll need that for logging + [ -f /etc/upstart/functions ] && source /etc/upstart/functions +else + INIT_TYPE="sysv" + # We'll need that for logging + [ -f /etc/rc.d/functions ] && source /etc/rc.d/functions +fi + +# Handle logging... +logmsg() +{ + # Use the right tools for the platform + if [ "${INIT_TYPE}" == "sysv" ] ; then + msg "koreader: ${1}" "I" + elif [ "${INIT_TYPE}" == "upstart" ] ; then + f_log I koreader wrapper "" "${1}" + fi + + # And throw that on stdout too, for the DIY crowd ;) + echo "${1}" +} + +# Keep track of what we do with pillow... +PILLOW_DISABLED="no" + +# Detect if we were started by KUAL by checking our nice value... +if [ "$(nice)" == "5" ] ; then + # Yield a bit to let stuff stop properly... + logmsg "Hush now . . ." + # NOTE: This may or may not be terribly useful... + sleep 1 + + # Kindlet threads spawn with a nice value of 5, we aim for the same -2 as the KF8 reader + logmsg "Be nice!" + renice -n -7 $$ +fi + # By default, don't stop the framework. if [ "$1" == "--framework_stop" ] ; then shift 1 STOP_FRAMEWORK="yes" - # Yield a bit to let stuff stop properly... - echo "Stopping framework . . ." - sleep 2 else STOP_FRAMEWORK="no" fi -# Check which type of init system we're using -if [ -d /etc/upstart ] ; then - INIT_TYPE="upstart" -else - INIT_TYPE="sysv" -fi - # we're always starting from our working directory cd /mnt/us/koreader @@ -34,18 +64,21 @@ export TESSDATA_PREFIX="data" export STARDICT_DATA_DIR="data/dict" # accept input ports for zsync plugin +logmsg "Setting up IPTables rules . . ." iptables -A INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT iptables -A INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT # bind-mount system fonts -if ! grep /mnt/us/koreader/fonts/host /proc/mounts ; then +if ! grep /mnt/us/koreader/fonts/host /proc/mounts > /dev/null 2>&1 ; then + logmsg "Mounting system fonts . . ." mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host fi # bind-mount altfonts if [ -d /mnt/us/fonts ] ; then mkdir -p /mnt/us/koreader/fonts/altfonts - if ! grep /mnt/us/koreader/fonts/altfonts /proc/mounts ; then + if ! grep /mnt/us/koreader/fonts/altfonts /proc/mounts > /dev/null 2>&1 ; then + logmsg "Mounting altfonts . . ." mount -o bind /mnt/us/fonts /mnt/us/koreader/fonts/altfonts fi fi @@ -53,13 +86,15 @@ fi # bind-mount linkfonts if [ -d /mnt/us/linkfonts/fonts ] ; then mkdir -p /mnt/us/koreader/fonts/linkfonts - if ! grep /mnt/us/koreader/fonts/linkfonts /proc/mounts ; then + if ! grep /mnt/us/koreader/fonts/linkfonts /proc/mounts > /dev/null 2>&1 ; then + logmsg "Mounting linkfonts . . ." mount -o bind /mnt/us/linkfonts/fonts /mnt/us/koreader/fonts/linkfonts fi fi # check if we are supposed to shut down the Amazon framework -if [ "${STOP_FRAMEWORK}" == "yes" ]; then +if [ "${STOP_FRAMEWORK}" == "yes" ] ; then + logmsg "Stopping the framework . . ." # Upstart or SysV? if [ "${INIT_TYPE}" == "sysv" ] ; then /etc/init.d/framework stop @@ -67,51 +102,69 @@ if [ "${STOP_FRAMEWORK}" == "yes" ]; then # The framework job sends a SIGTERM on stop, trap it so we don't get killed if we were launched by KUAL trap "" SIGTERM stop lab126_gui + # Let things lie a bit so that we don't hit the black screen of no X ;). + sleep 2 + # And remove the trap like a ninja now! + trap - SIGTERM fi fi # check if kpvbooklet was launched for more than once, if not we will disable pillow # there's no pillow if we stopped the framework, and it's only there on systems with upstart anyway if [ "${STOP_FRAMEWORK}" == "no" -a "${INIT_TYPE}" == "upstart" ] ; then - count=`lipc-get-prop -eiq com.github.koreader.kpvbooklet.timer count` - if [ "$count" == "" -o "$count" == "0" ]; then + count=$(lipc-get-prop -eiq com.github.koreader.kpvbooklet.timer count) + if [ "$count" == "" -o "$count" == "0" ] ; then + logmsg "Disabling pillow . . ." lipc-set-prop com.lab126.pillow disableEnablePillow disable + PILLOW_DISABLED="yes" + # NOTE: This may or may not be terribly useful... + sleep 1 fi fi # stop cvm (sysv & framework up only) if [ "${STOP_FRAMEWORK}" == "no" -a "${INIT_TYPE}" == "sysv" ] ; then + logmsg "Stopping cvm . . ." killall -stop cvm fi # finally call reader +logmsg "Starting KOReader . . ." ./reader.lua "$@" 2> crash.log -# clean up forked process in case the reader crashed -if [ "${INIT_TYPE}" == "sysv" ] ; then +# clean up our own process tree in case the reader crashed (if needed, to avoid flooding KUAL's log) +if pidof reader.lua > /dev/null 2>&1 ; then + logmsg "Sending a SIGTERM to stray KOreader processes . . ." killall -TERM reader.lua -else - # We trapped SIGTERM, remember? ;) - killall -KILL reader.lua fi # unmount system fonts -if grep /mnt/us/koreader/fonts/host /proc/mounts ; then +if grep /mnt/us/koreader/fonts/host /proc/mounts > /dev/null 2>&1 ; then + logmsg "Unmounting system fonts . . ." umount /mnt/us/koreader/fonts/host fi # unmount altfonts -if grep /mnt/us/koreader/fonts/altfonts /proc/mounts ; then +if grep /mnt/us/koreader/fonts/altfonts /proc/mounts > /dev/null 2>&1 ; then + logmsg "Unmounting altfonts . . ." umount /mnt/us/koreader/fonts/altfonts fi # unmount linkfonts -if grep /mnt/us/koreader/fonts/linkfonts /proc/mounts ; then +if grep /mnt/us/koreader/fonts/linkfonts /proc/mounts > /dev/null 2>&1 ; then + logmsg "Unmounting linkfonts . . ." umount /mnt/us/koreader/fonts/linkfonts fi -# always try to continue cvm -if ! killall -cont cvm ; then +# Resume cvm (only if we stopped it) +if [ "${STOP_FRAMEWORK}" == "no" -a "${INIT_TYPE}" == "sysv" ] ; then + logmsg "Resuming cvm . . ." + killall -cont cvm +fi + +# Restart framework (if need be) +if [ "${STOP_FRAMEWORK}" == "yes" ] ; then + logmsg "Restarting framework . . ." if [ "${INIT_TYPE}" == "sysv" ] ; then /etc/init.d/framework start else @@ -121,10 +174,15 @@ fi # display chrome bar (upstart & framework up only) if [ "${STOP_FRAMEWORK}" == "no" -a "${INIT_TYPE}" == "upstart" ] ; then - lipc-set-prop com.lab126.pillow disableEnablePillow enable + # Only if we actually killed it... + if [ "${PILLOW_DISABLED}" == "yes" ] ; then + logmsg "Enabling pillow . . ." + lipc-set-prop com.lab126.pillow disableEnablePillow enable + fi fi # restore firewall rules +logmsg "Restoring IPTables rules . . ." iptables -D INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT iptables -D INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT