#!/usr/bin/env bash
## 
## ./script ${RESOLUTION} ${VERSION_CODENAME} ${STATE_MODE}
##   RESOLUTION:
##	1024x768  #1.33 (4:3)
##	2048x1536 #1.33 (4:3)
##	1440x1080 #1.33 (4:3)
##	2560x2048 #1.25 (5:4)
##	1920x1080 #1.77 (16:9)
##	3840x2160 #1.77 (16:9)
##	3440x1440 #2.38 (21:9)
##	1440x900  #1.60 (16:10)
##	2560x1600 #1.60 (16:10)
##	2560x1440 #1.77 (19:10) 2K QHD 1440p
##	3840x2160 #1.77 (16:9) 4K UHD 2160p
##	3840x1600 #2.40 (12:5) 4K UHD 1600p
##	4096x2160 #1.89 (256:135) 4K UHD 2160p
##	4096x1416 #2.89 (1024:429) 4K UHD 1416p
##	3996x2160 #1.85 (999:540) 4K UHD 2160p
##	5120x2160 #2.37 (:) 5K UHD 2160p
##	7680x4320 #1.77(16:9 17:9 21:9) 8K UHD 4320p
##	10240x4320 #2.37 (21:9) 10K 4320p

##   VERSION_CODENAME:
##	ublinux_db
##	ublinux_de
##	ublinux_edu
##	ublinux_srv
##	ublinux_exp
##	ublinux_de_adara
##	ublinux_srv_adara
##	ublinux_de_sibsutis
##	ublinux_edu_sibsutis
##	ublinux_srv_sibsutis
##	ublinux_liveoffice
##	ublinux_unknown
##   STATE_MODE
## 	"changes" 		# Полное сохранение ub.mode=changes
##	"toxzm" or "machines" 	# Сохранение в модуль ub.mode=toxzm ub.mode=machines
##	"/"			# Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes
##	""			# Полная песочница RAM ub.mode= (clean); ub.home=
## 	""			# Полная песочница HDD ub.mode=clear; ub.home=
## При запуске в ручную, получим изображения в каталоге: /tmp/ublinux_bg

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no

. /usr/lib/ublinux/functions
. /usr/lib/ublinux/default
debug_mode "$0" "$@"

SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/theme; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/video; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null


    #ROOTDIR=${PWD}
    [[ -n $1 ]] && [[ -n $2 ]] && BUILD_MANUAL=yes
    [[ -z ${BUILD_MANUAL} && ${DISPLAYMANAGER} == "none" ]] && exit
    [[ -z ${BUILD_MANUAL} && ${BACKGROUND_DE} == @(none|no|disable) && ${BACKGROUND_DM} == @(none|no|disable) ]] && exit 0

    source_img_dir="${ROOTDIR}/usr/share/ublinux/backgrounds/source"	#Каталог с исходниками изображений
    wallpapers_tmp="${ROOTDIR}/tmp/ublinux_bg"				#Каталог скомпиллированных изображений
    wallpapers_dst="${ROOTDIR}/usr/share/backgrounds/ublinux"		#Каталог скомпиллированных изображений
    default_de_img="${wallpapers_dst%/*}/background.jpg"
    default_dm_img="${wallpapers_dst%/*}/dm.jpg"
    bg_desktop_basic="bg_db.png"		# Фон для Desktop Basic
    bg_desktop_enterprise="bg_de.png"		# Фон для Desktop Enterprise
    bg_education="bg_edu.png"			# Фон для Education
    bg_expert="bg_exp.png"			# Фон для Expert
    bg_server="bg_srv.png"			# Фон для Server
    bg_liveoffice="bg_lo.png"			# Фон для LiveOfice
    shadow_img="shadow.png"			# Затенение
    hex_img="hex.png"				# Сетка из шестигранников
    transparent="transparent.png"		# Изображение прозрачный пиксель
    logo_img="logo.png"				# Логотип исходный
    logo_desktop_basic="logo_db.png"		# Изображение редакции дистрибутива
    logo_desktop_enterprise="logo_de.png"	# Изображение редакции дистрибутива
    logo_education="logo_edu.png"		# Изображение редакции дистрибутива
    logo_expert="logo_exp.png"			# *Deprecated* Изображение редакции дистрибутива
    logo_server="logo_srv.png" 			# Изображение редакции дистрибутива
    logo_light="logo_light.png"			# Изображение свечения логотипа
    logo_adara="logo_adara.png"			# Изображение редакции дистрибутива Adara
    logo_sibsutis="logo_sibsutis.png"		# Изображение редакции дистрибутива SibSUTIS
    logo_liveoffice="logo_liveoffice.png"	# Изображение редакции дистрибутива LiveOffice
    logo_clue_img="logo_clue.png"		# Имя склееного логотипа с редакцией дистрибутива

    img_state_bg_de="bg_icon_state_de.png"	# Фон для иконки режима сохранения (рабочий стол)
    img_state_bg_dm="bg_icon_state_dm.png"	# Фон для иконки режима сохранения (гритер)
    img_nosave="icon_state_ro.png"		# Иконка для режима "без сохранения"
    img_fullsave="icon_state_rw.png"		# Иконка для режима "полное сохранение"
    img_homesave="icon_state_uw.png"		# Иконка для режима "сохранение home"
    img_modulesave="icon_state_mw.png"		# Иконка для режима "сохранение в модуль"

    passwd_block_img="passwd_text.png"		# Изображение с текстом для FirstSart
    wp_de_filename="tmp_wp_de.jpg"		# Имя файла обоев
    wp_dm_filename="tmp_wp_dm.jpg"		# Имя файла фона гритера
    shadow_level="175"				# Степень затенения обоев рабочего стола в %, где 100 - исходная яркость, <100 - светлее, >100 - темнее
    declare -A MONITORS
    RESOLUTION=

