标签:
花了一整个下午研究了下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>
主要就是修改文件名称和切换的时间,很容易看懂。
但是,实际要是修改这么多,肯定是很麻烦的,所以,我就花了点时间写了个自动生成上述配置的脚本出来。当然,由于是第一次认认真真地写脚本,中间也遇到了不少问题,好在最终都解决了。脚本也能如期运行了。
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
脚本运行的过程如下:
其实,脚本工作的很正常,个人觉得没什么问题。可以看到它生成的配置文件如下:
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>
但是,我把配置文件复制到目录/usr/share/backgrounds/contest中替换掉,然后在桌面中进行壁纸切换时,发现实际效果并不正常,不论怎么做,桌面就是变成黑色的了。总之到目前为止还没有发现是何缘故。下面是替换后的截图:
先把问题记下吧,待想到解决办法后再来补充了,到底错在哪儿呢?还是很纳闷。
好吧,看完电影后,无意中发现位于/usr/share/backgrounds/pictures中的图片全部无法查看,很自然地想到是权限设定的问题,查看了一下图片文件权限为-r--------,显然,root无法读取。唉,又一次栽倒在权限设定上,,谨记之!!!!
当修改了图片文件的权限后,一切都正常了!方法很简单,在脚本中复制图片代码的后面加上chmod 444 ./*即可解决。
日志:2014/6/12日晚,问题出现,还没有解决,不知道什么时候搞定。
2014/6/12日晚,问题解决。权限设定有问题!
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://www.cnblogs.com/chriscabin/p/4659334.html