Ubuntu 设定壁纸自动切换的shell脚本

升级到Ubuntu14.04后,感觉bug的确比12.04少多了。顶部任务栏支持半透明效果,所以整个桌面也看上去漂亮了很多。这样的桌面也是值得瞎捣鼓一下的,想到换壁纸,但是没找到设定动态更换壁纸的选项,但手动修改配置文件的方法总是有的,本文的目的也在于此。(以下过程在Ubuntu14上进行,未测试其他版本!)。

原理

右键桌面->更改桌面背景,如下图所示,在右侧缩略图中带有小钟表图标的就表示为动态切换的壁纸:

系统是通过读取这个文件来进行动态壁纸切换的:

/usr/share/backgrounds/contest/trusty.xml

文件主要内容如下:

<background>
    <starttime>
        <year>2014</year>
        <month>09</month>
        <day>21</day>
        <hour>00</hour>
        <minute>00</minute>
        <second>00</second>
    </starttime>
    <static>
        <duration>300</duration>
        <file>/home/kyy/Wallpaper/1019236,106.jpg</file>
    </static>
    <transition>
        <duration>3</duration>
        <from>/home/kyy/Wallpaper/1019236,106.jpg</from>
        <to>/home/kyy/Wallpaper/1019306,106.jpg</to>
    </transition>
    <static>
        <duration>300</duration>
        <file>/home/kyy/Wallpaper/1019306,106.jpg</file>
    </static>
    <transition>
        <duration>3</duration>
        <from>/home/kyy/Wallpaper/1019306,106.jpg</from>
        <to>/home/kyy/Wallpaper/1082502,106.jpg</to>
    </transition>
        <static>......
        </static>
         <transition>......
        </transition>
        ......
</background>

其中static标签内file表示当前图像,duration表示当前图像显示的持续时间

transition标签内from和to分别表示不下一步在那两个图片之间切换,duration表示过渡时间

so,系统就是根据这个来进行桌面壁纸动态切换的。不过没切换一次图像就需要写大量代码,我们肯定不会脑残到自己手动去写的,那么的,既然实在Linux下,用shell脚本代替人工自然是最合适不过了

