码迷,mamicode.com
首页 > 系统相关 > 详细

Ubuntu自动生成更换壁纸配置文件脚本的困惑

时间:2015-07-19 21:30:11      阅读:493      评论:0      收藏:0      [点我收藏+]

标签:

        花了一整个下午研究了下Ubuntu怎么自动切换壁纸。其实,感觉还是很简单的,主要就是修改目录/usr/share/backgrouds/contest/trusty.xml的配置文件。

它的格式是这样的:

技术分享
 1 <background>
 2   <starttime>
 3     <year>2009</year>
 4     <month>08</month>
 5     <day>04</day>
 6     <hour>00</hour>
 7     <minute>00</minute>
 8     <second>00</second>
 9   </starttime>
10 <!-- This animation will start at midnight. -->
11   <static>
12     <duration>1795.0</duration>
13     <file>/usr/share/backgrounds/1.jpg</file>
14   </static>
15   <transition>
16     <duration>5.0</duration>
17     <from>/usr/share/backgrounds/1.jpg</from>
18     <to>/usr/share/backgrounds/2.jpg</to>
19   </transition>
20     <static>
21     <duration>1795.0</duration>
22     <file>/usr/share/backgrounds/2.jpg</file>
23   </static>
24   <transition>
25     <duration>5.0</duration>
26     <from>/usr/share/backgrounds/2.jpg</from>
27     <to>/usr/share/backgrounds/3.jpg</to>
28   </transition>
29     <static>
30     <duration>1795.0</duration>
31     <file>/usr/share/backgrounds/3.jpg</file>
32   </static>
33   <transition>
34     <duration>5.0</duration>
35     <from>/usr/share/backgrounds/3.jpg</from>
36     <to>/usr/share/backgrounds/1.jpg</to>
37   </transition>
38 </background>
View Code

        主要就是修改文件名称和切换的时间,很容易看懂。

        但是,实际要是修改这么多,肯定是很麻烦的,所以,我就花了点时间写了个自动生成上述配置的脚本出来。当然,由于是第一次认认真真地写脚本,中间也遇到了不少问题,好在最终都解决了。脚本也能如期运行了。

        Shell脚本代码如下:

技术分享
  1 #!/bin/bash
  2 # Program:
  3 #
  4 # Author: Leomon
  5 #  Email: 1964416932@qq.com
  6 #   Blog: blog.csdn.net/leomon_1993
  7 #
  8 # History:
  9 # 2014/5-2014/6 First Release.
 10 #
 11 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
 12 export PATH
 13 
 14 #Variables
 15 #源(壁纸)目录
 16 source=
 17 #目标地址
 18 destination=/usr/share/backgrounds
 19 #目标文件夹的名称
 20 dest_name="pictures"
 21 #目标文件列表
 22 filelist=
 23 #配置文件名称
 24 conf_file_name="trusty.xml"
 25 #标志标量,1表示第一次循环开始。
 26 flag="1"
 27 #图片静止的时间
 28 s_duration=1795.0
 29 t_duration=5.0
 30 #End of Variables
 31 
 32 #Functions
 33 
 34 #函数:用来生成节点<starttime></starttime>
 35 function Create_Starttime
 36 {
 37     echo -e "\t<starttime>"  >>$conf_file_name
 38     echo -e "\t\t<year>2014</year>" >>$conf_file_name
 39     echo -e "\t\t<month>01</month>" >>$conf_file_name
 40     echo -e "\t\t<day>01</day>" >>$conf_file_name
 41     echo -e "\t\t<hour>00</hour>" >>$conf_file_name
 42     echo -e "\t\t<minute>00</minute>" >>$conf_file_name
 43     echo -e "\t\t<second>00</second>" >>$conf_file_name
 44     echo -e "\t</starttime>" >>$conf_file_name
 45 }
 46 
 47 #函数:用来生成幻灯片动画配置节点
 48 function Create_Animation ()
 49 {
 50     if [[ "$#" == "4" ]]; then
 51         static_duration=$1
 52         transition_duration=$2
 53         from_picture=$3
 54         to_picture=$4
 55         echo "++from picture [$from_picture] to [$to_picture]."
 56         echo -e "\t<static>" >>$conf_file_name
 57         echo -e "\t\t<duration>$static_duration</duration>" >>$conf_file_name
 58         echo -e "\t\t<file>$from_picture</file>" >>$conf_file_name
 59         echo -e "\t</static>" >>$conf_file_name
 60 
 61         echo -e "\t<transition>" >>$conf_file_name
 62         echo -e "\t\t<duration>$transition_duration</duration>" >>$conf_file_name
 63         echo -e "\t\t<from>$from_picture</from>" >>$conf_file_name
 64         echo -e "\t\t<to>$to_picture</to>" >>$conf_file_name
 65         echo -e "\t</transition>" >>$conf_file_name
 66     else
 67         echo "+参数个数不匹配,无法生成!"
 68     fi
 69 }
 70 
 71 #End of Functions
 72 #Clear the screen..
 73 clear
 74 #首先判断下参数个数是否为1,并且后面接的是一个目录
 75 if [[ "$#" == "1" ]]; then
 76     if [[ -d "$1" ]]; then
 77         source=$1
 78     else
 79         echo "+Err:后面连接的参数非目录,退出!"
 80         exit 0
 81     fi
 82 else
 83     echo "+Err:参数个数不为1,退出!"
 84     exit 0
 85 fi
 86 
 87 #这儿开始咯。。。。
 88 echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
 89 echo "+                        欢迎使用                         +"
 90 echo "+脚本名称:slide_wallpaper_creator.                       +"
 91 echo "+脚本功能:自动生成幻灯片壁纸配置,让您的桌面壁纸自动切换 +"
 92 echo "+作者:@leomon 2014/6/12 博客:blog.csdn.net/leomon_1993. +"
 93 echo "+版本:version 0.1                                        +"
 94 echo "+更改日志:无                                             +"
 95 echo "+注意:该脚本只适用于Ubuntu14.04 Desktop版本,其他的版本自+"
 96 echo "+行测试修改。具体参见README文件说明。                     +"
 97 echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
 98 read -p "+继续执行脚本?(y/n)" yn
 99 case $yn in
