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