#    Функция получения всех видеовыходов с максимальными разрешениями
#    В теле основном:
#	declare -A MONITORS
#    Входной параметр: имя переменной массива
#	get_max_resolution "MONITORS"
#    Выходной параметр: заполненный массив, вида
#	card0-HDMI-A-1:1920x2000
#	card0-DP-1:1920x1080
#	card0-VGA-1:1280x720
#    RESOLUTION:1920x2000
get_max_resolution(){
    # Метод определения разрешения №1, подходит для свободных драйверов KMS
    # Без драйверов по VGA не находит разрешение
	local max_mode=				# Максимальное разрешение из всех мониторов
	local video_output= video_name= video_modes= max_mode= line_mode= pixel_line_mode= pixel_max_mode= pixel_max_mode_all=
	while IFS= read -u3 -r -d $'\0' video_output; do
	    if [[ $(cat ${video_output}) =~ ^"connected"$ ]]; then
		video_name="${video_output%/*}"; video_name="${video_name##*/}"
		video_modes="${video_output%/*}/modes"
		[[ -f ${video_modes} ]] || continue
		max_mode="0"
		while IFS= read -u4 -r line_mode; do
	    	    pixel_line_mode=$(echo ${line_mode} | tr -d "i" | tr x "*" | bc)
		    [[ "${line_mode}" == "1440x900" ]] && pixel_line_mode=$( echo ${pixel_line_mode} + 14721 | bc) # fix 1440x900 > 1280x1024
	    	    pixel_max_mode=$(echo ${max_mode} | tr -d "i" | tr x "*" | bc)
	    	    [[ ${pixel_line_mode} -gt ${pixel_max_mode} ]] && max_mode=$(echo ${line_mode} | tr -d "i")
		    pixel_max_mode_all=$(echo ${RESOLUTION} | tr -d "i" | tr x "*" | bc)
		    [[ ${pixel_line_mode} -gt ${pixel_max_mode_all} ]] && RESOLUTION=$(echo ${line_mode} | tr -d "i")
		done 4< ${video_modes}
		MONITORS[${video_name}]=${max_mode}
	    fi
	done 3< <(find /sys/class/drm/*/ -type f -name status -print0 2>/dev/null)
    # Метод определения разрешения №2
    # из конфига /etc/ublinux/video по статическим заданным разрешениям
    [[ -n "${XORG_MONITOR[@]}" ]] && declare -n MONITOR=XORG_MONITOR
    [[ -n "${XRANDR_MONITOR[@]}" ]] && declare -n MONITOR=XRANDR_MONITOR
        if [[ ${#MONITOR[@]} -ne 0 ]]; then
    	    local VIDEO_PORT= VIDEO_PORT_PARAM= pixel_line_mode= pixel_max_mode= RESOLUTION_MAX=
    	    for VIDEO_PORT in "${!MONITOR[@]}"; do
        	while IFS= read -u3 -r VIDEO_PORT_PARAM; do
            	    if grep -Eiq "^[0-9]*x[0-9]*$|^[0-9]*x[0-9]*x[0-9]*$" <<< "${VIDEO_PORT_PARAM}"; then
                	RESOLUTION="$(sed 's/\([0-9]*\*[0-9]*\) .*/\1/' <<< ${VIDEO_PORT_PARAM//x/*})"
                	# fix 1440x900 > 1280x1024
                	#[[ "${RESOLUTION}" == "1440*900" ]] && pixel_line_mode=$(bc <<< "${RESOLUTION}+14721") || pixel_line_mode=$(bc <<< ${RESOLUTION})
                	[[ "${RESOLUTION}" == "1440*900" ]] && pixel_line_mode=$((${RESOLUTION}+14721)) || pixel_line_mode=$((${RESOLUTION}))
                	[[ ${pixel_line_mode} -gt ${pixel_max_mode} ]] && pixel_max_mode=${pixel_line_mode} && RESOLUTION_MAX=${RESOLUTION}
            	    fi
        	done 3<  <(tr ',' '\n' <<< "${MONITOR[${VIDEO_PORT}]}")
    	    done
    	    [[ -n ${RESOLUTION_MAX} ]] && RESOLUTION=${RESOLUTION_MAX//\*/x}
        fi

    # Метод определения разрешения №99, при условии запущенного lightdm
    local PATH_XAUTHORITY="/var/lib/lightdm/.Xauthority"
    [[ -z ${RESOLUTION} && -f ${PATH_XAUTHORITY} && -n $(ls /tmp/.X11-unix/X* 2>/dev/null) ]] \
	&& RESOLUTION=$(XAUTHORITY=${PATH_XAUTHORITY} xrandr -d $(ls /tmp/.X11-unix 2>/dev/null | tr 'X' ':' | head -n 1) 2>/dev/null | grep "*" | xargs | cut -d" " -f1)
#	$(xrandr -d :0 --current | sed -n 's/.* connected \([0-9]*\)x\([0-9]*\)+.*/\1x\2/p')

}

build_logo_ublinux_all(){
# Склейка логотипа UBLinux со свечением
    [[ -n ${logo_light} ]] && convert "${source_img_dir}/${logo_light}" "${source_img_dir}/${logo_img}" -gravity center -background none +smush -710 "${wallpapers_tmp}/tmp_${logo_clue_img}" \
	|| cp "${source_img_dir}/${logo_img}" "${wallpapers_tmp}/tmp_${logo_clue_img}"
# Конвеер вставки логотипа редакции ОС
    [[ -n ${edition_img} ]] && composite -geometry ${geometry_edition_wp} -gravity east "${source_img_dir}/${edition_img}" "${wallpapers_tmp}/tmp_${logo_clue_img}" "${wallpapers_tmp}/tmp_${logo_clue_img}"

# Конвеер вставки логотипа суббренда
    if [[ -n ${geometry_adara_wp} ]]; then
	img_logo_width="$(identify "${wallpapers_tmp}/tmp_${logo_clue_img}" | cut -d" " -f3 | cut -d"x" -f1)"
	img_adara_width="$(identify "${source_img_dir}/${logo_adara}" | cut -d" " -f3 | cut -d"x" -f1)"
	img_logo_width=$((${img_logo_width}+${img_adara_width}))
	convert "${wallpapers_tmp}/tmp_${logo_clue_img}" -gravity west -background none -extent "${img_logo_width}x" "${wallpapers_tmp}/tmp_${logo_clue_img}"
	composite -geometry "${geometry_adara_wp}" -gravity east "${source_img_dir}/${logo_adara}" "${wallpapers_tmp}/tmp_${logo_clue_img}" "${wallpapers_tmp}/tmp_${logo_clue_img}"
    elif [[ -n ${geometry_sibsutis_wp} ]]; then
	img_logo_width=$(identify "${wallpapers_tmp}/tmp_${logo_clue_img}" | cut -d" " -f3 | cut -d"x" -f1)
	convert "${wallpapers_tmp}/tmp_${logo_clue_img}" -gravity west -background none -extent "${img_logo_width}x" "${wallpapers_tmp}/tmp_${logo_clue_img}"
	composite -geometry "${geometry_sibsutis_wp}" -gravity north "${source_img_dir}/${logo_sibsutis}" "${wallpapers_tmp}/tmp_${logo_clue_img}" "${wallpapers_tmp}/tmp_${logo_clue_img}"
    fi
}

build_background_all(){
# Наложение градиентного затемнения DE
    convert -composite "${background}" "${source_img_dir}/${shadow_img}" "${wallpapers_tmp}/${wp_de_filename}"
# Наложение градиентного затемнения DM
    cp "${wallpapers_tmp}/${wp_de_filename}" "${wallpapers_tmp}/${wp_dm_filename}"
}

build_background_de(){
# Наложение сетки шестигранников DE
    convert -composite "${wallpapers_tmp}/${wp_de_filename}" "${source_img_dir}/${hex_img}" "${wallpapers_tmp}/${wp_de_filename}"
# Конвеер вставки объединенного логотипа на фон DE
    composite -geometry "$geometry_logo_wp" -gravity west "${wallpapers_tmp}/tmp_${logo_clue_img}" "${wallpapers_tmp}/${wp_de_filename}" "${wallpapers_tmp}/${wp_de_filename}"
# Затенения обоев рабочего стола
    convert "${wallpapers_tmp}/${wp_de_filename}" -level 0,${shadow_level}% "${wallpapers_tmp}/${wp_de_filename}"
}

build_background_dm(){
# Вычисление коэффициента скейлинга
    img_hight=$(identify ${background} | cut -d" " -f3 | cut -d"x" -f2)
    ratio_scale=$(echo "scale=2;${img_hight}/${hight}" | bc)
#    echo RS=${ratio_scale}
    tmp_logo_clue_hight=$(identify "${wallpapers_tmp}/tmp_${logo_clue_img}" | cut -d" " -f3 | cut -d"x" -f2)
    nsize_logo_clue_hight=$(echo "scale=0;$tmp_logo_clue_hight/${ratio_scale}" | bc)
#    echo RSCF Logo=$nsize_logo_clue_hight
    convert "${wallpapers_tmp}/tmp_${logo_clue_img}" -resize "x${nsize_logo_clue_hight}" "${wallpapers_tmp}/tmp_dm_${logo_clue_img}"
    convert "${wallpapers_tmp}/tmp_dm_${logo_clue_img}" -resize 35% "${wallpapers_tmp}/tmp_dm_${logo_clue_img}"
    x_shift=$(echo "scale=0;150/${ratio_scale}" | bc)
    y_shift=$(echo "scale=0;170/${ratio_scale}" | bc)
#    echo "LOGO ${x_shift} on ${y_shift px}"
# Конвеер вставки объединенного уменьшенного логотипа на фон DM
    composite -geometry +${x_shift}+${y_shift} "${wallpapers_tmp}/tmp_dm_${logo_clue_img}" "${wallpapers_tmp}/${wp_dm_filename}" "${wallpapers_tmp}/${wp_dm_filename}"
}

insert_background_dm_txtpass(){
# Вычисление коэффициента скейлинга
    img_hight=$(identify ${background} | cut -d" " -f3 | cut -d"x" -f2)
    ratio_scale=$(echo "scale=2;${img_hight}/${hight}" | bc)
    tmp_passwd_text_hight=$(identify "${source_img_dir}/$passwd_block_img" | cut -d" " -f3 | cut -d"x" -f2)
    nsize_passwd_text_hight=$(echo "scale=0;${tmp_passwd_text_hight}/${ratio_scale}" | bc)
    x_shift_text=$(echo "scale=0;0/${ratio_scale}" | bc)
    y_shift_text=$(echo "scale=0;370/${ratio_scale}" | bc)
#    echo "TXT ${x_shift_text} on ${y_shift_text} px"
#    echo RSCF first=${nsize_passwd_text_hight}
    convert "${source_img_dir}/${passwd_block_img}" -resize "x${nsize_passwd_text_hight}" -colorspace RGB "${wallpapers_tmp}/tmp_${passwd_block_img}"
    composite -geometry +${x_shift_text}+${y_shift_text} -gravity NorthEast "${wallpapers_tmp}/tmp_${passwd_block_img}" "${default_dm_img}" "${default_dm_img}"
}

# $1 Файл иконки для вставки
insert_background_icon(){
# Вычисление коэффициента скейлинга
    img_hight=$(identify ${background} | cut -d" " -f3 | cut -d"x" -f2)
    ratio_scale=$(echo "scale=2;${img_hight}/${hight}" | bc)
# DM
    # bg icon
    tmp_state_icon_bg_hight=$(identify ${source_img_dir}/${img_state_bg_dm} | cut -d" " -f3 | cut -d"x" -f2)
    nsize_state_icon_bg_hight=$(echo "scale=0;${tmp_state_icon_bg_hight}/${ratio_scale}" | bc)
    x_shift_img_bg=$(echo "scale=0;-160/${ratio_scale}" | bc)
    y_shift_img_bg=$(echo "scale=0;170/${ratio_scale}" | bc)
    convert "${source_img_dir}/${img_state_bg_dm}" -resize x${nsize_state_icon_bg_hight} -colorspace RGB "${wallpapers_tmp}/tmp_${img_state_bg_dm}"
    composite -geometry +${x_shift_img_bg}+${y_shift_img_bg} -gravity NorthEast "${wallpapers_tmp}/tmp_${img_state_bg_dm}" "${default_dm_img}" "${default_dm_img}"
    # icon
    tmp_state_icon_hight=$(identify ${source_img_dir}/$1 | cut -d" " -f3 | cut -d"x" -f2)
    nsize_state_icon_hight=$(echo "scale=0;${tmp_state_icon_hight}/(${ratio_scale}*1.5)" | bc) #"
    x_shift_img=$(echo "scale=0;120/${ratio_scale}" | bc)
    y_shift_img=$(echo "scale=0;168/${ratio_scale}" | bc)
    convert "${source_img_dir}/$1" -resize x${nsize_state_icon_hight} -colorspace sRGB "${wallpapers_tmp}/tmp_state.png"
    composite -geometry +${x_shift_img}+${y_shift_img} -gravity NorthEast "${wallpapers_tmp}/tmp_state.png" "${default_dm_img}" "${default_dm_img}"
# DE
    # bg icon
    tmp_state_icon_bg_hight=$(identify ${source_img_dir}/${img_state_bg_de} | cut -d" " -f3 | cut -d"x" -f2)
    nsize_state_icon_bg_hight=$(echo "scale=0;${tmp_state_icon_bg_hight}/${ratio_scale}" | bc)
    x_shift_img_bg=$(echo "scale=0;1785/${ratio_scale}" | bc)
    y_shift_img_bg=$(echo "scale=0;0/${ratio_scale}" | bc)
    convert "${source_img_dir}/${img_state_bg_de}" -resize x${nsize_state_icon_bg_hight} -colorspace RGB "${wallpapers_tmp}/tmp_${img_state_bg_de}"
    composite -geometry +${x_shift_img_bg}+${y_shift_img_bg} -gravity NorthWest "${wallpapers_tmp}/tmp_${img_state_bg_de}" "${default_de_img}" "${default_de_img}"
    # icon
    tmp_state_icon_hight=$(identify "${source_img_dir}/$1" | cut -d" " -f3 | cut -d"x" -f2)
    nsize_state_icon_hight=$(echo "scale=0;${tmp_state_icon_hight}/(${ratio_scale}*1.5)" | bc) #"
    x_shift_img=$(echo "scale=0;1940/${ratio_scale}" | bc)
    y_shift_img=$(echo "scale=0;50/${ratio_scale}" | bc)
    convert "${source_img_dir}/$1" -resize x${nsize_state_icon_hight} -colorspace sRGB "${wallpapers_tmp}/tmp_state.png"
    composite -geometry +${x_shift_img}+${y_shift_img} -gravity NorthWest "${wallpapers_tmp}/tmp_state.png" "${default_de_img}" "${default_de_img}"
}

# Test get resolution || Проверить массив мониторов с разрешениями
#	get_max_resolution "array_monitor_modes"
#	for key in "${!MONITORS[@]}"; do
#		echo "${key}:${MONITORS[${key}]}"
#	done
#	echo "${RESOLUTION}"

    mkdir -p "${wallpapers_tmp}"
#    [[ -L ${wallpapers_dst} ]] || mkdir -p ${wallpapers_dst}
    if [[ ! -d ${wallpapers_dst} ]]; then
	mkdir -p $(readlink ${wallpapers_dst}) || mkdir -p "${wallpapers_dst}"
    fi

    #grep -q "xres=" /proc/cmdline 2>/dev/null && RESOLUTION=$(cat /proc/cmdline | awk -F xres= '{print $2}' | awk '{print $1}')
    #xres=$(cmdline_value desktop) && [[ ! -z ${xres} ]] && RESOLUTION=${xres}
    xres=$(cmdline_value xres) && [[ -n ${xres} ]] && RESOLUTION=${xres}

# Определение разрешения экрана
    [[ -n $1 ]] && [[ $1 =~ ^([[:digit:]]+'x'[[:digit:]]+)$ ]] && RESOLUTION=${BASH_REMATCH[1]}
    [[ ${RESOLUTION} == "" ]] && get_max_resolution
    # Если не обнаружено ни одно разрешение, то статическое из /usr/lib/ublinux/default
    [[ ${RESOLUTION} == "" ]] && RESOLUTION=${BACKGROUND_RES}
    [[ ${RESOLUTION} == "" ]] && RESOLUTION="1920x1080"
    [[ ${RESOLUTION} == "" ]] && echo "ERROR: resolution not detect" && exit 1

# Определение редакции ОС
    [[ -z $2 ]] && edition_os=$(cat /usr/lib/os-release | grep VERSION_CODENAME | cut -d"=" -f2 2>/dev/null) || edition_os=$2

    width=
    hight=
    width="${RESOLUTION%x*}"
    hight="${RESOLUTION#*x}"

#echo "------ ${width} on ${hight} ------- ${edition_os}"

# Вычисление соотношения сторон экрана
#    ratio=$(echo "scale=2;${width}/${hight}" | bc)
    ratio=$(echo "$((${width}*100/${hight}))" | sed -E "s/([0-9]{2}$)/.\1/") #"
#    if [[ "$(echo "${ratio}==1.33" | bc -l)" == 1 ]]; then
    if [[ "${ratio}" == "1.33" ]]; then
        fname_ratio="4:3"
#    elif [[ "$(echo "${ratio}==1.25" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "1.25" ]]; then
        fname_ratio="5:4"
#    elif [[ "$(echo "${ratio}==1.77" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "1.77" ]]; then
        fname_ratio="16:9"
#    elif [[ "$(echo "${ratio}==1.60" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "1.60" ]]; then
        fname_ratio="16:10"
#    elif [[ "$(echo "${ratio}==2.38" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "2.38" ]]; then
	fname_ratio="21:9"
#    elif [[ "$(echo "${ratio}==2.37" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "2.37" ]]; then
	fname_ratio="21:9"
#    elif [[ "$(echo "${ratio}==2.40" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "2.40" ]]; then
	fname_ratio="12:5"
#    elif [[ "$(echo "${ratio}==1.89" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "1.89" ]]; then
	fname_ratio="256:135"
#    elif [[ "$(echo "${ratio}==2.89" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "2.89" ]]; then
	fname_ratio="1024:429"
#    elif [[ "$(echo "${ratio}==1.85" | bc -l)" == 1 ]]; then
    elif [[ "${ratio}" == "1.85" ]]; then
	fname_ratio="999:540"
    else
        fname_ratio="unknown"
    fi

#echo "==> ${width}x${hight} :: ${ratio} :: ${fname_ratio}" && exit 1

# Установка значений переменных для графических ресурсов, исходя из типа редакции ОС
    geometry_logo_wp="+69-52"
    case "${edition_os}" in
	ublinux_db)
	    background="${source_img_dir}/${bg_desktop_basic}"
	    edition_img=${logo_desktop_basic}
	    geometry_edition_wp="+86+256"
	;;
	ublinux_de)
	    background="${source_img_dir}/${bg_desktop_enterprise}"
	    edition_img=${logo_desktop_enterprise}
	    geometry_edition_wp="+86+256"
	;;
	ublinux_edu)
	    background="${source_img_dir}/${bg_education}"
	    edition_img=${logo_education}
	    geometry_edition_wp="+70+256"
	;;
	ublinux_srv)
	    background="${source_img_dir}/${bg_server}"
	    edition_img=${logo_server}
	    geometry_edition_wp="+86+256"
	;;
	ublinux_exp)
	    background="${source_img_dir}/${bg_exp}"
	    edition_img=${logo_expert}
	    geometry_edition_wp="+72+256"
	;;
	ublinux_de_adara)
	    background="${source_img_dir}/${bg_desktop_enterprise}"
	    edition_img=${logo_desktop_enterprise}
	    geometry_edition_wp="+86+256"
	    geometry_adara_wp="+130+42"
	;;
	ublinux_srv_adara)
	    background="${source_img_dir}/${bg_server}"
	    edition_img=${logo_server}
	    geometry_edition_wp="+86+256"
	    geometry_adara_wp="+130+42"
	;;
	ublinux_de_sibsutis)
	    background="${source_img_dir}/${bg_desktop_enterprise}"
	    edition_img=${logo_desktop_enterprise}
	    geometry_edition_wp="+86+256"
	    geometry_sibsutis_wp="+470+166"
	;;
	ublinux_edu_sibsutis)
	    background="${source_img_dir}/${bg_education}"
	    edition_img=${logo_education}
	    geometry_edition_wp="+70+256"
	    geometry_sibsutis_wp="+470+166"
	;;
	ublinux_srv_sibsutis)
	    background=${source_img_dir}/${bg_server}
	    edition_img=${logo_server}
	    geometry_edition_wp="+86+256"
	    geometry_sibsutis_wp="+470+166"
	;;
	ublinux_liveoffice)
	    background="${source_img_dir}/${bg_liveoffice}"
	    logo_img=${logo_liveoffice}
	    geometry_logo_wp="+260-130"
	    unset logo_light
	;;
	ublinux_unknown | *)
	    background="${source_img_dir}/${bg_desktop_basic}"
	    edition_img=${logo_desktop_basic}
	    geometry_edition_wp="+86+256"
	;;
    esac
    CHECK_BOOT_FILE=$(find ${wallpapers_dst}/ -name "${edition_os}_boot_${fname_ratio}_${RESOLUTION}.jpg" | wc -l)
    CHECK_BACKGROUND_FILE=$(find ${wallpapers_dst}/ -name "${edition_os}_background_${fname_ratio}_${RESOLUTION}.jpg" | wc -l)
    if [[ ${CHECK_BOOT_FILE} -eq 0 ]] || [[ ${CHECK_BACKGROUND_FILE} -eq 0 ]]; then
	[[ -x /usr/bin/composite && -x /usr/bin/convert ]] || { echo "Error: not fount /usr/bin/composite or /usr/bin/convert" && exit 1; }
	build_logo_ublinux_all
	build_background_all
	build_background_de
