让您的Ubuntu桌面壁纸动态变化

    最近一直还Ubuntu的桌面背景动态变化的只有那么2个目录而烦恼,网上找了下资源,发现一xml脚本生成工具。这是因为要动态改变需要一个xml脚本语言,本perl脚本用于生成xml脚本文件。具体步骤:
1.将新的背景图片和本.pl文件放到名为background(自己定义)的文件夹中;2.将本目录cp到/usr/share/backgrounds目录中,需要sudo;3.cd background; 4.sudo perl getBackgroundXML.pl -t 1500 -d . -o change.xml,生成.xml文件;5.右击桌面->更改桌面背景->添加->找到该目录->显示所有文件->选择change.xml 6. OK

    getBackgroundXML.pl 源码如下:

  #!/usr/bin/perl  
  #==============================================================================# 
  #-------------------------------help-info-start--------------------------------#
# =head1 Name 
#   
#      getBackgroundXML.pl --> generate the background.xml file to change Ubuntu background picture dynamiclly 
#   
#  =head1 Usage 
#   
#      perl  getBackgroundXML.pl  [<options>] [-d PicDir='.'] [-t TimeToLast=1795.0] [-i Interval=5.0] [-o Background.xml=STDOUT] 
#   
#      -help       print this help to screen 
#      -a          flag ,if set ,write all pictures to one xml file 
#      -d          directory contains the jpgs, defalt : '.' 
#      -t          time to change background picture, unit : seconds, default : 1795.0 
#      -i          interval time spend to change the two pictures, default : 5.0 
#      -o          write result to a file , default : STDOUT 
#   
#  =head1 Example 
#   
#      perl  getBackgroundXML.pl  -d Windows7 -t 25 -i 5 -o Windows7.xml 
#      perl  getBackgroundXML.pl  -- 
#   
#  =head1 Version 
#   
#      Verion  :   2.0 
#      Created :   08/18/2010 03:34:52 PM  
#      Updated :   08/18/2010 09:51:11 PM 
#      LastMod :   --- 
#   
#   
#  =head1 Contact 
#   
#      Author  :   QuNengrong (Qunero) 
#      E-mail  :   [email protected],[email protected] 
#      Company :   BGI 
#   
#  =cut  
#  #============================================================================# 
  use strict; 
  use warnings; 
  use Getopt::Long; 
   
  my ($Need_help, $Out_file, $PicDir, $TimeToLast, $Interval, $AllInOne ); 
  GetOptions( 
      "help"      => /$Need_help, 
      "a"     => /$AllInOne, 
      "d=s"       => /$PicDir, 
      "t=i"       => /$TimeToLast, 
      "i=i"       => /$Interval, 
      "o=s"       => /$Out_file, 
  ); 
   
  die `pod2text $0` if ($Need_help); 
   
  #============================================================================# 
  #                              Global Variable                               # 
  #============================================================================# 
  my $Input_file  = $ARGV[0]  if (exists $ARGV[0]);  
  $PicDir ||= '.'; 
  $TimeToLast ||= 1795.0; 
  $Interval ||= 5.0; 
  $PicDir =~ s///$//; 
  $PicDir =~ s/ /// /g;                           # replace SPACE to /SPACE ; 
  #print STDERR "$0 -d $PicDir -t $TimeToLast /n"; 
  #============================================================================# 
  #                               Main process                                 # 
  #============================================================================# 
   
  if(defined $Input_file) 
  { open(STDIN, '<', $Input_file) or die $!; } 
  if(defined $Out_file) 
  { open(STDOUT, '>', $Out_file) or die $!; } 
   
  print STDERR "---Program/t$0/tstarts--> ".localtime()."/n"; 
       
  # step 01: getBackgroundXML 
  &getBackgroundXML(); 
   
  print STDERR "---Program/t$0/t  ends--> ".localtime()."/n"; 
   
  #============================================================================# 
  #                               Subroutines                                  # 
  #============================================================================# 
   
  sub getBackgroundXML(){ 
  #   my @picFiles = `ls $PicDir |grep .jpg`;     # it's better than glob , in case $PicDir is ~/subDir 
      my @picFiles ; 
      if( $AllInOne ){ 
  #       @picFiles = glob ( "$PicDir/*/*.jpg" ); 
          @picFiles = `find $PicDir/ -name "*/.jpg"`; 
      } 
      else { 
          @picFiles = glob ( "$PicDir/*.jpg" ); 
      } 
   
  #   print STDERR "test files:/n/t", join( "/t", @picFiles ); 
      chomp( @picFiles ); 
   
   
      if( $PicDir =~ /^/// ){ 
          for( @picFiles ){ 
  #           $_ = "$PicDir/$_";                  # already full path; 
              $_ =~ s/ /// /g; 
          } 
   
      }  
      else {                # path start with ./ OR ../ OR subDir/ 
          my $curDir = `pwd`; 
          chomp( $curDir ); 
          for( @picFiles ){ 
              $_ = "$curDir/$_"; 
              $_ =~ s/ /// /g; 
              $_ =~ s////.//////g;                # change /./ to / 
              $_ =~ s///[^//]+///././/////;       # change path/dir/../anotherDir/ to path/anotherDir/ 
          } 
      } 
       
      #   print STDERR join( "/n", @picFiles ); 
   
      my $oldjpg = $picFiles[-1]; 
      print STDOUT  
  "<background> 
      <starttime> 
          <year>2010</year> 
          <month>08</month> 
          <day>18</day> 
          <hour>00</hour> 
          <minute>00</minute> 
          <second>00</second> 
      </starttime> 
      <!-- This animation will start now. -->/n"; 
   
      for ( @picFiles ){ 
          printf STDOUT  
  "   <static> 
          <duration>%.1f</duration> 
          <file>$oldjpg</file> 
      </static> 
      <transition> 
          <duration>%.1f</duration> 
          <from>$oldjpg</from> 
          <to>$_</to> 
      </transition>/n", $TimeToLast, $Interval ; 
      $oldjpg = $_; 
      } 
      print "</background>/n"; 
     }

 

你可能感兴趣的:(ubuntu,File,perl,animation,transition,Warnings)