上上禮拜重灌了我的Macbook Pro,也順便重灌了ubuntu 10.10。來澳洲很久沒有動腦筋寫程式了,我想寫寫簡單的shell script或許能提神醒腦一下;剛好email收到台南二寮的一些美麗照片,gnome從2.28以後(好像??)就可以動態變更桌布啦,只是他會去讀取某一個.xml檔。所以理論上就是準備好圖片,準備好讓gnome讀取的xml就搞定了。
雖然網路上已經有許多同好也寫了一些script或是程式,不過總覺得沒有自己寫來來得爽快。我的這隻程式功能非常簡單,就是只會在當前工作目錄找所有的jpg以及png檔,然後在當前目錄下建立一個xml,這個xml可以放置在任何地方,唯有圖片本身路徑不能任意移動(這好像是廢話@_@)。
- #!/bin/bash
- #############################################################
- # Filename: makeGnomeBackground.sh
- # Date: 2011/02/20
- # Purpose: changing background dynamically
- # Usage:
- #
- # Description:
- # Author: maxsolar(Jim T. Tang@IES, Academia Sinica)
- #############################################################
- ###########################
- ## pre-defined variables
- ###########################
- # check if there are jpg or png files in current working dir.
- find `pwd -P` -maxdepth 1 -name "*jpg" -o -name "*JPG" > filelist.txt 2>/dev/null
- find `pwd -P` -maxdepth 1 -name "*png" -o -name "*PNG" >> filelist.txt 2>/dev/null
- [ $(cat filelist.txt | wc -l) -eq 0 ] && {
- echo "****************************************"
- echo "No .jpg nor .png files found. Try other dirs. "
- echo "****************************************"
- exit 1;
- } || {
- cat filelist.txt
- echo "-------------------------------"
- echo "$(cat filelist.txt | wc -l) Pictures were found."
- }
- year=$(date +"%Y" )
- month=$(date +"%m")
- day=$(date +"%d")
- output=$(basename "`pwd`" /).xml
- ##main method
- read -p "Duration time between pictures? (default=5) " duration1
- [ -z $duration1 ] && {
- duration1=5
- }
- read -p "Duration time within a picture? (default=600) " duration2
- [ -z $duration2 ] && {
- duration2=600
- }
- ## part 1
- cat <<HERE > $output
- <background>
- <starttime>
- <year>$year</year>
- <month>$month</month>
- <day>$day</day>
- <hour>00</hour>
- <minute>00</minute>
- <second>00</second>
- </starttime>
- <!-- This animation will start at midnight. -->
- HERE
- ## part 2
- declare -a picArray=(`cat filelist.txt`)
- declare -i loops=$(cat filelist.txt | wc -l)
- for (( i=1; i<="$loops"; i++ )) ; do
- ##The Last Loop
- if [ $i -eq $loops ]; then
- cat <<HERE >>$output
- <static>
- <duration>$duration2</duration>
- <file>${picArray[$i-1]}</file>
- </static>
- <transition>
- <duration>$duration1</duration>
- <from>${picArray[$i-1]}</from>
- <to>${picArray[0]}</to>
- </transition>
- HERE
- else
- ## in formal loops
- cat << HERE >>$output
- <static>
- <duration>$duration2</duration>
- <file>${picArray[$i-1]}</file>
- </static>
- <transition>
- <duration>$duration1</duration>
- <from>${picArray[$i-1]}</from>
- <to>${picArray[$i]}</to>
- </transition>
- HERE
- fi
- done
- echo "</background>" >> $output
- echo \"$output\" is made.
- ## remove temparary file
- rm filelist.txt
這個script會讀取當前目錄下的所有jpg/png檔(不分大小寫),然後提問:
1.圖片間切換時間,直接按下enter預設5秒;
2.每張圖片的時間,直接按下enter預設600秒。輸出的xml檔名預設就是該目錄的名稱,建立成功會有提示出現。
在桌面空白處按右鍵->Change Desktop Background->Add
切換到想要gnome讀取的那個資料夾之後,選擇All Files,就可以看到該xml檔。
選取剛剛做好的xml檔之後,就可以在桌布預覽的地方看到我們剛剛的作品。
網路上也有幾篇好玩的可以看看:
Create Your Own GNOME Background Slideshow
[分享] Gnome動態桌布
自動換桌布的shell script
沒有留言:
張貼留言