# Изменение разрешения фонов DM DE
	case ${fname_ratio} in 
	    "4:3" | "5:4" | "16:10" ) # Изменить размер по высоте (hight)
		for filename in ${wp_de_filename} ${wp_dm_filename}; do
		    convert -resize x${hight} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}"
		    convert -crop ${width}\x+0+0 "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}"
		done
	    ;;
	    "21:9") # Изменить размер по ширине (width)
		for filename in ${wp_de_filename} ${wp_dm_filename}; do
		    convert -resize ${width} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}"
		    out_img_hight=$(identify "${wallpapers_tmp}/${filename}" | cut -d" " -f3 | cut -d"x" -f2)
		    let crop_top=($out_img_hight-${hight})/2
		    convert -crop x${hight}+0+$crop_top "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}"
		done
	    ;;
	    "16:9") # Изменить размер пропорционально 
		for filename in ${wp_de_filename} ${wp_dm_filename}; do
		    convert -resize x${hight} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}"
		done
	    ;;
	    *) # Изменить размер пропорционально 
		for filename in ${wp_de_filename} ${wp_dm_filename}; do
		    convert -resize x${hight} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}"
		done
	    ;;
	esac
	build_background_dm
        [[ -z ${BUILD_MANUAL} ]] && mv "${wallpapers_tmp}/${wp_de_filename}" "${wallpapers_dst}/${edition_os}_background_${fname_ratio}_${RESOLUTION}.jpg" || mv "${wallpapers_tmp}/${wp_de_filename}" "${wallpapers_tmp}/${edition_os}_background_${fname_ratio}_${RESOLUTION}.jpg"
	[[ ${BUILD_MANUAL} ]] && mogrify -format png -write ${wallpapers_tmp}/${edition_os}_boot_${fname_ratio}_${RESOLUTION}.png ${wallpapers_tmp}/${wp_dm_filename} 
	[[ -z ${BUILD_MANUAL} ]] && mv "${wallpapers_tmp}/${wp_dm_filename}" "${wallpapers_dst}/${edition_os}_boot_${fname_ratio}_${RESOLUTION}.jpg" || mv "${wallpapers_tmp}/${wp_dm_filename}" "${wallpapers_tmp}/${edition_os}_boot_${fname_ratio}_${RESOLUTION}.jpg"
    fi
    [[ -z ${BUILD_MANUAL} ]] && cp -pf "${wallpapers_dst}/${edition_os}_background_${fname_ratio}_${RESOLUTION}.jpg" "${default_de_img}"
    [[ -z ${BUILD_MANUAL} ]] && cp -pf "${wallpapers_dst}/${edition_os}_boot_${fname_ratio}_${RESOLUTION}.jpg" "${default_dm_img}"

