Возможные проблемы
По мелочи: сервер не всегда загружает изображения прямо совсем новые, так что есть шанс наткнуться на пустоту. Поэтому в скрипте я получаю фотки прошлого дня:
nowday=$(date +%d -d -1day)
UPD: пофикшено, проблема была в ненастроеном часовом поясе.
Сервер загружает новый пак фотографий раз в десять минут и требует округления времени до десятков. Поэтому
nowtime=$(date +%H%M | sed -r 's/.$//')
nowtime=$nowtime"000"
Особые проблемы тут в одном месте: в установке обоев на рабочий стол.
Для xfce4
Общий синтаксис
xfconf-query -c xfce4-desktop -p %desktoppath% -s %image%
Получение параметров
Открываешь
/home/user/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
Предположим, что там что-то типа:
<channel name="xfce4-desktop" version="1.0">
<property name="backdrop" type="empty">
<property name="screen0" type="empty">
<property name="monitorVGA-0" type="empty">
<property name="workspace0" type="empty">
<property name="color-style" type="int" value="2"/>
<property name="image-style" type="int" value="5"/>
<property name="last-image" type="string" value="/home/user/pictures/my_standart_wallpaper.png"/>
</property>
</property>
</property>
</property>
</channel>
Значит, вместо
%desktoppath%
надо указать /backdrop/screen0/monitorVGA-0/workspace0/last-image
Ну, а
%image%
— полный путь к файлу нового изображения.Другие X-системы
?
Код
github
# This script get images from himawari8 sputnik, combine it with imagemagick and set result as wallpaper. Works with xfce, gnome, i3
# ./earthwallpaper <resolution>
# <resolution> can be 4, 8, 16 or 20 : bigger number - better resolution. Default is 4
# Deps: imagemagick wget
# github: https://github.com/snowinmars/scripts/blob/master/earth_wallpaper.sh
# e-mail: marcor@yandex.ru
#!/bin/bash
delay=900 # seconds
while true
do
echo $DESKTOP_SESSION
width=550
numblocks=${1:-4}
xsystem=${2:-xfce4}
level=$numblocks'd' #Level can be 4d, 8d, 16d, 20d
timestamp=$(date -d -4hours +%Y/%m/%d/%H%M | sed -r 's/.$/000/') # delay is for timezone
username=$(getent passwd $UID | sed -e 's/\:.*//')
workdir="/home/"$username"/.earthwallpaper"
if [ ! -d $workdir ]; then
mkdir -p $workdir
fi
cd $workdir
site="http://himawari8-dl.nict.go.jp/himawari8/img/D531106"
url="$site/$level/$width/$timestamp"
for (( i=0; i<=$numblocks-1; ++i))
do
for (( j=0; j<=$numblocks-1; ++j))
do
sourceurl="$url"$(printf '_%d_%d.png' "$i" "$j")
#sourceurl="$url$dash$i$dash$j.png"
#desturl="$url$dash"
desturl="piece_"$numblocks"_"$(printf '%02d_%02d.png' "$i" "$j")
echo Downloading $sourceurl to $desturl
wget $sourceurl -O $workdir/$desturl
done
convert -append piece_$numblocks*_*.png img_$numblocks"_"$(printf '%02d' "$i").png
rm piece_$numblocks*_*.png
done
convert +append img_$numblocks"_"*.png "out_"$numblocks".png"
rm img_$numblocks"_"*.png
# if it isn't working - write me on e-mail
case $DESKTOP_SESSION in
"xfce")
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVGA-0/workspace0/last-image -s $workdir/out_$numblocks.png
;;
"gnome")
gconftool-2 -t str -s /desktop/gnome/background/picture_filename $workdir/out_$numblocks.png
;;
"i3")
feh --bg-scale ~/Pictures/image.jpg # set
echo "exec feh --bg-scale ~/Pictures/image.jpg" >> ~/.config/i3/config # set for autoload
;;
*)
echo Unknown graphical system, can\'t set wallpaper. You can do it manually from $workdir
;;
esac
echo Done, waiting $delay seconds
sleep $delay
done
Похожее
С авторами не связывался, но, думаю, в открытый доступ они это не просто так грузили.
Комментарии (29)
shweew
09.02.2016 13:28Как то странно, пишете
Для xfce4
…
xfconf-query -c xfce4-desktop....
потом:
Другие X-системы
и опять в скрипте...xfconf-query -c xfce4-desktop...
Что значит «Другие X-системы»?shweew
09.02.2016 13:33Вставьте уж тогда проверку, если хфце, то так, если гном, то такая команда, если кеды, то сякая…
marcor
09.02.2016 16:47Я ток «за», но мне не на чем проверить работоспособность команд.
shweew
09.02.2016 16:58Для гнома работает:
gconftool-2 -t str -s /desktop/gnome/background/picture_filename $workdir/out_$numblocks.png
KDE под рукой нет проверить.shweew
09.02.2016 17:08Гномовские переменные на всякий случай:
DESKTOP_SESSION=gnome GDMSESSION=gnome WINDOWMANAGER=/usr/bin/gnome
shweew
09.02.2016 17:18… Погуглив, не нашёл реализации под linux...
В статье на которую Вы ссылаетесь есть ссылка на баш-скрипт.
Не проверял на сколько он рабочий, но есть.
SleepingLion
09.02.2016 13:35+1Pullrequest:
Fixed: Корректная сборка больших разрешений (16d, 20d);
Fixed: Поправлена работа по первым числам каждого месяца;
Added: Возможность указания размера обоев из коммандной строки (например script.sh 8 — чб 4400x4400).
Code#!/bin/bash delay=900 # seconds while true do width=550 numblocks=${1:-4} level=$numblocks'd' #Level can be 4d, 8d, 16d, 20d nowtime=$(date +%H%M | sed -r 's/.$//') nowtime=$nowtime"000" nowyear=$(date +%Y -d -1day) nowmonth=$(date +%m -d -1day) nowday=$(date +%d -d -1day) workdir="/home/cutemaj/.earthwallpaper" if [ ! -d $workdir ]; then mkdir -p $workdir fi cd $workdir site="http://himawari8-dl.nict.go.jp/himawari8/img/D531106" url="$site/$level/$width/$nowyear/$nowmonth/$nowday/$nowtime" for (( i=0; i<=$numblocks-1; ++i)) do for (( j=0; j<=$numblocks-1; ++j)) do sourceurl="$url"$(printf '_%d_%d.png' "$i" "$j") desturl="piece_"$numblocks"_"$(printf '%02d_%02d.png' "$i" "$j") echo Downloading $sourceurl to $desturl wget $sourceurl -O $workdir/$desturl done convert -append piece_$numblocks*_*.png img_$numblocks"_"$(printf '%02d' "$i").png rm piece_$numblocks*_*.png done convert +append img_$numblocks"_"*.png "out_"$numblocks".png" rm img_*.png xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVGA-0/workspace0/last-image -s $workdir/out_$numblocks.png sleep $delay done
SleepingLion
09.02.2016 13:47+1Ещё пара фиксов + правка предложенная Self_Perfection:
Заголовок спойлера#!/bin/bash delay=900 # seconds while true do width=550 numblocks=${1:-4} level=$numblocks'd' #Level can be 4d, 8d, 16d, 20d timestamp=$(date -d -1day +%Y/%m/%d/%H%M | sed -r 's/.$/000/') workdir="/home/cutemaj/.earthwallpaper" if [ ! -d $workdir ]; then mkdir -p $workdir fi cd $workdir site="http://himawari8-dl.nict.go.jp/himawari8/img/D531106" url="$site/$level/$width/$timestamp" for (( i=0; i<=$numblocks-1; ++i)) do for (( j=0; j<=$numblocks-1; ++j)) do sourceurl="$url"$(printf '_%d_%d.png' "$i" "$j") #sourceurl="$url$dash$i$dash$j.png" #desturl="$url$dash" desturl="piece_"$numblocks"_"$(printf '%02d_%02d.png' "$i" "$j") echo Downloading $sourceurl to $desturl wget $sourceurl -O $workdir/$desturl done convert -append piece_$numblocks*_*.png img_$numblocks"_"$(printf '%02d' "$i").png rm piece_$numblocks*_*.png done convert +append img_$numblocks"_"*.png "out_"$numblocks".png" rm img_$numblocks"_"*.png xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVGA-0/workspace0/last-image -s $workdir/out_$numblocks.png sleep $delay done
shweew
09.02.2016 17:43Наверное сохраняется по GTM
Вот так работает и с виду более похоже на правду:
timestamp=$(date -d -4hours +%Y/%m/%d/%H%M | sed -r 's/.$/000/')
marcor
09.02.2016 17:47Кстати, да: автор недавно добавил в PowerShell-скрипт строку
$ts = New-TimeSpan -Hours -2 -Minutes -30 #Number of hours and minutes to add/subtract to the date. Adjust this to offset your system date to around about GMT (I think?) $now = ((Get-Date -Second 00) + $ts)
shweew
09.02.2016 17:50Ещё с долготой разобраться бы.
marcor
09.02.2016 17:56Ну, в Арче (хз, как в других linux) есть куча файлов
/usr/share/zoneinfo/%Zone%/%SubZone%
, которые используются для определения временных настроек. SubZone — это крупный город, по его имени теоретически можно определить примерные координаты юзера.
Self_Perfection
Это что за позорище у вас в скрипте?
Что будет 1 марта? nowday будет вычислен в предыдущий день — 29 (февраля). А вот месяц и год будут браться без сдвига времени, получим в итоге timestamp для 29 марта, для которого фото ещё, вестимо, нет.
И удручающе неффективно, куча лишних форков, когда можно сделать всё за раз:
Ваш скрипт уже достаточно велик, чтобы имело смысл создать под него репу, чтоб слать туда пулреквесты.
marcor
Ну, я решил, что бог с ним… Пофиксил кодом от SleepingLion