100     "y")
101         ;;
102     "n")
103         echo "+停止执行."
104         exit 0
105         ;;
106 esac
107 
108 #首先将所有的壁纸复制到指定的位置
109 read -p "+将要把 $source 中所有图片复制到 $destination/$dest_name, 您需要重命名目标文件夹吗?(y/n)" yn
110 case $yn in
111     "y")
112         echo "++当前目标文件夹名称是:$dest_name."
113         read -p "++输入新的名称:" dest_name
114         echo "++好的,您已成功更新目标文件夹名称为:$dest_name"
115         ;;
116     *)
117         ;;
118 esac
119 #开始复制图片到目标文件夹中
120 destination="$destination/$dest_name"
121 if [ ! -d $destination ];then
122     echo "+正在生成目录$destination"
123     mkdir $destination
124     echo "+正在复制图片到$destination..."
125     cd $source
126     cp ./* $destination
127     echo -e "+复制完毕!\n"
128 else
129     echo "+检测到有相同的目录,停止复制图片..."
130 fi
131 
132 #进入目标目录
133 echo "+进入目标目录..."
134 cd $destination
135 #修改权限
136 chmod 444 ./*
137 
138 #准备生成配置文件
139 echo -e "+正在生成配置文件,请稍等..."
140 test -f $conf_file_name && rm -f $conf_file_name
141 
142 #生成头节点
143 echo "+添加起始节点..."
144 echo "<background>" >>$conf_file_name
145 
146 #添加起始时间节点
147 echo "+添加起始时间节点..."
148 Create_Starttime
149 
150 echo "+准备添加动画切换节点..."
151 echo -e "\n<!--This animation will start at midnight.-->" >>$conf_file_name
152 
153 #配置切换动画时间
154 read -p "+是否使用默认的壁纸切换配置?(y/n)" yn
155 case $yn in
156     "y" )
157         ;;
158     "n")
159         read -p "设置每张壁纸静止的时间(默认为1795.0,单位:秒):" s_duration
160         read -p "设置壁纸切换的时间间隔(默认为5.0,单位:秒):" t_duration
161         ;;
162     *)
163         echo "输入有误!使用默认的切换配置."
164         ;;
165 esac
166 
167 #获取文件列表
168 echo "++正在获取图片列表..."
169 #将空格替换成?来处理
170 filelist=`ls | tr " " "\?"`
171 #遍历可以得到整个目录
172 from=
173 to=
174 first=
175 for filename in $filelist
176 do
177     case $filename in
178         "filenames")
179             ;;
180         "$conf_file_name")
181             ;;
182         *)
183             case $flag in
184                 "1")
185                     from="$destination/$filename"
186                     first=$from
187                     to=$from
188                     flag="0"
189                     ;;
190                 "0")
191                     from=$to
192                     to="$destination/$filename"
193                     #echo $from
194                     #echo $to
195                     #调用函数生成新节点
196                     Create_Animation "$s_duration" "$t_duration" "$from" "$to"
197                     #为了显示出来动态的效果,遂采用进程睡眠的方式来实现。。。
198                     sleep 0.05
199                     ;;
200             esac
201             ;;
202     esac
203 done
204 #循环回去
205 Create_Animation "$s_duration" "$t_duration" "$to" "$first"
206 
207 echo "+添加尾节点..."
208 echo "</background>" >>$conf_file_name
209 
210 echo "+Ubuntu 幻灯片壁纸配置文件生成完毕!"
211 
212 #下面将生成的配置文件存放到contest目录中,并重新命名为trusty.xml
213 cd ..
214 
215 test -d contest && echo "+检测到目录contest." || (echo "+新建目录:contest";mkdir contest)
216 cd contest
217 
218 #查看目录中有没有已经存在的配置文件,并询问用户如何处理旧的配置文件
219 if [[ -f "$conf_file_name" ]]; then
220     read -p "+发现同名的配置文件,直接覆盖?(y/n)" yn
221     case $yn in
222         "y")
223             ;;
224         "n")
225             echo "+正在备份旧的配置文件..."
226             #为防止重名,使用带有时间的后缀名称。
227             mv $conf_file_name ${conf_file_name}.`date +%H_%M_%S`back
228             ;;
229         "*")
230             ;;
231     esac
232 fi
233 #复制配置文件过来
234 echo "+复制配置文件到`pwd`..."
235 cp "$destination/$conf_file_name" ./
236 
237 #完成了
238 echo "+Success! 请在桌面空白处右键菜单,选择更换桌面背景项进行设置。谢谢您的使用!"
239 #Return status to System.
240 exit 0
View Code

        脚本运行的过程如下:

 

技术分享

        其实,脚本工作的很正常,个人觉得没什么问题。可以看到它生成的配置文件如下:

技术分享
 1 <background>
 2     <starttime>
 3         <year>2014</year>
 4         <month>01</month>
 5         <day>01</day>
 6         <hour>00</hour>
 7         <minute>00</minute>
 8         <second>00</second>
 9     </starttime>
10 
11 <!--This animation will start at midnight.-->
12     <static>
13         <duration>1795.0</duration>
14         <file>/home/leomon/pictures/1.jpg</file>
15     </static>
16     <transition>
17         <duration>5.0</duration>
18         <from>/home/leomon/pictures/1.jpg</from>
19         <to>/home/leomon/pictures/2.jpg</to>
20     </transition>
21     <static>
22         <duration>1795.0</duration>
23         <file>/home/leomon/pictures/2.jpg</file>
24     </static>
25     <transition>
26         <duration>5.0</duration>
27         <from>/home/leomon/pictures/2.jpg</from>
28         <to>/home/leomon/pictures/3.jpg</to>
29     </transition>
30     <static>
31         <duration>1795.0</duration>
32         <file>/home/leomon/pictures/3.jpg</file>
33     </static>
34     <transition>
35         <duration>5.0</duration>
36         <from>/home/leomon/pictures/3.jpg</from>
37         <to>/home/leomon/pictures/4.jpg</to>
38     </transition>
39     <static>
40         <duration>1795.0</duration>
41         <file>/home/leomon/pictures/4.jpg</file>
42     </static>
43     <transition>
44         <duration>5.0</duration>
45         <from>/home/leomon/pictures/4.jpg</from>
46         <to>/home/leomon/pictures/5.jpg</to>
47     </transition>
48     <static>
49         <duration>1795.0</duration>
50         <file>/home/leomon/pictures/5.jpg</file>
51     </static>
52     <transition>
53         <duration>5.0</duration>
54         <from>/home/leomon/pictures/5.jpg</from>
55         <to>/home/leomon/pictures/1.jpg</to>
56     </transition>
57 </background>
View Code

        但是,我把配置文件复制到目录/usr/share/backgrounds/contest中替换掉,然后在桌面中进行壁纸切换时,发现实际效果并不正常,不论怎么做,桌面就是变成黑色的了。总之到目前为止还没有发现是何缘故。下面是替换后的截图:

 

技术分享

        先把问题记下吧,待想到解决办法后再来补充了,到底错在哪儿呢?还是很纳闷。


        好吧,看完电影后,无意中发现位于/usr/share/backgrounds/pictures中的图片全部无法查看,很自然地想到是权限设定的问题,查看了一下图片文件权限为-r--------,显然,root无法读取。唉,又一次栽倒在权限设定上,,谨记之!!!!

        当修改了图片文件的权限后,一切都正常了!方法很简单,在脚本中复制图片代码的后面加上chmod 444 ./*即可解决。


日志:2014/6/12日晚,问题出现,还没有解决,不知道什么时候搞定。

            2014/6/12日晚,问题解决。权限设定有问题!

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

Ubuntu自动生成更换壁纸配置文件脚本的困惑

标签:

原文地址:http://www.cnblogs.com/chriscabin/p/4659334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!