himawari8 wallpaper для linux

Почитал я недавно про скрипт на PowerShell, который ставил фотки со спутника обоями на рабочий стол. Погуглив, не нашёл реализации под linux — коя ниже.



Возможные проблемы


По мелочи: сервер не всегда загружает изображения прямо совсем новые, так что есть шанс наткнуться на пустоту. Поэтому в скрипте я получаю фотки прошлого дня: 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-системы


?

Код


Код на bash
Спасибо за фиксы Self_Perfection и SleepingLion

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
  • +1
    Это что за позорище у вас в скрипте?
    nowtime=$(date +%H%M | sed -r 's/.$//')
    nowtime=$nowtime"000"
    nowyear=$(date +%Y)
    nowmonth=$(date +%m)
    nowday=$(date +%d -d -1day)
    ...
    url="$site/$level/$width/$nowyear/$nowmonth/$nowday/$nowtime"
    

    Что будет 1 марта? nowday будет вычислен в предыдущий день — 29 (февраля). А вот месяц и год будут браться без сдвига времени, получим в итоге timestamp для 29 марта, для которого фото ещё, вестимо, нет.

    И удручающе неффективно, куча лишних форков, когда можно сделать всё за раз:

    timestamp=$(date -d -1day +%Y/%m/%d/%H%M | sed -r 's/.$/000/')
    ...
    url="$site/$level/$width/$timestamp"
    


    Ваш скрипт уже достаточно велик, чтобы имело смысл создать под него репу, чтоб слать туда пулреквесты.
  • 0
    Как то странно, пишете
    Для xfce4

    xfconf-query -c xfce4-desktop....

    потом:
    Другие X-системы
    и опять в скрипте
    ...xfconf-query -c xfce4-desktop...

    Что значит «Другие X-системы»?
    • 0
      Вставьте уж тогда проверку, если хфце, то так, если гном, то такая команда, если кеды, то сякая…
      • 0
        Я ток «за», но мне не на чем проверить работоспособность команд.
        • 0
          Для гнома работает:
          gconftool-2 -t str -s /desktop/gnome/background/picture_filename $workdir/out_$numblocks.png
          

          KDE под рукой нет проверить.
          • 0
            Гномовские переменные на всякий случай:
            DESKTOP_SESSION=gnome
            GDMSESSION=gnome
            WINDOWMANAGER=/usr/bin/gnome
            
            • 0
              … Погуглив, не нашёл реализации под linux...

              В статье на которую Вы ссылаетесь есть ссылка на баш-скрипт.
              Не проверял на сколько он рабочий, но есть.
              • 0
                А, вчера не было. Эх, ладно, сообщество быстро)
    • +1
      Pullrequest:
      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
      

      Правки старался делать минимальные.
      • +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
        

        • 0
          Код заменил, благодарю за фиксы)
      • 0
        По мелочи: сервер не всегда загружает изображения прямо совсем новые, так что есть шанс наткнуться на пустоту. Поэтому в скрипте я получаю фотки прошлого дня

        Может дело в тайм-зоне? ;-)
        • 0
          Кажись, неподалёку от Токио. Точно узнать не получится, думаю.
        • 0
          Наверное сохраняется по GTM
          Вот так работает и с виду более похоже на правду:
          timestamp=$(date -d -4hours +%Y/%m/%d/%H%M | sed -r 's/.$/000/') 
          
          • 0
            Кстати, да: автор недавно добавил в 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)
            
            • 0
              Ну так и я про то же…
          • 0
            Ещё с долготой разобраться бы.
            • 0
              Ну, в Арче (хз, как в других linux) есть куча файлов /usr/share/zoneinfo/%Zone%/%SubZone%, которые используются для определения временных настроек. SubZone — это крупный город, по его имени теоретически можно определить примерные координаты юзера.
              • 0
                Я не про таймзону, я про ракурс съёмки, днём не видел ещё что там получается.
                • 0
                  Сделал минутное видео последних десяти дней — могу выложить.
                  • 0
                    Какое место снимается, Америка или Европа?
                    • 0
                      Похоже со «стороны» Австралии. Совсем не интересно:
                      image
                    • 0
                      было бы интересно посмотреть, ждемс ссылку :)
                  • 0
                    Спутник геостационарный, если менять ракурс — надо искать другой. Я поспрашиваю знакомых астрономов, но ничо не обещаю)
              • 0
                Установка поверх i3wm:

                ```
                sudo apt-get install -y feh
                feh --bg-scale ~/Pictures/image.jpg #для установки
                echo «exec feh --bg-scale ~/Pictures/image.jpg» >> ~/.config/i3/config #для автоустановки при загрузке
                ```
                • 0
                  Кинул коммит, проверь, работает ли.
                • +1
                  Обновлять картинку по крону мне кажется лучшим решением чем таймер на 900 секунд в скрипте.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое