Files
Server-scripts/serverhost/WallpaperChangerServer.sh
T
2026-09-14 12:43:38 +02:00

1021 lines
35 KiB
Bash
Executable File

#!/bin/bash
## For laptop lid trigger: Write following in /etc/acpi/events/lm_lid
# event=button/lid.*
# action=/data/DatenLucas/Dokumente/Dokumente/Projekte/Server/scripts/quiethost/wallpaperChanger.sh -l -c
HOST="$(hostname)"
IMG_FOLDER="Desktop1920x1080/"
if [ "${HOST}" == "serverhost" ]; then
LOG_DIR="/torrent/WallpaperChanger/.LOG/"
IMG_DIR="/torrent/WallpaperChanger/"
Wallpaper_Dir="${IMG_DIR}Win10Wallpaper"
PrivKey="file:/home/lucas/Documents/Dokumente/Projekte/Server/quiethost/IMG_privateKey.pem"
elif [ "${HOST}" == "quiethost" ]; then
LOG_DIR="/home/lucas/.LOG/"
IMG_DIR="/data/Nextcloud/Stuff/Wallpaper/"
Wallpaper_Dir="${LOG_DIR}Wallpaper"
PrivKey="file:/data/Nextcloud/Documents/Dokumente/Projekte/Server/quiethost/IMG_privateKey.pem"
elif [ "${HOST}" == "vivohost" ]; then
LOG_DIR="/home/lucas/.LOG/"
IMG_DIR="/home/lucas/Nextcloud/Wallpaper/"
Wallpaper_Dir="${LOG_DIR}Wallpaper"
IMG_FOLDER="Desktop1920x1080/"
fi
X_FOLDER="corrupt"
DAEMON=false
LOG=false
DECODE_SINGLE=false
REMOVE=false
CUSTOM_DIR=false
CONFIG=false
CLEAR_ALL=false
CONFIGFILE="wp.conf"
NAMING_TABLE="naming_table.txt"
NAMING_TABLE_ENC="naming_table_enc.txt"
EXCLUDE_CONFIG_DEF="XXXDEFAULTXXX"
REPLACE_ENC_IMG=false
MONITOR_num_ext=0
DEVICE_CARD="card0"
screen_height_Y=(1080)
screen_width_X=(1920)
X_IMAGE=false
X_INSTA=false
SET=false
repeat_X=1
EDIT_CONFIG=false
usage(){
printf "Usage:
-t <min>\t\tStart DAEMON and Change Image every min Interval
-p <path>\t\tPath of Image folder
-s <search>\t\tChose Search Parameters(everything until next -*)
-ex <exclude>\t\tExclude String from Search
-c\t\t\tUse Config File
-l\t\t\tUse Log File
-elements\tInclude Spectral Lines of Elements Pictures
-clear\t\tClear Config
-h\t\t\tDisplay this
-times <n>\t\tchange image n times
-e\t\t\tEdit Config File
-mon <n>\t\tchange monitor number\n"
}
usageX(){
printf "UsageX:
-x\t\t\tSwitch Source Folder to X
-X\t\t\tClear Config and change Wallpaper
-dec_all\t\tDecode all Images
-dec_leave\t\tLeave used Images decoded
-dec_arg <pattern> -rm(opt)\tDecode certain Images matching pattern *<arg>* and delete entries(opt)
-printNT\t\tDecode NT to stdout
-modifyNT\t\tDecode NT/Encode if decoded NT present
-replace\t\tReplace Image in NT
-insta\t\tInsta Mode
-check_enc\tCheck for decrypted files
-g <pattern>\tGrep NT for pattern <pattern>\n"
}
change_image(){
IMGtype=("Wallpaper" "Screensaver" "Grub" "Login")
EXCLUDE=${EXCLUDE_CONFIG}
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ] && [ "${DAEMON}" == "false" ];then
echo "Check Encryprion"
check_encryption
fi
for IMG in $(find ${IMG_DIR}${IMG_FOLDER} -name '*.jp*g' -or -name '*.JP*G'); do
if [ "$(identify $IMG | grep -iP "jp[e]?g")" != "" ]; then
convert "$IMG" "$(echo $IMG | sed 's/JP[E]\?G/png/g' | sed 's/jp[e]\?g/png/g')"
rm "$IMG"
IMG="$(echo $IMG | sed 's/JP[E]\?G/png/g' | sed 's/jp[e]\?g/png/g')"
fi
done
IMG_NUM_TOTAL=$(find ${IMG_DIR}${IMG_FOLDER} -name '*.png' | wc -l)
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ];then
echo "Decode Naming Table"
file_path="${IMG_DIR}${IMG_FOLDER}/"
if [ -f "${file_path}${NAMING_TABLE_ENC}" ];then
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE_ENC}" -out "${file_path}${NAMING_TABLE}" -pass "${PrivKey}"
fi
fi
ConvertSTR=""
time_stamp=$(date +'%d%m%y_%H%M%S')
if [[ "${HOST}" == "quiethost" ]] || [[ "${HOST}" == "vivohost" ]]; then
Wallpaper_Str="${LOG_DIR}Wallpaper/Wallpaper_${time_stamp}"
else
Wallpaper_Str="${IMG_DIR}Win10Wallpaper/Wallpaper_${time_stamp}"
fi
Wallpaper_TriLite_Str="${IMG_DIR}TriLiteWallpaper/Wallpaper_${time_stamp}"
imageWidthFinal=0
echo Mon: ${MONITOR_num}
for (( j=0;j<${MONITOR_num};j++ )); do # j = Screen
ind=$(($j))
img_fit_counter=0;
IMG_FIT=false
while ! $IMG_FIT; do
if [ ${#SEARCH[@]} -eq 1 ]; then
ind=0
fi
SEARCH_PARAMETER=${SEARCH[${ind}]}
SEARCH_NUM="$(echo ${SEARCH_PARAMETER} | grep -oE "[[:digit:]]{2}")"
SEARCH_STR="$(echo ${SEARCH_PARAMETER} | grep -oE "[^[:digit:]]+")"
echo "Search Parameter: ${SEARCH_STR} - ${SEARCH_NUM}, exclude ${EXCLUDE}"
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ];then
IMG_count=$(cat "${file_path}${NAMING_TABLE}" | cut -f1 -d';' | grep -i "${SEARCH_STR}.*${SEARCH_NUM}" | grep -iv "${EXCLUDE}" | grep -v "_decrypted" | wc -l)
else
IMG_count=$(find ${IMG_DIR}${IMG_FOLDER} -name '*.png' | grep -i "${SEARCH_STR}.*${SEARCH_NUM}" | grep -iv "${EXCLUDE}" | grep -v "_decrypted" | wc -l)
fi
if [ ${IMG_count} -eq 0 ];then
echo "No image found for ${SEARCH_STR}"
if [ "${SEARCH_STR}" == "" ];then
exit 1
else
SEARCH=""
continue
fi
else
echo "${IMG_count} Images found"
fi
NUM=$(($RANDOM % $IMG_count))
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ];then
IFS=$'\n'; set -f
IMG_ARR=($(cat "${file_path}${NAMING_TABLE}" | cut -f1 -d';' | grep -i "${SEARCH_STR}.*${SEARCH_NUM}" | grep -iv "${EXCLUDE}"))
IMG_ENC_ARR=($(cat "${file_path}${NAMING_TABLE}" | grep "$(echo ${IMG_ARR[@]} | sed 's/ /\\\|/g')" | cut -f2 -d';'))
unset IFS; set +f
else
IFS=$'\n'; set -f
IMG_ARR=($(find ${IMG_DIR}${IMG_FOLDER} -name '*.png' | grep -i "${SEARCH_STR}.*${SEARCH_NUM}" | grep -iv "${EXCLUDE}" | grep -v "_decrypted"))
unset IFS; set +f
fi
IMG=${IMG_ARR[$NUM]}
for (( k=0;k<${#IMAGES[@]};k++ ));do
if [[ ("${SEARCH[0]}" != "${SEARCH_PARAMETER}" && "${SEARCH_NUM}" != "" ) || ("${SEARCH[0]}" == "${SEARCH_PARAMETER}" && "${SEARCH_NUM}" == "") ]]; then
counter=0;
while [[ "${IMG}" == ${IMAGES[$k]} && ${counter} -lt ${IMG_count} ]]; do
echo Disable Same Image
NUM=$(($RANDOM % $IMG_count))
IMG=${IMG_ARR[$NUM]}
((counter++))
done
fi
done
IMAGES[${j}]=$IMG
#echo Ind $j Imgas ${IMAGES[${j}]} Img $IMG
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ];then
echo "Decrypt Image"
IMG_DEC=${file_path}${IMG}
IMG_ENC=${IMG_ENC_ARR[$NUM]}
if [ -f "${file_path}${IMG_DEC}" ]; then
echo "File Name already present: ${IMG_DEC}"
IMG_DEC="$(echo "${IMG_DEC}" | sed 's/.png/_DOUBLE_'"${RANDOM}"'\.png/g')"
fi
openssl enc -aes-256-cbc -pbkdf2 -d -in "${file_path}${IMG_ENC}" -out "${IMG_DEC}" -pass "${PrivKey}"
if [ $? -eq 0 ]; then
echo "Decryption Succesfull"
else
echo "Decryption failed"
fi
IMG=${IMG_DEC}
fi
if [[ "$(echo ${IMG} | grep "Elements/Elements_")" != "" ]]; then
for ((k=0;k<3;k++)); do
POINTSIZE=24
IFS=$'\n'; set -f
IMG_ARR2=($(find ${IMG_DIR}${IMG_FOLDER} -name '*.png' | grep "Elements/Elements_" | grep -v "${IMG}"))
unset IFS; set +f
IMG_count2=${#IMG_ARR2[@]}
NUM=$(($RANDOM % $IMG_count2))
IMG2=${IMG_ARR2[$NUM]}
convert -append $IMG $IMG2 "${LOG_DIR}NextCombined.png"
NUM=$(echo $IMG | grep -o -P '(?<=Panorama_).*(?=.png)' | cut -f1 -d'_')
NUM2=$(echo $IMG2 | grep -o -P '(?<=Panorama_).*(?=.png)' | cut -f1 -d'_')
LET=$(echo $IMG | grep -o -P '(?<=Panorama_).*(?=.png)' | cut -f2 -d'_')
LET2=$(echo $IMG2 | grep -o -P '(?<=Panorama_).*(?=.png)' | cut -f2 -d'_')
NAME=$(echo $IMG | grep -o -P '(?<=Panorama_).*(?=.png)' | cut -f3 -d'_')
NAME2=$(echo $IMG2 | grep -o -P '(?<=Panorama_).*(?=.png)' | cut -f3 -d'_')
NAME="$(printf "%s %s %s" "$NUM" "$LET" "$NAME")"
if [ "$( echo ${NAME} | grep -o "[A-Za-z]")" == "" ]; then NAME=${NAME_BUF}; fi
NAME2="$(printf "%s %s %s" "$NUM2" "$LET2" "$NAME2")"
if [ $(( ${k}%2 )) -eq 0 ]; then
y_1=$(( 510 + k*540 ));
y_2=$(( 580 + k*540 ));
convert -font helvetica -fill white -pointsize ${POINTSIZE} -draw "text 20,'${y_1}' '${NAME}' text 20,'${y_2}' '${NAME2}'" "${LOG_DIR}NextCombined.png" "${LOG_DIR}NextCombined.png"
fi
IMG="${LOG_DIR}NextCombined.png"
NAME_BUF=${NAME2}
done
fi
## Aspect Ratio Part
imageAR=$(getAspectRatio ${IMG})
printf "Mon: %d: $(echo ${IMG} | rev | cut -f1 -d'/' | rev) ImAR: %s - MonAR: %s - ScrAR: %s\n" "${j}" "${imageAR}" "${screen_Aspect_Ratio[$j]}" "${screenAR}"
if [[ "$IMG" == "" ]]; then exit; fi
BIGIMG=false
AR_tolerance="0.26"
Wallpaper_Name="${Wallpaper_Str}_${j}.png"
img_width_X="$(identify $IMG | cut -f3 -d' ' | cut -f1 -d'x')"
if [ $(echo ${imageAR}'=='${screenAR} | bc -l) -eq 1 ]; then
# if [ ${MONITOR_num} -eq 1 ]; then break; fi
echo "Copy $((${screen_width_X[$j]}*${MONITOR_num}))x${screen_height_Y[$j]} Image - ${Wallpaper_Str}.png"
cp "$IMG" "${Wallpaper_Str}.png"
IMG_FIT=true
BIGIMG=true
((imageWidthFinal=${imageWidthFinal}+$(sum_ARR ${screen_width_X[@]})))
j=${MONITOR_num}
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ] && ! ${DECODE_SINGLE} ;then
echo "Remove Decrypted Image"
rm ${IMG}
fi
break
elif [[ $(echo ${imageAR}'<'${screenAR}'*(1+'${AR_tolerance}')' | bc -l) -eq 1 && $(echo ${imageAR}'>'${screenAR}'*(1-'${AR_tolerance}')' | bc -l) -eq 1 ]] ;then
# if [ ${MONITOR_num} -eq 1 ]; then break; fi
echo "Convert Image with smaller AR to $((${screen_width_X[$j]}*${MONITOR_num}))x${screen_height_Y[$j]} - ${Wallpaper_Str}.png"
convert "$IMG" -resize $((${screen_width_X[$j]}*${MONITOR_num}))x${screen_height_Y[$j]}\! "${Wallpaper_Str}.png"
IMG_FIT=true
BIGIMG=true
((imageWidthFinal=${imageWidthFinal}+$(sum_ARR ${screen_width_X[@]})))
j=${MONITOR_num}
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ] && ! ${DECODE_SINGLE} ;then
echo "Remove Decrypted Image"
rm "${IMG}"
fi
break
elif [ $(echo ${imageAR}'=='${screen_Aspect_Ratio[$j]} | bc -l) -eq 1 ]; then
img_height_Y="$(identify $IMG | cut -f3 -d' ' | cut -f2 -d'x')"
#echo "${img_width_Y}x${img_height_X}:${screen_width_X[$j]}x${screen_height_Y[$j]}"
if [[ "${img_width_X}" != "${screen_width_X[$j]}" || "${img_height_Y}" != "${screen_height_Y[$j]}" ]]; then
echo "Convert Image with same AR to ${screen_width_X[$j]}x${screen_height_Y[$j]} - ${Wallpaper_Name}"
IMG_FIT=true
convert "$IMG" -resize ${screen_width_X[$j]}x${screen_height_Y[$j]}\! "${Wallpaper_Name}"
ConvertSTR="${ConvertSTR} ${Wallpaper_Name}"
else
echo "Copy Image with same AR ${screen_width_X[$j]}x${screen_height_Y[$j]} Image - ${Wallpaper_Name}"
#convert image.png -resize 100x100 -gravity center -background "rgb(255,0,255)" -extent 100x100 out.png
IMG_FIT=true
cp "$IMG" "${Wallpaper_Name}"
ConvertSTR="${ConvertSTR} ${Wallpaper_Name}"
fi
((imageWidthFinal=${imageWidthFinal}+${screen_width_X[$j]}))
elif [ $(echo 2*${imageAR}'=='${screen_Aspect_Ratio[$j]} | bc -l) -eq 1 ]; then
img_height_Y="$(identify $IMG | cut -f3 -d' ' | cut -f2 -d'x')"
if [[ $(echo ${img_width_X}'=='2*${screen_width_X[$j]} | bc -l) -eq 1 && $(echo ${img_height_Y}'=='${screen_height_Y[$j]} | bc -l) -eq 1 ]]; then
echo ${imageWidthFinal}+2*${screen_width_X[$j]}'<='$(sum_ARR ${screen_width_X[@]})
if [[ $(echo ${imageWidthFinal}+2*${screen_width_X[$j]}'>='$(sum_ARR ${screen_width_X[@]}) | bc -l) -eq 1 ]]; then
echo Image size too big, reduce Size
if [[ $(echo ${SEARCH[${ind}]} | grep Panorama) != "" ]];then
SEARCH[${ind}]=""
fi
continue;
fi
echo "Copy Image with same AR 2 * ${screen_width_X[$j]}x${screen_height_Y[$j]} Image - ${Wallpaper_Name}"
((imageWidthFinal=${imageWidthFinal}+2*${screen_width_X[$j]}))
#convert image.png -resize 100x100 -gravity center -background "rgb(255,0,255)" -extent 100x100 out.png
IMG_FIT=true
cp "$IMG" "${Wallpaper_Name}"
((j++));
ConvertSTR="${ConvertSTR} ${Wallpaper_Name}"
fi
elif [[ $(echo ${imageAR}'<'${screen_Aspect_Ratio[$j]}'*(1+'${AR_tolerance}')' | bc -l) -eq 1 && $(echo ${imageAR}'>'${screen_Aspect_Ratio[$j]}'*(1-'${AR_tolerance}')' | bc -l) -eq 1 ]]; then
echo "Convert Image with smaller AR to ${screen_width_X[$j]}x${screen_height_Y[$j]} - ${Wallpaper_Name}"
convert "$IMG" -resize ${screen_width_X[$j]}x${screen_height_Y[$j]}\! "${Wallpaper_Name}"
cp "$IMG" "$( echo "${IMG}_bak" | sed 's/_decrypted//g')"
IMG_FIT=true
cp "${Wallpaper_Name}" "$IMG"
ConvertSTR="${ConvertSTR} ${Wallpaper_Name}"
((imageWidthFinal=${imageWidthFinal}+${screen_width_X[$j]}))
else
echo "Image ${IMG} out of bounds"
fi
((img_fit_counter++))
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ] && ! ${DECODE_SINGLE} ;then
echo "Remove Decrypted Image"
rm "${IMG}"
fi
if [ $img_fit_counter -ge $IMG_NUM_TOTAL ]; then
echo "No Images Found. Change Search Parameter"
break
fi
done
done
echo Image Width: ${imageWidthFinal}px
if ! $BIGIMG; then
echo "Convert BigImg"
echo "convert ${ConvertSTR} to "${Wallpaper_Name}""
convert ${ConvertSTR} -gravity center -background black +append "${Wallpaper_Str}.png"
chmod 777 "${Wallpaper_Str}.png"
#echo "rm ${ConvertSTR}"
fi
if [[ "${HOST}" == "quiethost" ]] || [[ "${HOST}" == "vivohost" ]]; then
typeGnomeOpt=("background" "screensaver")
i=0
WC_USER="lucas"
if [[ "$(whoami)" == "root" ]]; then
chown ${WC_USER}:${WC_GROUP} ${Wallpaper_Str}*png
echo "file://${Wallpaper_Str}.png"
if [ "$(su ${WC_USER} -c "gsettings get org.gnome.desktop.${typeGnomeOpt[${i}]} picture-uri-dark")" != "'file://${Wallpaper_Str}.png'" ]; then
echo Set gsettings ${typeGnomeOpt[${i}]} picture-uri
su ${WC_USER} -c "gsettings set org.gnome.desktop.${typeGnomeOpt[${i}]} picture-uri-dark file://${Wallpaper_Str}.png"
su ${WC_USER} -c "gsettings set org.gnome.desktop.${typeGnomeOpt[${i}]} picture-uri file://${Wallpaper_Str}.png"
fi
if [ "$(su ${WC_USER} -c "gsettings get org.gnome.desktop.${typeGnomeOpt[${i}]} picture-options")" != "'spanned'" ]; then
echo Set gsettings ${typeGnomeOpt[${i}]} picture-options
su ${WC_USER} -c "gsettings set org.gnome.desktop.${typeGnomeOpt[${i}]} picture-options spanned"
fi
else
if [ "$(gsettings get org.gnome.desktop.${typeGnomeOpt[${i}]} picture-uri-dark)" != "'file://${Wallpaper_Str}.png'" ]; then
echo Set gsettings picture-uri
gsettings set org.gnome.desktop.${typeGnomeOpt[${i}]} picture-uri-dark file://${Wallpaper_Str}.png
gsettings set org.gnome.desktop.${typeGnomeOpt[${i}]} picture-uri file://${Wallpaper_Str}.png
fi
if [ "$(gsettings get org.gnome.desktop.${typeGnomeOpt[${i}]} picture-options)" != "'spanned'" ]; then
echo Set gsettings ${typeGnomeOpt[${i}]} picture-options
gsettings set org.gnome.desktop.${typeGnomeOpt[${i}]} picture-options spanned
fi
fi
fi
if [ "${IMG_FOLDER}" == "${X_FOLDER}" ] ;then
echo "Remove Naming Table"
rm "${file_path}${NAMING_TABLE}"
elif [[ "${HOST}" == "serverhost" ]]; then
TRILITE_IMAGES=( "Berg" "Space" "Kamerun" "Stadt" "Foto" "Music")
COPY_TR=1
#echo "${IMAGES[@]}"
for ELEM in "${IMAGES[@]}"; do
COPY_TR1=0
echo "ELEM: $ELEM"
for KEYWORD in "${TRILITE_IMAGES[@]}"; do
#echo "KEY: $KEYWORD"
if [[ "$(echo ${ELEM} | grep ${KEYWORD})" != "" ]]; then
printf "%s,%s\n" "${ELEM##*/}" "${KEYWORD}"
COPY_TR1=1
#else
# echo "Key ${KEYWORD} not found"
fi
done
if [[ ${COPY_TR1} -eq 0 ]]; then
printf "No keyword found in %s\n" "${ELEM##*/}"
fi
COPY_TR=$((${COPY_TR} && ${COPY_TR1}))
done
if [[ ${COPY_TR} -eq 1 ]] && [[ "${HOST}" != "quiethost" ]]; then
cp "${Wallpaper_Str}.png" "${Wallpaper_TriLite_Str}.png"
echo "Copy Image to Trilite Folder"
fi
find ${IMG_DIR}TriLiteWallpaper/ -mmin +50 -type f -delete
fi
find ${Wallpaper_Dir} -type f -name Wallpaper_${time_stamp}_* -delete
find ${Wallpaper_Dir} -mmin +50 -type f -delete
if [ $(id -u) -eq 0 ] && [ "${HOST}" == "serverhost" ]; then
echo "Delete $(find /nextcloud/nextcloud-data/lucas/files_trashbin/files/ -type f -name Wallpaper_*png\.d*)"
find /nextcloud/nextcloud-data/lucas/files_trashbin/files/ -type f -name Wallpaper_*png\.d* -delete
find /nextcloud/nextcloud-data/lucas/files_trashbin/files/ -type f -name Sexy_*png\.d* -delete
chown -R lucas:lucas ${IMG_DIR}Win10Wallpaper/*
fi
}
getAspectRatio() {
if [ "$1" == "" ]; then return "0"; fi
identify "$1" | perl -ne '/(.+?)\s+[A-Z]{3}\s+(\d+)x(\d+)/; print $3/$2, "\n"'
}
decode_all() {
echo "Decode all Images"
IMG_FOLDER_TMP="${X_FOLDER}"
file_path="${IMG_DIR}${IMG_FOLDER_TMP}/"
if [ -f "${file_path}${NAMING_TABLE_ENC}" ];then
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE_ENC}" -out "${file_path}${NAMING_TABLE}" -pass "${PrivKey}"
fi
for file in $(find ${IMG_DIR}${IMG_FOLDER_TMP} -name '*.png_enc' | sort); do
if [ "$(identify ${file} 2>>/dev/null | grep "PNG")" == "" ]; then
DEC_NAME="$(cat "${file_path}${NAMING_TABLE}" | grep "$(echo ${file} | rev | cut -f1 -d'/' | rev)" | cut -f1 -d';')"
if [ "${DEC_NAME}" == "" ]; then
DEC_NAME="$(cat ${file_path}NT/* | grep "$(echo ${file} | rev | cut -f1 -d'/' | rev)" | head -1 | cut -f1 -d';')"
if [ "${DEC_NAME}" == "" ]; then
echo "DEC_NAME empty"
echo "File: ${file}"
echo "DEC_NAME: ${DEC_NAME}"
DEC_NAME="Sexy_MISSING_${RANDOM}.png"
else
echo "Found ${DEC_NAME} in NT Folder"
fi
fi
DEC_NAME="${file_path}${DEC_NAME}"
if [ -f "${file_path}${DEC_NAME}" ]; then
echo "File Name already present: ${DEC_NAME}"
DEC_NAME="$(echo "${DEC_NAME}" | sed 's/.png/_DOUBLE_'"${RANDOM}"'\.png/g')"
else
echo "Decode ${file} to ${DEC_NAME}"
fi
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file}" -out "${DEC_NAME}" -pass "${PrivKey}"
if [ $? -eq 0 ]; then
rm ${file}
else
echo "Decryption failed, exit"
echo "${file} to ${DEC_NAME}"
exit
fi
fi
done
rm "${file_path}${NAMING_TABLE_ENC}"
rm "${file_path}${NAMING_TABLE}"
}
check_encryption() {
IMG_FOLDER="${X_FOLDER}"
ENC_FILE_COUNT=0;
file_path="${IMG_DIR}${IMG_FOLDER}/"
for IMG in $(find ${IMG_DIR}New -name '*.jp*g' -or -name '*.JP*G'); do
echo Found $IMG in New
if [ "$(identify $IMG | grep -iP "jp[e]?g")" != "" ]; then
convert "$IMG" "$(echo $IMG | sed 's/JP[E]\?G/png/g' | sed 's/jp[e]\?g/png/g')"
rm "$IMG"
IMG="$(echo $IMG | sed 's/JP[E]\?G/png/g' | sed 's/jp[e]\?g/png/g')"
fi
done
if [ $(ls ${IMG_DIR}New/*png 2>>/dev/null | wc -l ) -gt 0 ]; then
echo "Move to ${IMG_FOLDER}:"
ls ${IMG_DIR}New/*png
mv ${IMG_DIR}New/*png ${IMG_DIR}/${IMG_FOLDER}/
fi
for file in $(find ${IMG_DIR}${IMG_FOLDER} -name '*.png_enc'); do
ENC_FILE_ARR[${ENC_FILE_COUNT}]=${file}
((ENC_FILE_COUNT++))
done
((ENC_FILE_COUNT--))
IFS=$'\n' ENC_FILE_ARR=($(sort <<<"${ENC_FILE_ARR[*]}"))
unset IFS
if [ -f "${file_path}${NAMING_TABLE_ENC}" ];then
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE_ENC}" -out "${file_path}${NAMING_TABLE}" -pass "${PrivKey}"
elif [ ! -f "${file_path}${NAMING_TABLE}" ]; then
touch "${file_path}${NAMING_TABLE}"
fi
for file in $(find ${IMG_DIR}${IMG_FOLDER} -name '*.png' | sort); do
if [ "$(identify ${file} 2>>/dev/null | grep "PNG")" != "" ]; then
if [ ${#ENC_FILE_ARR[@]} -eq 0 ]; then
ENC_FILE_COUNT=0
ENC_NAME_CORE="0"
cat "${file_path}${NAMING_TABLE}"
else
ENC_NAME_CORE=$(( $(echo "${ENC_FILE_ARR[${ENC_FILE_COUNT}]}" | cut -d'.' -f1 | rev | cut -f1 -d'/' | rev | bc) + 1))
((ENC_FILE_COUNT++))
fi
ENC_NAME="$(printf "%05d" ${ENC_NAME_CORE}).png_enc"
ENC_FILE_ARR[${ENC_FILE_COUNT}]=${ENC_NAME}
if [ -f "${file_path}${ENC_NAME}" ]; then
echo "File Name already present: ${ENC_NAME}"
ENC_NAME="$(echo "${ENC_NAME_CORE}")_DOUBLE_${RANDOM}.png_enc"
else
echo "Encode ${file} to ${ENC_NAME}"
fi
file_identifier="$( echo "${file}" | rev | cut -f1 -d'/' | rev)"
if [ -f "${file_path}${NAMING_TABLE}" ];then
if [ "$(cat "${file_path}${NAMING_TABLE}" | grep "${file_identifier}")" != "" ] && ! ${REPLACE_ENC_IMG} ; then
echo "Identifier ${file_identifier} already present, changing to"
file_identifier="$(echo "${file_identifier}" | sed 's/\.png/_enc_DOUBLE_'"${RANDOM}"'\.png/g')"
echo "${file_identifier}"
echo "${file_identifier};${ENC_NAME}" >> "${file_path}${NAMING_TABLE}"
elif [ "$(cat "${file_path}${NAMING_TABLE}" | grep "${file_identifier}")" != "" ] && ${REPLACE_ENC_IMG} ; then
ENC_NAME="$(cat "${file_path}${NAMING_TABLE}" | grep "${file_identifier}" | cut -d';' -f2)"
echo "Identifier ${file_identifier} already present, replacing image ${ENC_NAME}"
else
echo "${file_identifier};${ENC_NAME}" >> "${file_path}${NAMING_TABLE}"
fi
fi
openssl enc -aes-256-cbc -pbkdf2 -salt -in "${file}" -out "${file_path}${ENC_NAME}" -pass "${PrivKey}"
rm "${file}"
fi
done
openssl enc -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE}" -out "${file_path}${NAMING_TABLE_ENC}" -pass "${PrivKey}"
rm "${file_path}${NAMING_TABLE}"
IMG_FOLDER="${X_FOLDER}"
echo Check Encryption Done
}
decode_images() {
echo "Decode All *$1*"
IMG_FOLDER_TMP="${X_FOLDER}"
file_path="${IMG_DIR}${IMG_FOLDER_TMP}/"
dec_file_path="${IMG_DIR}New/"
if [ -f "${file_path}${NAMING_TABLE_ENC}" ];then
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE_ENC}" -out "${file_path}${NAMING_TABLE}" -pass "${PrivKey}"
fi
files=($(cat "${file_path}${NAMING_TABLE}" | grep -e ".*$1.*" | cut -f2 -d';'))
for file in ${files[@]}; do
if [ "$(identify ${file} 2>>/dev/null | grep "PNG")" == "" ]; then
naming_table_line=$(cat "${file_path}${NAMING_TABLE}" | grep "$(echo ${file} | rev | cut -f1 -d'/' | rev)")
DEC_NAME="${dec_file_path}$(echo ${naming_table_line} | cut -f1 -d';')"
if [ "$(echo ${naming_table_line} | grep -e ".*$1.*")" == "" ]; then
continue
fi
if [ -f "${DEC_NAME}" ]; then
echo "File Name already present: ${DEC_NAME}"
DEC_NAME="$(echo "${DEC_NAME}" | sed 's/.png/_DOUBLE_'"${RANDOM}"'\.png/g')"
else
echo "Decode ${DEC_NAME}"
fi
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${file}" -out "${DEC_NAME}" -pass "${PrivKey}"
if [[ "${REMOVE}" == "true" ]]; then
echo "Remove line ${naming_table_line} from Naming Table"
sed -i '/'"${naming_table_line}"'/d' ${file_path}${NAMING_TABLE}
echo "Remove ${file_path}${file}"
rm "${file_path}${file}"
fi
fi
done
openssl enc -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE}" -out "${file_path}${NAMING_TABLE_ENC}" -pass "${PrivKey}"
rm "${file_path}${NAMING_TABLE}"
}
printNamingTable() {
IMG_FOLDER_TMP="${X_FOLDER}/"
file_path="${IMG_DIR}${IMG_FOLDER_TMP}/"
if [ -f "${file_path}${NAMING_TABLE_ENC}" ];then
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE_ENC}" -pass "${PrivKey}" | grep -i "$1" | sort
else
echo "No Naming Table under ${file_path}${NAMING_TABLE_ENC}"
fi
}
modifyNT() {
IMG_FOLDER_TMP="${X_FOLDER}/"
file_path="${IMG_DIR}${IMG_FOLDER_TMP}"
NAMING_TABLE="naming_table_mod.txt"
if [ -f "${file_path}${NAMING_TABLE_ENC}" ];then
if [ ! -f "${file_path}${NAMING_TABLE}" ];then
openssl enc -d -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE_ENC}" -out "${file_path}${NAMING_TABLE}" -pass "${PrivKey}"
echo "Decrypting to ${file_path}${NAMING_TABLE}"
if [ $# -eq 0 ]; then
vim ${file_path}${NAMING_TABLE}
modifyNT
fi
else
openssl enc -aes-256-cbc -pbkdf2 -salt -in "${file_path}${NAMING_TABLE}" -out "${file_path}${NAMING_TABLE_ENC}" -pass "${PrivKey}"
rm "${file_path}${NAMING_TABLE}"
echo "Encrypting to ${file_path}${NAMING_TABLE_ENC}"
fi
else
echo "No Naming Table under ${file_path}${NAMING_TABLE_ENC}"
fi
}
logfile_cleanup(){
size=$(ls -l $LOG_FILE | cut -f5 -d' ')
echo Logfile Size: $size
if [ $size -gt 100000 ]; then
lines=$(wc -l $LOG_FILE | cut -f1 -d' ')
lines_new=$(($lines / 2))
echo Lines: $lines
echo Lines_new: $lines_new
sed -i "1,${lines_new}d" $LOG_FILE
exec 1>>${LOG_FILE} 2>&1
fi
}
sum_ARR(){
arr=($@)
if [ ${#arr[@]} -eq 0 ]; then return 0; fi
IFS='+'; set -f
sum=$(echo "scale=1;${arr[*]}"|bc)
unset IFS; set +f
echo $sum
}
get_screensize(){
CONN_COUNT=0
if [[ "${HOST}" == "vivohost" ]]; then
cards=($(ls /sys/class/drm/ | grep card[0-9] | grep -v -))
for ((i=0;i<${#cards[@]};i++)); do
DEVICE_CARD=${cards[$i]}
devices=($(ls /sys/class/drm/${DEVICE_CARD}/ | grep "${DEVICE_CARD}-" | cut -f2- -d'-'))
echo ${devices[@]}
for ((j=0;j<${#devices[@]};j++)); do
status=$(cat /sys/class/drm/${DEVICE_CARD}/${DEVICE_CARD}-"${devices[${j}]}"/status)
enabled=$(cat /sys/class/drm/${DEVICE_CARD}/${DEVICE_CARD}-"${devices[${j}]}"/enabled)
echo ${status} ${enabled}
if [ "${status}" == "connected" ] && [ "${enabled}" == "enabled" ]; then
((CONN_COUNT++))
mon_dev[$i]=/sys/class/drm/${DEVICE_CARD}/${DEVICE_CARD}-${devices[${j}]}
echo "mon_dev: $mon_dev"
fi
done
done
elif [[ "${HOST}" == "quiethost" ]]; then
if [ "$(ls /sys/class/drm/${DEVICE_CARD}/ | grep "${DEVICE_CARD}-")" == "" ]; then
printf "Wrong Device Card: %s -> " "${DEVICE_CARD}"
DEVICE_CARD="card1"
printf "New: %s\n" "${DEVICE_CARD}"
fi
IFS=$'\n'; set -f
devices=($(ls /sys/class/drm/${DEVICE_CARD}/ | grep "${DEVICE_CARD}-" | cut -f2- -d'-'))
unset IFS; set +f
CONN_COUNT=0
for ((i=0;i<${#devices[@]};i++)); do
echo "Device: ${devices[${i}]}"
devices_name[${i}]=$(echo ${devices[${i}]}| grep -o "[[:alpha:]]*" | grep -m1 "[[:alpha:]]*")
devices_num[${i}]=$(echo ${devices[${i}]}|rev| grep -o "[[:digit:]]" | grep -m1 "[[:digit:]]")
status[${i}]=$(cat /sys/class/drm/${DEVICE_CARD}/${DEVICE_CARD}-"${devices[${i}]}"/status)
enabled[${i}]=$(cat /sys/class/drm/${DEVICE_CARD}/${DEVICE_CARD}-"${devices[${i}]}"/enabled)
if [ $(echo ${devices[${i}]} | grep "eDP" | wc -l) -ge 1 ]; then
if [ $(grep "wallpaperChanger.sh" /etc/acpi/events/lm_lid 2>/dev/null | wc -l) -eq 0 ]; then
echo "ERROR: No laptop lid trigger file: /etc/acpi/events/lm_lid"
fi
if [ $(grep "open" /proc/acpi/button/lid/LID0/state | wc -l) -eq 0 ]; then
status[${i}]="disconnected"
echo "Laptop Lid closed"
else
echo "Laptop Lid open"
fi
fi
if [ "${status[${i}]}" == "connected" ] && [ "${enabled[${i}]}" == "enabled" ]; then
((CONN_COUNT++))
mon_dev[$i]=/sys/class/drm/${DEVICE_CARD}/${DEVICE_CARD}-${devices[${j}]}
echo "mon_dev: $mon_dev"
fi
echo "${devices[${i}]}: ${status[${i}]}, ${enabled[${i}]}"
done
fi
if [[ "${HOST}" == "quiethost" ]] || [[ "${HOST}" == "vivohost" ]];then
MONITOR_FILE="/home/lucas/.config/monitors.xml"
echo "Open Monitor File"
CONFIG_ARR=($(cat ${MONITOR_FILE} | tr '\n' ';' | sed 's/ \+//g' | sed 's/<\/configuration>/<\/configuration>\n/g' | grep "<configuration>"))
for ((j=0;j<${#CONFIG_ARR[@]};j++)); do
CONFIG_ARR[$j]="$(echo "${CONFIG_ARR[$j]}" | tr ';' '\n')"
MONITOR_COUNT=$(echo "${CONFIG_ARR[$j]}" | grep -c "<logicalmonitor>")
CONFIG_SUCCESS=true
echo "Connected Monitors: $CONN_COUNT"
echo "Configured Monitors: $MONITOR_COUNT"
if [ $CONN_COUNT -ne $MONITOR_COUNT ]; then
continue
else
echo Continue with correct monitors
fi
for ((i=0;i<${#mon_dev[@]};i++)); do
CONFIG_TEST=${CONFIG_ARR[$j]}
if [ "${status[${i}]}" == "connected" ]; then
echo "${mon_dev[${i}]}/device/device/graphics/fb0/virtual_size"
SIZE_X="$(cat "${mon_dev[${i}]}/device/device/graphics/fb0/virtual_size" | cut -f1 -d',')"
SIZE_Y="$(cat "${mon_dev[${i}]}/device/device/graphics/fb0/virtual_size" | cut -f2 -d',')"
CONFIG_TEST="$(echo "${CONFIG_TEST}" | tr '\n' ';' | sed 's/<\/logicalmonitor>;/<\/logicalmonitor>\n/g' | grep "${devices_name[${i}]}" | grep "${devices_num[${i}]}" | grep ";<width>${SIZE_X}</width>;<height>${SIZE_Y}</height>;")"
CONFIG_TEST=="Hack"
fi
if [ "${CONFIG_TEST}" == "" ]; then
CONFIG_SUCCESS=false
echo "Wrong Monitor"
fi
done
if ${CONFIG_SUCCESS}; then
echo "Correct Config found"
CONFIG_NEW="${CONFIG_ARR[$j]}"
else
echo "Wrong Monitor"
fi
# CONFIG_ARR_NEW[$j]="$(echo "${CONFIG_ARR[$j]}" | grep "<connector>${devices[${i}]}")"
done
if [ $CONN_COUNT -eq 1 ]; then
for ((i=0;i<${#devices[@]};i++)); do
if [ "${status[${i}]}" == "connected" ]; then
echo "i:$i, ${mon_dev[${i}]}/device/device/graphics/fb0/virtual_size"
SIZE_X="$(cat "${mon_dev[${i}]}/device/device/graphics/fb0/virtual_size" | cut -f1 -d',')"
SIZE_Y="$(cat "${mon_dev[${i}]}/device/device/graphics/fb0/virtual_size" | cut -f2 -d',')"
POS="<x>0</x>"
CONFIG_NEW="<width>$SIZE_X</width>\n<height>$SIZE_Y</height>\n$POS\n"
else
echo Status of ${devices[$i]} not connected
fi
done
fi
if [ "$CONFIG_NEW" == "" ]; then
echo "Abort: Monitor Information not consistent"
exit
fi
IFS=$'\n'; set -f
screen_width_X=($(echo -e "$CONFIG_NEW" | grep "width" | grep -o "[[:digit:]]*"))
screen_height_Y=($(echo -e "$CONFIG_NEW" | grep "height" | grep -o "[[:digit:]]*"))
screen_pos_X=($(echo -e "$CONFIG_NEW" | grep "<x>" | grep -o "[[:digit:]]*"))
unset IFS; set +f
for ((i=0; i<${#screen_width_X[@]} ; i++ )); do
screen_Aspect_Ratio[${i}]=$(perl -E "say ${screen_height_Y[${i}]}/${screen_width_X[${i}]}")
done
screenAR=$(perl -E "say ${screen_height_Y[0]}/$(sum_ARR ${screen_width_X[@]})")
MONITOR_num=$((${#screen_width_X[@]}))
elif [ "${HOST}" == "serverhost" ]; then
MONITOR_FILE="monitors.cfg"
if [ ${MONITOR_num_ext} -gt 0 ]; then
MONITOR_FILE="monitors${MONITOR_num_ext}.cfg"
echo "Change monitor file to ${MONITOR_FILE}"
fi
MONITOR_num=$(cat ${IMG_DIR}.LOG/${MONITOR_FILE} | grep Mon | cut -f2 -d':')
IFS=':'; set -f; read -r -a screen_width_X <<< $(cat ${IMG_DIR}.LOG/${MONITOR_FILE} | grep X | tr -d 'X')
IFS=':'; set -f; read -r -a screen_height_Y <<< $(cat ${IMG_DIR}.LOG/${MONITOR_FILE} | grep Y | tr -d 'Y')
unset IFS; set +f
for ((i=0; i<${#screen_width_X[@]} ; i++ )); do
screen_Aspect_Ratio[${i}]=$(perl -E "say ${screen_height_Y[${i}]}/${screen_width_X[${i}]}")
done
screenAR=$(perl -E "say ${screen_height_Y[0]}/$(sum_ARR ${screen_width_X[@]})")
fi
}
clear_all() {
> ${LOG_DIR}${CONFIGFILE}
CONFIG=true;
IMG_FOLDER="Desktop1920x1080/"
}
sync_image() {
echo "Sync Nextcloud"
if [ "${HOST}" == "serverhost" ]; then
if [ $(id -u) -eq 0 ]; then
sudo -u lucas /usr/bin/syncNC > /dev/null 2>&1
else
/usr/bin/syncNC > /dev/null 2>&1
fi
fi
}
get_config() {
while [[ ${1:0:1} == - ]]; do
echo "Param: $1"
[[ $1 == -clear ]] && {
CLEAR_ALL=true;
shift 1;
continue;
}
[[ $1 == -t ]] && {
if [ $# -lt 2 ]; then
usage
exit
fi
minutes=$2;
DAEMON=true;
MODE="daemon";
LOG=true;
shift 2;
continue;
};
[[ $1 == -screen ]] && {
if [ $# -lt 2 ]; then
usage
exit
fi
SIZE=$2;
shift 2;
continue;
};
[[ $1 == -mon ]] && {
if [ $# -lt 2 ]; then
usage
exit
fi
MONITOR_num_ext=$2;
shift 2;
continue;
};
[[ $1 == -p ]] && {
if [ $# -lt 2 ]; then
usage
exit
fi
CUSTOM_DIR=true;
IMG_DIR=$2;
shift 2;
continue;
};
[[ $1 == -s ]] && {
if [ $# -lt 2 ]; then
SEARCH=""
else
counter=0
while (true); do
if [[ "$2" == "-"* || "$2" == "" ]]; then shift 1; break; fi
SEARCH[$counter]=$2
((counter++))
shift 1
done
fi
continue;
};
[[ $1 == -c ]] && {
CONFIG=true;
shift 1;
continue;
};
[[ $1 == -set ]] && {
if [ $# -lt 2 ]; then
usageX
exit
fi
SET=true
shift 1;
SET_TO="$*"
continue;
exit
};
[[ $1 == -l ]] && {
LOG=true;
shift 1;
continue;
};
[[ $1 == -x ]] && {
X_IMAGE=true;
X_FOLDER="corrupt"
IMG_FOLDER="${X_FOLDER}"
shift 1;
continue;
};
[[ $1 == -h ]] && {
usage
exit 0;
};
[[ $1 == -hX ]] && {
usageX
exit 0;
};
[[ $1 == -check_enc ]] && {
sync_image
check_encryption
sync_image
exit 0;
};
[[ $1 == -ex ]] && {
EXCLUDE_CONFIG="$2"
shift 2;
};
[[ $1 == -dec_leave ]] && {
DECODE_SINGLE=true
shift 1;
continue;
};
[[ $1 == -e ]] && {
EDIT_CONFIG=true;
shift 1;
continue;
};
[[ $1 == -insta ]] && {
X_INSTA=true
X_FOLDER="insta"
IMG_FOLDER="${X_FOLDER}"
shift 1;
continue;
};
[[ $1 == -dec_arg ]] && {
arg=$2;
shift 2;
[[ $1 == -rm ]] && {
REMOVE=true
shift 1;
};
decode_images "${arg}"
sync_image
exit 0;
};
[[ $1 == -rm ]] && {
shift 1;
REMOVE=true
};
[[ $1 == -dec_all ]] && {
decode_all
exit
};
[[ $1 == -printNT ]] && {
printNamingTable
shift 1;
exit 0;
};
[[ $1 == -g ]] && {
printNamingTable "$2"
shift 2;
exit 0;
};
[[ $1 == -modifyNT ]] && {
modifyNT
shift 1;
exit 0;
}
[[ $1 == -decNT ]] && {
modifyNT -leave
shift 2;
exit 0;
}
[[ $1 == -replace ]] && {
REPLACE_ENC_IMG=true
shift 1;
continue;
}
[[ $1 == -times ]] && {
repeat_X=$2;
shift 2;
continue;
}
echo "Parameter $1 discarded"
exit
shift 1;
done
}
echo Start $0 $@
SEARCH=""
MODE="user";
#EXCLUDE_CONFIG=${EXCLUDE_CONFIG_DEF}
EXCLUDE_CONFIG="elements"
get_config "$@"
if $CLEAR_ALL; then
clear_all
find ${Wallpaper_Dir} -type f -name "*.png" -delete
if [ $(id -u) -eq 0 ]; then
sudo -u lucas /usr/bin/syncNC > /dev/null 2>&1
else
/usr/bin/syncNC > /dev/null 2>&1
fi
fi
if $SET; then
echo "$SET_TO" > ${LOG_DIR}${CONFIGFILE}
fi
if $EDIT_CONFIG; then
vim "${LOG_DIR}${CONFIGFILE}"
fi
if $CONFIG; then
IFS=$' '; set -f
get_config $(cat "${LOG_DIR}${CONFIGFILE}")
unset IFS; set +f
fi
if $X_IMAGE; then
X_FOLDER="corrupt"
IMG_FOLDER="${X_FOLDER}"
fi
if $X_INSTA; then
X_FOLDER="insta"
IMG_FOLDER="${X_FOLDER}"
fi
if $LOG; then
LOG_FILE="${LOG_DIR}wallpaperchanger_${MODE}.log"
ls $LOG_DIR >> /dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo "Directory $LOG_DIR not present"
exit 1
fi
exec 1>>${LOG_FILE} 2>&1
date
fi
if $CUSTOM_DIR; then
if [ "$(echo "${IMG_DIR: -1}")" == "/" ]; then
IMG_FOLDER="$(echo ${IMG_DIR} | rev | cut -f2 -d'/' | rev)/"
IMG_DIR="$(echo ${IMG_DIR} | rev | cut -f3- -d'/' | rev)/"
else
IMG_FOLDER="$(echo ${IMG_DIR} | rev | cut -f1 -d'/' | rev)/"
IMG_DIR="$(echo ${IMG_DIR} | rev | cut -f2- -d'/' | rev)/"
fi
echo ${IMG_FOLDER}
echo ${IMG_DIR}
fi
ls ${IMG_DIR}${IMG_FOLDER} >> /dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo "Directory ${IMG_DIR}${IMG_FOLDER} not present"
exit 1
fi
get_screensize
if [ "${screenAR}" == "0.5625" ]; then
EXCLUDE_CONFIG="Panorama"
fi
echo "Monitor Number: ${MONITOR_num}"
echo "Screen Width: ${screen_width_X[@]}"
echo "Screen Height: ${screen_height_Y[@]}"
echo "Screen Pos: ${screen_pos_X[@]}"
echo "Monitor Aspect Ratio: ${screen_Aspect_Ratio[@]} - Screen: ${screenAR}"
echo "Dir: ${IMG_DIR}${IMG_FOLDER}"
echo "User: $(whoami)"
if ${DAEMON}; then
if [ "`echo $minutes | egrep ^[[:digit:]]+$`" = "" ];then
echo "$minutes is not an Integer"
exit
else
echo "Interval: $minutes min"
fi
echo "Start DAEMON"
sleep_time=$(( $minutes * 60 ))
while [[ 1 -eq 1 ]]; do
if $CONFIG; then
IMG_FOLDER="Desktop1920x1080/"
IFS=$' '; set -f
get_config $(cat "${LOG_DIR}${CONFIGFILE}")
unset IFS; set +f
fi
get_screensize
change_image
sync_image
date
logfile_cleanup
echo "DAEMON Mode"
sleep $sleep_time
done
else
if [ $repeat_X -gt 1 ]; then
echo "Change Image ${repeat_X} times"
fi
for (( i=0; i<$repeat_X ; i++ )); do
change_image
sleep 1
done
sync_image
fi
exit 0