|
|
#!/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}
|
|
|
|