Files
OpenKiosk/distfiles/usr/local/bin/openkiosk
2026-03-04 14:29:28 -05:00

217 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# openkiosk
if [[ "$EUID" == "0" || $(whoami) == "kioskuser" ]]
then
conf_file="/etc/openkiosk/openkiosk.conf"
run_type="standalone"
else
if [[ ! -e "$HOME/.config/openkiosk/openkiosk.conf" ]]
then
mkdir -p $HOME/.config/openkiosk
cp /etc/openkiosk/openkiosk.conf $HOME/.config/openkiosk/
fi
conf_file="$HOME/.config/openkiosk/openkiosk.conf"
run_type="workstation"
fi
if [[ ! -e "$conf_file" ]]
then
echo "Couldn't find config file. Exiting."
exit 1
fi
source $conf_file
function set_commands() {
source $conf_file
if [[ $TGT_URL == "test" ]]
then
# Enter test mode
APP_CMD="xterm"
ALIVE_STRING="xterm"
KILL_CMD="pkill xterm"
CLEANUP_CMD="sleep 1"
debuglog "Entering test mode"
elif echo "$TGT_URL" | grep -q '\.pdf$'
then
# The URL is a pdf file
APP_CMD="kiosk_viewpdf $TGT_URL $conf_file"
ALIVE_STRING="xpdf"
KILL_CMD="pkill xpdf"
CLEANUP_CMD="kiosk_cleanup"
debuglog "URL is a pdf file. Command is $APP_CMD"
else
# Assume the URL returns HTML
APP_CMD="kiosk_viewhtml $TGT_URL $conf_file"
ALIVE_STRING="chromium"
KILL_CMD="pkill chromium"
CLEANUP_CMD="kiosk_cleanup"
debuglog "URL is an HTML file. Command is $APP_CMD"
fi
}
function check_conf() {
debuglog "Checking configuration file for changes."
new_conf_md5=$(md5sum $conf_file|cut -d " " -f1)
debuglog "New config file checksum: $new_conf_md5"
curr_conf_md5=$(cat /dev/shm/curr_conf_md5.txt)
debuglog "Current config file checksum: $curr_conf_md5"
diff <(echo $new_conf_md5) <(echo $curr_conf_md5) >/dev/null 2>&1
if [[ "$?" == "1" ]]
then
debuglog "Config file has changed!"
echo $new_conf_md5 > /dev/shm/curr_conf_md5.txt
debuglog "Killing application"
krestart=true
$KILL_CMD
$CLEANUP_CMD
return 1
else
krestart=false
return 0
fi
}
function check_url() {
debuglog "Checking URL for changes"
if [[ $TGT_URL == "test" ]]
then
return 0
fi
if echo "$TGT_URL"|grep -q '^http'
then
new_url_md5=$(wget -q -o /dev/null -O - $TGT_URL|md5sum|cut -d " " -f1)
elif echo "$TGT_URL"|grep -q '^file'
then
filepath=$(echo "$TGT_URL"|cut -d":" -f2-)
new_url_md5=$(md5sum $filepath|cut -d " " -f1)
else
new_url_md5=""
fi
debuglog "New URL checksum: $new_url_md5"
curr_url_md5=$(cat /dev/shm/curr_url_md5.txt)
debuglog "Current URL checksum: $curr_url_md5"
diff <(echo $new_url_md5) <(echo $curr_url_md5) >/dev/null 2>&1
if [[ "$?" == "1" ]]
then
debuglog "URL has changed!"
echo $new_url_md5>/dev/shm/curr_url_md5.txt
debuglog "Killing application"
krestart=true
$KILL_CMD
$CLEANUP_CMD
return 1
else
krestart=false
return 0
fi
}
function debuglog() {
if [[ "$DEBUG" == "1" ]]
then
logfile="$HOME/openkiosk.log"
if [[ ! -e "$logfile" ]]
then
echo "openkiosk log started : "$(date +%Y-%m-%d %H:%M:%S) > $logfile
fi
echo $(date +%H:%M:%S) "$1">>$logfile
fi
}
function set_blank_params() {
if [[ "$INHIBIT_BLANK" == "1" ]]
then
xset s off
xset -dpms
else
xset s off
xset +dpms
xset dpms $DSP_STBY_SEC $DSP_SUSP_SEC $DSP_OFF_SEC
fi
}
function set_rot_params() {
output_name=$(xrandr --listactivemonitors|grep 0:|rev|cut -d " " -f1|rev)
xrandr --output $output_name --rotate "normal"
sleep 1
xrandr --output $output_name --rotate $ROTATION
}
set_commands
if [[ "$run_type" == "standalone" ]]
then
openbox-session &
fi
sleep 1
set_blank_params
pkill xpdf
pkill chromium
pkill xterm
kiosk_cleanup
# start application
$APP_CMD &
sleep 3
if echo "$TGT_URL"|grep -q '^http'
then
new_url_md5=$(wget -q -o /dev/null -O - $TGT_URL|md5sum|cut -d " " -f1)
elif echo "$TGT_URL"|grep -q '^file'
then
filepath=$(echo "$TGT_URL"|cut -d":" -f2-)
new_url_md5=$(md5sum $filepath|cut -d " " -f1)
else
new_url_md5=""
fi
echo $new_url_md5>/dev/shm/curr_url_md5.txt
new_conf_md5=$(md5sum $conf_file|cut -d " " -f1)
echo $new_conf_md5 > /dev/shm/curr_conf_md5.txt
while true
do
debuglog "Monitoring for URL and config file changes..."
# Pull in changes in the configuration file
debuglog "Reading config file"
source $conf_file
if ! pgrep $ALIVE_STRING >/dev/null 2>&1
then
# relaunch application if it terminates
if $krestart
then
debuglog "Restarting with command $APP_CMD"
$APP_CMD &
else
exit 0
fi
fi
if [[ "$POLL_INTERVAL" == "0" ]]
then
sleep 1
debuglog "Polling not enabled"
if ! check_conf
then
set_blank_params
set_rot_params
set_commands
fi
else
sleep $POLL_INTERVAL
debuglog "Polling enabled"
if ! check_conf
then
set_blank_params
set_rot_params
set_commands
fi
check_url
fi
done
exit 0