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