#!/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/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}/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 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() { 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') # Если не обнаружено ни одно разрешение, то статическое из os-config [[ -z ${RESOLUTION} ]] && RESOLUTION=${BACKGROUND_RES} [[ -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")" == 1 ]]; then fname_ratio="4:3" elif [[ "$(bc -l <<< "${ratio}==1.25")" == 1 ]]; then fname_ratio="5:4" elif [[ "$(bc -l <<< "${ratio}==1.77")" == 1 ]]; then fname_ratio="16:9" elif [[ "$(bc -l <<< "${ratio}==1.6")" == 1 ]]; then fname_ratio="16:10" elif [[ "$(bc -l <<< "${ratio}==2.38")" == 1 ]]; then fname_ratio="21:9" elif [[ "$(bc -l <<< "${ratio}==2.37")" == 1 ]]; then fname_ratio="21:9" elif [[ "$(bc -l <<< "${ratio}==2.40")" == 1 ]]; then fname_ratio="12:5" elif [[ "$(bc -l <<< "${ratio}==1.89")" == 1 ]]; then fname_ratio="256:135" elif [[ "$(bc -l <<< "${ratio}==2.89")" == 1 ]]; then fname_ratio="1024:429" elif [[ "$(bc -l <<< "${ratio}==1.85")" == 1 ]]; 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 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 ;; *) # Изменить размер пропорционально 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} != @(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}