Files
raspscreen/manage.sh
DaanSelen 7c7aa579f0
All checks were successful
Cross-Compile Binaries / compile-linux (push) Successful in 4m20s
Cross-Compile Binaries / compile-windows (push) Successful in 8m54s
chore: make the manage script more verbose
2026-02-09 15:41:56 +01:00

130 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
#
# Utility to manage the userland program called RaspScreen by Systemec B.V.
#
# Where it should live: /opt/raspscreen/bin/manage.sh
#
# Examples:
# ./manage.sh (restart|stop|start) (presentation|video)
#
# systemctl must be reachable from the path of the executing user.
app_name="raspscreen"
runtime_id=$(id -u)
if [[ "$runtime_id" -eq 0 ]]; then
echo "Do not run as root. Run as the graphical user."
exit 1
fi
printf "Checking input..."
# Action performed
case "$1" in
restart|stop|start|switch-state)
printf "Valid command...";;
*)
echo "Invalid command!"
exit 1;;
esac
# Type to select
case "$2" in
presentation|video)
echo "Valid service...";;
*)
echo "Invalid service!"
exit 1;;
esac
# Foreground or operator mode
case "$3" in
--foreground)
echo "Gathering uptime data..."
sys_uptime=$(cat /proc/uptime | awk '{print int($1)}')
if [[ "$sys_uptime" -lt 60 ]]; then
echo "Detected a recent restart - giving the operating system some time..."
sleep 10s
fi
if [[ "$2" == "presentation" ]]; then
echo "Finding and moving media..."
media_file=$(find /opt/raspscreen/media -path /opt/raspscreen/media/current -prune -o \( -name "*.pptx" -o -name "*.odp" \) -type f -print)
echo "New media file: $media_file"
old_file=$(find /opt/raspscreen/media/current \( -name "*.pptx" -o -name "*.odp" \))
echo "Old file: $old_file"
echo "Copying new media into staging area..."
cp "$media_file" /opt/raspscreen/media/current
current_media=$(find /opt/raspscreen/media/current \( -name "*.pptx" -o -name "*.odp" \))
echo "Prepared media: $current_media"
if [[ -z "$current_media" ]]; then
echo "No compatible media file found. Wrong mode?"
echo "Exiting in 20 seconds..."
sleep 20s
exit 1
else
echo "Starting LibreOffice Present..."
/usr/bin/libreoffice --impress --show --norestore "$current_media"
fi
elif [[ "$2" == "video" ]]; then
echo "Finding and moving media..."
media_file=$(find /opt/raspscreen/media -path /opt/raspscreen/media/current -prune -o \( -name "*.mp4" -o -name "*.mkv" -o -name "*.mov" -o -name "*.webm" \) -print)
echo "New media file: $media_file"
old_file=$(find /opt/raspscreen/media/current \( -name "*.mp4" -o -name "*.mkv" -o -name "*.mov" -o -name "*.webm" \))
echo "Old file: $old_file"
echo "Copying new media into staging area..."
cp "$media_file" /opt/raspscreen/media/current
current_media=$(find /opt/raspscreen/media/current \( -name "*.mp4" -o -name "*.mkv" -o -name "*.mov" -o -name "*.webm" \))
echo "Prepared media: $current_media"
if [[ -z "$current_media" ]]; then
echo "No compatible media file found. Wrong mode?"
echo "Exiting in 20 seconds..."
sleep 20s
exit 1
else
echo "Starting VLC..."
/usr/bin/vlc --fullscreen --loop --no-video-title --video-on-top --no-qt-fs-controller --qt-continue=0 "$current_media"
fi
fi
echo "Process exited..."
exit 0
;;
*)
echo "Running in task mode...";;
esac
echo "Executing task..."
if [[ "$1" != "switch-state" ]]; then
cmd_result=$(systemctl --user "$1" "$2" 2>&1)
cmd_exit=$?
elif [[ "$1" == "switch-state" ]]; then
last_state=$(cat /opt/raspscreen/currentstate.txt)
if [[ "$2" == "video" ]]; then
alt_serv="presentation"
elif [[ "$2" == "presentation" ]]; then
alt_serv="video"
fi
echo "alt_serv: $alt_serv"
if [ "$last_state" != "$2" ] || [ -z "$last_state" ]; then
systemctl --user disable "$alt_serv"
systemctl --user enable "$2"
fi
systemctl --user restart "$2"
echo "$2" > /opt/raspscreen/currentstate.txt
fi
if [[ "$cmd_exit" -eq 0 ]]; then
echo "Succesfully exited!"
else
echo "Something went wrong, see..."
echo " -> $cmd_result"
fi
exit 0