• 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  "	<starttime>" >> $animate_back
     52     echo -e  "		<year>$(date +%Y)</year>" >> $animate_back
     53     echo -e  "		<month>$(date +%m)</month>" >> $animate_back
     54     echo -e  "		<day>$(date +%d)</day>" >> $animate_back
     55     echo -e  "		<hour>00</hour>" >> $animate_back
     56     echo -e  "		<minute>00</minute>" >> $animate_back
     57     echo -e  "		<second>00</second>" >> $animate_back
     58     echo -e  "	</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  "	<static>" >> $animate_back
     73         echo -e  "		<duration>${STAY:=300}</duration>" >> $animate_back
     74         echo -e  "		<file>$f</file>" >> $animate_back
     75         echo -e  "	</static>" >> $animate_back        
     76         echo -e  "	<transition>" >> $animate_back
     77         echo -e  "		<duration>${DURATION:=3}</duration>" >> $animate_back
     78         echo -e  "		<from>$f</from>" >> $animate_back
     79         echo -e  "		<to>$fn</to>" >> $animate_back
     80         echo -e  "	</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]	 图像文件目录"
    102     echo -e "-d[Duration]	 图像切换时长,默认3s"
    103     echo -e "-s[StayTime]	 图像停留时长,默认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
  • 相关阅读:
    操作系统路径.islink在使用python的windows上
    Python shutil模块zz
    CMake 两种变量原理 ZZ
    cmake语法-函数和宏的定义
    cmake函数、宏和模块
    cmake函数、宏和模块
    CMake 常用宏分享
    设定cmake输出目录
    android layerlist 里面的rotate标签得到三角形原理详解
    abp(net core)+easyui+efcore实现仓储管理系统——出库管理之三(五十一)
  • 原文地址:https://www.cnblogs.com/kyyblabla/p/3983520.html
Copyright © 2020-2023  润新知