shell脚本实现

  1 #!/bin/bash
  2
  3 #可用文件后缀名列表
  4 readonly prefixs=("jpg" "jpeg" "png" "bmp")
  5
  6 #动态背景文件地址
  7 #/usr/share/backgrounds/contest/trusty.xml
  8 readonly animate_background_file_path="/usr/share/backgrounds/contest/trusty.xml"
  9
 10 #文件列表索引
 11 index=0
 12
 13 #获取图像文件列表
 14 get_image_files(){
 15
 16     #获取文件所在目录名称
 17     base_dir="`dirname $1`/`basename $1`/"
 18
 19     for f in `ls $1`
 20     do
 21         #检查文件后缀
 22         for p in "${prefixs[@]}"
 23         do
 24             len_before=${#f}
 25             f_after=${f%"$p"}
 26             len_after=${#f_after}
 27
 28             #名称发生改变,说明后缀名称符合条件
 29             if [ $len_before -ne $len_after ]
 30             then
 31                 file_list[$index]="$base_dir$f"
 32                 echo "获取图像:$base_dir$f"
 33                 let index=$index+1
 34                 break
 35             fi
 36         done
 37     done
 38
 39 }
 40
 41
 42 #写入文件
 43 replae_file(){
 44
 45     #创建临时文件
 46     animate_back="animate_back.xml"
 47     #清空文本内容
 48     cat /dev/null > $animate_back
 49
 50     echo -e  "<background>" >> $animate_back
 51     echo -e  "\t<starttime>" >> $animate_back
 52     echo -e  "\t\t<year>$(date +%Y)</year>" >> $animate_back
 53     echo -e  "\t\t<month>$(date +%m)</month>" >> $animate_back
 54     echo -e  "\t\t<day>$(date +%d)</day>" >> $animate_back
 55     echo -e  "\t\t<hour>00</hour>" >> $animate_back
 56     echo -e  "\t\t<minute>00</minute>" >> $animate_back
 57     echo -e  "\t\t<second>00</second>" >> $animate_back
 58     echo -e  "\t</starttime>" >> $animate_back
 59
 60     #写入文件名称
 61     index_=0
 62     len=${#file_list[@]}
 63     for f in "${file_list[@]}"
 64     do
 65         if [ $index_ -eq $((len-1)) ]
 66         then
 67             fn=${file_list[0]}
 68         else
 69             fn=${file_list[$index_+1]}
 70         fi
 71
 72         echo -e  "\t<static>" >> $animate_back
 73         echo -e  "\t\t<duration>${STAY:=300}</duration>" >> $animate_back
 74         echo -e  "\t\t<file>$f</file>" >> $animate_back
 75         echo -e  "\t</static>" >> $animate_back
 76         echo -e  "\t<transition>" >> $animate_back
 77         echo -e  "\t\t<duration>${DURATION:=3}</duration>" >> $animate_back
 78         echo -e  "\t\t<from>$f</from>" >> $animate_back
 79         echo -e  "\t\t<to>$fn</to>" >> $animate_back
 80         echo -e  "\t</transition>" >> $animate_back
 81
 82         let index_=$index_+1
 83     done
 84
 85     echo -e  "</background>" >> $animate_back
 86
 87     #移动文件
 88     mv $animate_back $animate_background_file_path
 89     if [ $? -eq 0 ]
 90     then
 91         echo -e  "已经设定好文件"
 92     fi
 93
 94 }
 95
 96 help(){
 97     echo
 98     echo "命令格式:`basename $0` [OPTION] -f Filepath"
 99     echo "指定图片目录,目录下的图片将作为动态更换的壁纸"
100     echo
101     echo -e "-f[Filepath]\t 图像文件目录"
102     echo -e "-d[Duration]\t 图像切换时长,默认3s"
103     echo -e "-s[StayTime]\t 图像停留时长,默认300s"
104     echo
105     exit 1
106 }
107
108
109 #处理参数
110 while getopts f:s:d: OPTION
111 do
112     case "$OPTION" in
113     f)
114         FILE_PATH="$OPTARG"
115         ;;
116     s)
117         STAY="$OPTARG"
118         ;;
119     d)
120         DURATION="$OPTARG"
121         ;;
122     *)
123         help
124         ;;
125     esac
126 done
127
128 if [ -z "$FILE_PATH" ]
129 then
130     help
131 fi
132
133
134
135 #判断目录是是否存在
136 if [ -d $FILE_PATH ]
137 then
138     #获取到文件列表
139     get_image_files $FILE_PATH
140
141     #获取文件数目
142     file_count=${#file_list[@]}
143
144     if [ $file_count -gt 0 ]
145     then
146         #替换原有动态背景文件
147         echo "共获取到$file_count个图像文件"
148         replae_file
149     else
150         echo "目录$FILE_PATH下不存在符合要求的图像文件:${prefixs[*]}"
151     fi
152
153
154 else
155     echo "不存在目录:$FILE_PATH"
156 fi
157
158
159 exit 0
时间: 2024-08-10 02:11:14

Ubuntu 设定壁纸自动切换的shell脚本的相关文章

把ps -ef &amp; kill指令写成可以自动执行的shell脚本

之前重启服务器上的服务,均是先使用ps -ef | grep xxx指令查询出PID,然后再使用kill -9 PID指令杀死进程.由于重启的服务只止一个,每次都要重复输入,甚是麻烦. 示例 今天研究了一下,把以上手动查杀.重启服务的过程写成了shell脚本,重启服务只需执行脚本就可以了.附脚本样例: 1 #!/bin/sh 2 3 # restart das-web 4 ps -ef | grep /home/***/das-web/ | awk '{print $2}' | xargs -n

Lvs别样的自动部署监控shell脚本

Lvs别样的自动部署监控shell脚本   l 脚本功能: l 实验环境图: l 具体脚本: l 结果验证: l 参考资料: 先申明,本文现在已经在我公司的测试环境和生产测试环境使用.正式环境请用keepalived+lvs. 安装ipvsadm不多说了,先说说脚本的功能,脚本分为redirect server 端和realserver 端,脚本分别为 lvs_redirector.sh 和realserver.sh脚本.另外加一个监控脚本lvs_monitor.sh(此脚本来源网友,做了一点修

mysql自动备份维护shell脚本

/opt/backup_online.sh #!/bin/bash#功能说明:本功能用于备份数据库 #数据库用户名dbuser='root'#数据库密码dbpasswd='zLaaa'#数据库名,可以定义多个数据库,中间以空格隔开,如:test test1 test2dbname='adb bdb '#备份时间backtime=`date +%Y%m%d%H%M%S`#日志备份路径logpath='/opt/garbageBackup/'#数据备份路径datapath='/opt/garbage

linux下监视进程挂掉后自动重启的shell脚本

本文介绍的这个shell脚本,通过一个while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,确保崩溃挂掉的进程,及时自动重启. 脚本内容如下: #!/bin/sh while : do echo "Current DIR is " $PWD stillRunning=$(ps -ef |grep "$PWD/loader" |grep -v "grep") if [ "$stillRun

自动抓包shell脚本

由于机房核心下的客户众多,其中不免很多大客户,正所谓树大招风,近期机房某些客户总是被流量攻击,预防的办法也只能是找到具体被攻击的ip地址,然后在上层核心将该ip配置空路由将攻击流量拦截在骨干层,以免影响其他用户的正常使用,目前我每台核心都做了镜像端口,将上联流量镜像到一台centos的抓包服务器,每次发生故障的时候直接tcpdump抓包来分析,但是近期攻击都在半夜,爬起来去抓包的时候攻击都已经停了,不要说去解决问题了,连后期的故障说明都没法出:所以为了保留抓包的数据,在网上找了些资料根据环境测试

自动升级OPENSSH shell脚本

由于管理着两百多台Linux服务器,一个人搞这么多机器的安全加固比较累,因此在学习了shell脚本之后果断的写了一些常用脚本做一些系统日常维护,本文OPENSSH的升级是博主本人几乎每两三个月就要做一次升级的,没办法绿盟安全扫描系统总是扫描到相关的高危漏洞,再就是OPENSSH版本更新的也比较频繁,因此不偷懒几乎没法活了.废话不说了,在这里贴下脚本,已经在线上服务器上执行了上百次了,应该不会有什么问题. #!/bin/bash ##################################

Ubuntu 14.04 下自动安装mongodb shell 脚本

vim mongodb_install.sh #!/bin/bash cd /opt/ echo "Download mongdb software..." wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.0.4.tgz echo " mongdb software..." tar -zxf mongodb-linux*.tgz mkdir software mv mon

ubuntu更新删除旧内核的shell脚本

ubuntu经常提示要更新内核,更新几次后 /boot目录就满了,再更新就提示目录没空间了,这时候就需要删除不用的老旧内核,之前都是uname, grep, dpkg之类的命令一条条敲,然后用眼睛看需要apt-get --purge remove哪几个版本的内核,后来在网上找到一个小脚本,可以自动完成这些动作,特记录: 1 sudo apt-get remove --purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed &quo

linux下监视进程 崩溃挂掉后自动重启的shell脚本

如何保证服务一直运行?如何保证即使服务挂掉了也能自动重启?在写服务程序时经常会碰到这样的问题.在Linux系统中,强大的shell就可以很灵活的处理这样的事务. 下面的shell通过一个while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,这样就保证了崩溃挂掉的进程重新被及时启动. 必须注意两点: 1.ps |grep 一个进程时必须加上其路劲,否则容易grep到错误的结果: 2.必须用 -v 从结果中去除grep命令自身,否则结果非空. 复制代