ubuntu / Mint下 perl 實現動態桌面壁紙 生成xml的實用腳本

相信你們已經瞭解到了ubuntu自帶的動態桌面背景了,有本身的圖片集,也想讓其中的圖片動態做爲本身的桌面背景怎麼辦???
背景知識參考:http://qyiyunso.blog.163.com/blog/static/3507768620107185273331/
引用:
不知你們在使用ubuntu時有沒有注意到,ubuntu下是能夠實現多張壁紙動態切換的,好像Win7下也有相似的功能(曾經使用win7一段時間)。我也是最近才注意到這點,下面是在ubuntu10.04下實驗的,以前版本的應該也能夠。 
實現原理是使用一個xml文件來記錄可供切換選擇的壁紙。下面展現的是10.04中自帶的一個樣例。 
首先說明一下,ubuntu默認的壁紙存放在/usr/share/backgrounds/目錄下的,在該目錄中還有一個cosmos(意思是「宇宙」)目錄,cosmos裏面的xml文件就是實現動態桌面壁紙切換功能的了。

如今關鍵是生成相應的xml 配置文件了,裏面的類容比較繁雜,手動更新太麻煩了,因此想到以腳本實現。

1. perl 寫成的源代碼以下:
代碼:
#!/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  [input file]

   -help       print this help to screen
   -d              directory contains the jpgs
   -o          write result to a file

=head1 Example

   perl  getBackgroundXML.pl  -d pic_dir -o background.xml
   perl  getBackgroundXML.pl  --

=head1 Version

   Verion   :   1.0
   Created   :   08/18/2010 03:34:52 PM 
   Updated   :   08/18/2010 05:18:23 PM
   LastMod   :   ---


=head1 Contact

   Author   :   QuNengrong (Qunero)
   E-mail   :   Quner612@qq.com,QuNengrong@genomics.cn
   Company   :   BGI

=cut
#-------------------------------help-info-end--------------------------------#
#============================================================================#
use strict;
use warnings;
use Getopt::Long;

my ($Need_help, $Out_file, $PicDir );
GetOptions(
   "help"      => \$Need_help,
   "d=s"      => \$PicDir,
   "o=s"      => \$Out_file,
);

die `pod2text $0` if ($Need_help);

#============================================================================#
#                              Global Variable                               #
#============================================================================#
my $Input_file  = $ARGV[0]  if (exists $ARGV[0]); 
$PicDir ||= '.';
$PicDir =~ s/\/$//;
$PicDir =~ s/ /\\ /g;

#============================================================================#
#                               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`;
#   print STDERR $PicDir , "\n";

   chomp( @picFiles );
#   print STDERR join( "\n", @picFiles );

   if( $PicDir =~ /^\// ){
      for ( @picFiles ){
         $_ = "$PicDir/$_";                  # get full path;
         $_ =~ s/ /\\ /g;
      }
   }
   else {
      my $curDir = `pwd`;
      chomp( $curDir );
      for( @picFiles ){
         $_ = "$curDir/$PicDir/$_";
         $_ =~ s/ /\\ /g;
      }
   }
#   print STDERR join( "\n", @picFiles );

   my $oldjpg = $picFiles[-1];
   print STDOUT 
"
   
      2010
      08
      18
      00
      00
      00
   
   \n";

   for ( @picFiles ){
      print STDOUT 
"   
      1795.0
      $oldjpg
   
   
       5.0
       $oldjpg
      $_
   \n";
   $oldjpg = $_;
   }

   print "\n";

}
腳本使用簡單說明:
1. 運行時最好使用完整路徑,指明 圖片所在的目錄, 例如:
代碼:
getBackgroundXML.pl -d /home/mintqnr/Pictures/wallpaper/Windows7/ -o Windows7/background.xml


2. 默認 圖片文件路徑爲當前目錄 ,文件類型爲 jpg, 默認輸出結果到終端,保存需加上 -o filename;

3. 設置好後的應用方法:右鍵桌面->更改桌面背景->添加,在彈出對話框的右下方那裏選擇「所有文件」(默認是「圖像」),而後找到你定義好的動態桌面壁紙的xml文件,雙擊添加就能夠了。

4. 感興趣的實驗 : 
1)加入可選參數 -t 指定切換時間,默認半小時左右。
2)優化代碼,讓其可移植性更好~~

5. 附件是源代碼,以及幾張漂亮的window7圖片 ,background.xml 須要根據你的路徑修改後在使用~~,祝你們玩得開心、用得順手!
附件和源碼下載,請見ubuntu 論壇: http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=289599
相關文章
相關標籤/搜索