159 lines
3.2 KiB
Bash
Executable File
159 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Uncomment the following line to get debug info
|
|
#set -x
|
|
|
|
SELF="$(basename ${0})"
|
|
LAUNCHER_FILE="$HOME/Launchers/launcher.txt"
|
|
FRONTEND_FILE="$HOME/.frontend"
|
|
PREVENT_LAUNCHER_FILE="/mnt/prevent_launcher"
|
|
DISABLE_FRONTEND_FILE="/mnt/disable_frontend"
|
|
DEFAULT_FRONTEND=retrofe
|
|
LOCK_FILE="/var/lock/frontend.lock"
|
|
REBOOTING_FILE="/run/rebooting"
|
|
LAST_OPK_FILE="/mnt/last_opk"
|
|
|
|
# Convert old launcher file to new frontend
|
|
if [ -f "${LAUNCHER_FILE}" ]; then
|
|
mv "${LAUNCHER_FILE}" "${FRONTEND_FILE}"
|
|
rm -rf $(dirname "${LAUNCHER_FILE}") 2>/dev/null
|
|
fi
|
|
|
|
# Convert old prevent launcher file to new frontend disable file
|
|
if [ -f "${PREVENT_LAUNCHER_FILE}" ]; then
|
|
mv "${PREVENT_LAUNCHER_FILE}" "{DISABLE_FRONTEND_FILE}"
|
|
fi
|
|
|
|
usage() {
|
|
>&2 echo "Usage: ${SELF} init"
|
|
>&2 echo " ${SELF} get"
|
|
>&2 echo " ${SELF} set gmenu2x|retrofe|none"
|
|
exit 1
|
|
}
|
|
|
|
set_frontend() {
|
|
mkdir -p "$(dirname "$FRONTEND_FILE")"
|
|
local frontend=$(get_frontend)
|
|
local new_frontend="${1}"
|
|
echo "Setting frontend: ${new_frontend}"
|
|
if [ "${new_frontend}" = "none" ]; then
|
|
touch "${DISABLE_FRONTEND_FILE}"
|
|
else
|
|
rm -f "${DISABLE_FRONTEND_FILE}"
|
|
fi
|
|
if [ "${frontend}" != "none" ]; then
|
|
pkill "${frontend}"
|
|
fi
|
|
echo "${new_frontend}" > "${FRONTEND_FILE}"
|
|
}
|
|
|
|
get_frontend() {
|
|
local frontend=$(cat "${FRONTEND_FILE}" 2>/dev/null | head -1)
|
|
|
|
# Check if not empty
|
|
if [ "x${frontend}" = "x" ]; then
|
|
frontend="${DEFAULT_FRONTEND}"
|
|
echo "${frontend}" > "${FRONTEND_FILE}"
|
|
fi
|
|
|
|
# Return frontend name
|
|
echo "${frontend}"
|
|
}
|
|
|
|
init_frontend() {
|
|
if [ -f "${LOCK_FILE}" ]; then
|
|
>&2 echo "${LOCK_FILE} already exists"
|
|
exit 1
|
|
fi
|
|
touch "${LOCK_FILE}"
|
|
|
|
# Then loop to launch the frontend indefinitely
|
|
while true; do
|
|
|
|
# Check if frontend disable file is present
|
|
if [ -f "${DISBALE_FRONTEND_FILE}" ]; then
|
|
echo "${DISABLE_FRONTEND_FILE} file found, not starting frontend"
|
|
sleep 5
|
|
else
|
|
|
|
# Umount any remaining OPK, if any
|
|
umount /opk >/dev/null 2>&1
|
|
rm -f "${LAST_OPK_FILE}"
|
|
|
|
local frontend="$(get_frontend)"
|
|
case "${frontend}" in
|
|
gmenu2x|retrofe)
|
|
"${frontend}"&
|
|
;;
|
|
|
|
none)
|
|
echo "no frontend"
|
|
sleep 5
|
|
;;
|
|
|
|
*)
|
|
DEFAULT_FRONTEND=retrofe
|
|
echo "Unrecognized frontend: $frontend, setting $DEFAULT_FRONTEND"
|
|
set_frontend "${DEFAULT_FRONTEND}"
|
|
;;
|
|
esac
|
|
|
|
# Record the PID into a file, wait for the process to
|
|
# terminate and erase the recorded PID
|
|
pid record $!
|
|
wait $!
|
|
pid erase
|
|
|
|
# In case retrofe/opkrun quits with errors, clear graphic VT
|
|
termfix_all
|
|
|
|
# In case retrofe/opkrun quits with errors, reset default key mapping
|
|
keymap default
|
|
fi
|
|
|
|
# Prevent 100% CPU usage
|
|
sleep 0.5
|
|
|
|
# Exit if console rebooting
|
|
if [ -f "${REBOOTING_FILE}" ]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Remove lock file and exit
|
|
rm "${LOCK_FILE}"
|
|
}
|
|
|
|
# Check number of arguments
|
|
if [ ${#} -lt 1 -o ${#} -gt 2 ]; then
|
|
usage
|
|
fi
|
|
|
|
case "${1}" in
|
|
set)
|
|
if [ ${#} -ne 2 ]; then
|
|
usage
|
|
fi
|
|
set_frontend "${2}"
|
|
;;
|
|
|
|
get)
|
|
if [ ${#} -ne 1 ]; then
|
|
usage
|
|
fi
|
|
get_frontend
|
|
;;
|
|
|
|
init)
|
|
if [ ${#} -ne 1 ]; then
|
|
usage
|
|
fi
|
|
init_frontend
|
|
;;
|
|
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|
|
exit 0
|