#!/usr/bin/env bash
##
## ./script ${RESOLUTION} ${VERSION_CODENAME} ${STATE_MODE}
##   RESOLUTION:
##	1024x768  #(4:3)
##	2048x1536 #(4:3)
##	1440x1080 #(4:3)
##	2560x2048 #(5:4)
##	1920x1080 #(16:9)
##	3840x2160 #(16:9)
##	3440x1440 #(21:9)
##	1440x900  #(16:10)
##	2560x1600 #(16:10)
##   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=
##

ENABLED=yes
[ "$ENABLED" != "yes" ] && exit 0
DEBUGMODE=no

. /usr/lib/ublinux/functions
. /usr/lib/ublinux/os-config
debug_mode "$0" "$@"

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

[[ ${DISPLAYMANAGER} == "none" ]] && exit
         
    ROOTDIR=	#`pwd`
    [[ -n $1 ]] && [[ -n $2 ]] && build_manual=yes
    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
    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() {
    local max_mode				# Максимальное разрешение из всех мониторов
    # Метод определения разрешения №1, подходит для свободных драйверов KMS
    # Без драйверов по VGA не находит разрешение
    if ls /sys/class/drm/*/status &>/dev/null; then
	for video_output in /sys/class/drm/*/status; do
	    if [[ $(cat ${video_output}) == "connected" ]]; then
		video_name="${video_output%/*}"; video_name="${video_name##*/}"
		video_modes="${video_output%/*}/modes"
		[[ -f ${video_modes} ]] || break
		max_mode="0"
		while read 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 < ${video_modes}
		monitors[${video_name}]=${max_mode}
	    fi
	done
    fi
    # Метод определения разрешения №2
    # из конфига /etc/ublinux/video по статическим заданным разрешениям
    [[ -n "${XORG_MONITOR[@]}" ]] && declare -n MONITOR=XORG_MONITOR 
    [[ -n "${XRANDR_MONITOR[@]}" ]] && declare -n MONITOR=XRANDR_MONITOR
    if [[ -n "${MONITOR[@]}" ]]; then
        for VIDEO_PORT in "${!MONITOR[@]}"; do
            while read VIDEO_PORT_PARAM; do
                if egrep -iq "^[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})
                    [[ ${pixel_line_mode} -gt ${pixel_max_mode} ]] && pixel_max_mode=${pixel_line_mode} && RESOLUTION_MAX=${RESOLUTION}
                fi
            done <  <(tr ',' '\n' <<< "${MONITOR[${VIDEO_PORT}]}")
        done
        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 | 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')
    # Если не обнаружено ни одно разрешение, то статическое
    [[ -z ${RESOLUTION} ]] && RESOLUTION=${WALLPAPERSRES}
    [[ -z ${RESOLUTION} ]] && RESOLUTION="1920x1080"
}

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 [ ${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)
	let 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 [ ${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 [[ ! -e ${wallpapers_dst} ]]; then 
	mkdir -p $(readlink ${wallpapers_dst}) || mkdir -p  ${wallpapers_dst}
    fi
    
    grep -q xres= /proc/cmdline && RESOLUTION=$(cat /proc/cmdline | awk -F xres= '{print $2}' | awk '{print $1}')
#    xres=$(cmdline_value desktop) && [[ ! -z ${xres} ]] && RESOLUTION=${xres}
# Определение разрешения экрана
    [[ -z $1 ]] || RESOLUTION=$1
    [[ -z "${RESOLUTION}" ]] && get_max_resolution 
    [[ -z "${RESOLUTION}" ]] && echo "ERROR: resolution not detect" && exit 1
# Определение редакции ОС
    [[ -z $2 ]] && edition_os=$(cat /etc/os-release | grep VERSION_CODENAME | cut -d"=" -f2 2>/dev/null) || edition_os=$2

    width=${RESOLUTION%x*}; width=${width:-1920}
    hight=${RESOLUTION#*x}; hight=${hight:-1080}
#echo "${width} on ${hight}"

# Вычисление соотношения сторон экрана
    ratio=$(bc <<< "scale=2;${width}/${hight}")
    if [ $(bc -l <<< "$ratio==1.33") -eq 1 ]; then
        fname_ratio="4:3"
    elif [ $(bc -l <<< "$ratio==1.25") -eq 1 ]; then
        fname_ratio="5:4"
    elif [ $(bc -l <<< "$ratio==1.77") -eq 1 ]; then
        fname_ratio="16:9"
    elif [ $(bc -l <<< "$ratio==1.6") -eq 1 ]; then
        fname_ratio="16:10"
    elif [ $(bc -l <<< "$ratio==2.38") -eq 1 ]; then
	fname_ratio="21:9"
    else
        exit 0
    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_desktop_enterprise
	    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 0
	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
	    ;;
	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} ]] && grep -q "^root:$DEFAULTROOTPASSWD:" /etc/shadow && grep -q "^$(getent passwd "${ADMUID}" | cut -d: -f1):$DEFAULTPASSWD:" /etc/shadow && insert_background_dm_txtpass
    if [[ -z ${build_manual} ]] && [[ "$GRAFFITI" != "no" ]]; 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
    