GNOMEデスクトップ用壁紙変更

GUIでやる

単に壁紙を変えたいのならデスクトップで右クリック。自動更新したいなら、deskletsの中に壁紙チェンジャーがある。

CUIでやる

以下のコマンドが用意されている。

$ gconftool-2 --type string --set "/desktop/gnome/background/picture_filename" ファイル名
$ gconftool-2 --type string --set "/desktop/gnome/background/picture_options" スタイル

なお、スタイルには以下を指定する。

取得するには —setでなく —getを使う。

……とはいえ、わざわざGNOMEデスクトップ上でこれをカタカタ打ち込む人もあまりいないんじゃないかと思う。 できないよりはできた方がいい のはもちろんなのだけど、これだけでは使い出がない。

だがUNIX的にはこれでいい。シェルと組み合わせればいいのだから。

function gwallset(){
  DISPLAY=:0.0 /usr/bin/gconftool -t string -s /desktop/gnome/background/picture_options $1
  DISPLAY=:0.0 /usr/bin/gconftool -t string -s /desktop/gnome/background/picture_filename $2
}

これは、愛用の某スクリプトの一部だ。そのスクリプトは実行すると、好みのライブカメラの最新画像を貰い受けてきて、アーカイブしつつ壁紙を張り替える。これをcron(スケジューラ)に登録してあるので、パソコンが動いている限り壁紙は常に自動的に張り替えられている。

プログラムから利用する

以下はRubyの例。指定ディレクトリ以下のJpeg画像を探してランダムに適当に貼り付ける。

#!/usr/bin/ruby

require 'find'
require 'gconf2'


if ARGV.length > 0
  wtype = "centered"
  wtype = ARGV[1].clone if ARGV.length > 1
  if test(?d,ARGV[0]) == true
    s = []
    Find.find(ARGV[0]) {|f|
      if test(?f,f) == true && f =~ /\.jpg$/i
        s[s.length] = f.clone
      end
    }
    ll = s.length
    if ll > 0
      r = rand(ll)
      c = GConf::Client.default
      c["/desktop/gnome/background/picture_options"] = wtype
      c["/desktop/gnome/background/picture_filename"] = s[r].clone
    end
  end
end

「なんだこれ」と思う?
 うちはflickrから30分ごとに新しい猫画像を一枚貰いにいく(これも自動で動いている)のだけど、既に一万枚を軽く越える猫画像が溜まっているのだ!にゃはは :D