95 lines
3.6 KiB
Bash
Executable File
95 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# Установщик обоев (change wallpaper):
|
||
# исходя из параметров подключенных мониторов устанавливает соответствующие обои.
|
||
# (вертикальные изображения на вертикальные мониторы
|
||
# горизонтальные изображения на горизонтальные - без пересечений)
|
||
#
|
||
# TO-DO
|
||
# [X] - Определение данных исходного изображения: получение ширины и высоты
|
||
# [X] - Определение вертикальности изображения: если ширина больше высоты -> горизонтальное, иначе вертикальное
|
||
# [ ] - Определение данных о мониторах: имя, вертикальность
|
||
# [X] - Проверка зависимостей: feh, ffmpeg, X11
|
||
# [ ] - Определение соответствия изображения параметрам монитора
|
||
# [X] - Установка изображний на рабочий стол
|
||
# [X] - Получение пути изображения
|
||
|
||
# Проверка зависимостей
|
||
[[ $XDG_SESSION_TYPE -eq 'x11' ]] || { printf "For X.Org\n"; exit 1 ; }
|
||
|
||
requirements_apps=('feh' 'ffmpeg' 'xdpyinfo' 'awk')
|
||
for app in ${requirements_apps[@]}; do
|
||
if [ ! $app -version &> /dev/null ] || [ $app --version &> /dev/null ]; then
|
||
echo "$app not installed"
|
||
exit 1
|
||
fi
|
||
done
|
||
|
||
# Директория с изображениями
|
||
IMGSTORAGE="$HOME/vault/wallpaper"
|
||
|
||
# Получить абсолютный путь к изображению
|
||
get_path_img() {
|
||
find "$IMGSTORAGE" -type f | shuf -n 1
|
||
}
|
||
|
||
# Получить ширину изображения в пикселях
|
||
get_width_img() {
|
||
ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 "$1" 2> /dev/null
|
||
}
|
||
|
||
# Получить высоту изображения в пикселях
|
||
get_height_img() {
|
||
ffprobe -v error -select_streams v:0 -show_entries stream=height -of default=nw=1:nk=1 "$1" 2> /dev/null
|
||
}
|
||
|
||
# Получить ориентацию изображения
|
||
# $1 - путь к файлу - get_path_img
|
||
get_orientation_img() {
|
||
[[ $(get_width_img $1) > $(get_height_img $1) ]] && printf 'horizontal' || printf 'vertical'
|
||
}
|
||
|
||
# Получить вертикальную обоину
|
||
get_vertical_wall() {
|
||
while true; do
|
||
img=$(get_path_img)
|
||
orientation=$(get_orientation_img $img)
|
||
[[ $orientation -eq 'vertical' ]] && { printf $img; break ; }
|
||
done
|
||
}
|
||
|
||
# Получить горизонтальную обоину
|
||
get_horizontal_wall() {
|
||
while true; do
|
||
img=$(get_path_img)
|
||
orientation=$(get_orientation_img $img)
|
||
[[ $orientation -eq 'horizontal' ]] && { printf $img; break ; }
|
||
done
|
||
}
|
||
|
||
# Получить список подключенных мониторов
|
||
get_name_mon() {
|
||
for mon in $(xrandr | grep ' connected ' | awk '{print $1}'); do
|
||
echo $mon; done
|
||
}
|
||
|
||
# Получить ширину монитора в пикселях
|
||
get_width_mon() {
|
||
xdpyinfo | awk '/dimensions/{print $2}' | awk -F "x" '{print $1}'
|
||
}
|
||
|
||
# Получить высоту монитора в пикселях
|
||
get_height_mon() {
|
||
xdpyinfo | awk '/dimensions/{print $2}' | awk -F "x" '{print $2}'
|
||
}
|
||
|
||
# Получить ориентацию монитора
|
||
get_orientation_mon() {
|
||
echo
|
||
}
|
||
|
||
set_wall() {
|
||
feh --bg-fill $(get_horizontal_wall) $(get_vertical_wall)
|
||
}
|
||
|
||
set_wall
|