# Если пароли по умолчанию ublinux, то вывести подсказку пароля
    [[ -z ${BUILD_MANUAL} && -n ${DM_HINT_PASSWORD} ]] && insert_background_dm_txtpass

    if [[ -z ${BUILD_MANUAL} ]] && [[ ${GRAFFITI} != @(none|no|disable) ]]; then
	[[ -z $3 ]] && state_mode="$(cmdline_value ub.mode)" || state_mode=$3
	[[ -z $3 ]] && state_home="$(cmdline_value ub.home)" || state_home=$3
# Полное сохранение ub.mode=changes
	if [[ ${state_mode} =~ ^"changes"$ ]]; then
    	    insert_background_icon $img_fullsave
# Сохранение в модуль ub.mode=toxzm ub.mode=machines
	elif [[ ${state_mode} =~ ^("toxzm"|"machines")$ ]]; then
	    insert_background_icon ${img_modulesave}
# Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes
	elif [[ ${state_home} =~ ^"/" ]]; then
	    insert_background_icon ${img_homesave}
# Полная песочница RAM ub.mode= (clean); ub.home=
# Полная песочница HDD ub.mode=clear; ub.home=
	else
	    insert_background_icon ${img_nosave}
	fi
    fi
    [[ -n ${BUILD_MANUAL} ]] || rm -rdf ${wallpapers_tmp}
    