■
cronを使い、gnomeの設定を変更して壁紙を変えることをしていたが、一年程前から動かなくなっていた。
スクリプトは、RESTぶるさんのGNOME用壁紙チェンジャーをこっそり使わせてもらっていた。
gconftool-2を使って壁紙を変えている。
現象としては、コマンドでは普通に動くのに、cronで起動すると動かない。
動かないとは、.gconf以下の対象のxmlは変更されているにもかかわらず、壁紙は変わらず、gconf-editorにも変化がない。
動かなくなった原因は、 このバグレポート にあるとおり。
- この挙動は仕様どおりだそう。
- gconftool-2 と gconfd のプロセス間通信には CORBA を使っていたが、D-Bus に変更したらしい。
- D-Bus を使うには、DBUS_SESSION_BUS_ADDRESS が必要らしい。
- gconftool-2 を起動する cron は、DBUS_SESSION_BUS_ADDRESSを知らないので、通信に失敗するらしい。
- gconftool-2 --ping の終了ステータスで、失敗を確認できる。
- cron に DBUS_SESSION_BUS_ADDRESS を教えると起動できるようになるらしい。
上記リンク先のリンク先では、DISPLAY=:0.0 で起動に成功したという報告があったが、自分の環境では失敗した。
対応としては、いただいたソース中の gconftool-2 起動前に、下記を挿入した。
USER = (`whoami`).chomp! FILES = Dir.glob("/home/#{USER}/.dbus/session-bus/*") File::open(FILES[0], File::RDONLY){ |f| f.each{|line| if /^DBUS_SESSION_BUS_ADDRESS=(.*)$/ =~ line DBUS_SESSION_BUS_ADDRESS=$1 end } } ENV["DBUS_SESSION_BUS_ADDRESS"]=DBUS_SESSION_BUS_ADDRESS
一年もたって解決しようとしたきっかけは、Desktop Drapesという壁紙自動変更アプリだ。
Desktop Drapes が楽しそうだったので、インストールしてみたのだが、MonoがCPUリソースを食うだけで動かなかった。
そこで、壁紙チェンジャーを思いだし、修正してみることにした。
RESTぶるさん、当分使わせていただきます。
トラックバック初めてするので、変だったらお知らせください。
あれ、トラックバックできてない?