2008年6月1日日曜日

[Linux][Fedora]NowPlayingウィジェットが動かなくなった理由が分かった

Screenletsで利用していたウィジェットの1つ、NowPlayingがFedora9になってから動かなくなっております。
NowPlaying自体は起動するんですが、Amarokとは一切通信を行っていない様子。で、他の類似のウィジェットを使っていたのですが、どうやらそいつがXのCPU喰いを促進させていたらしく、一旦止めることに。
件のウィジェットを止めたおかげでCPU使用率は落ち着きました(とは言ってもまぁそこそこ喰っているわけですが^^;)。
が、これでは現在再生中の楽曲情報がぱっとは分かりません。それで何が困るんだ? とおっしゃる方も多いとは思うんですが、私に取ってはデスクトップを派手にすることが至上命題。再生中の楽曲情報を常時表示しておくのは必要なことなのですよ(ぇ
ということで、いっちょスクリプトの中身を考察する事に。前に一度眺めたことはあったのである程度目星はついています。
ウィジェット自体は立ち上がっていますから、問題はAmarokとの通信部分だろうと推察。NowPlayingウィジェットは複数のプレイヤーに対応しており、それぞれのプレイヤーごとにスクリプトを分けて管理しているので分かりやすいんですね。見習いたい構成です。
で、$HOME/.screenlets/NowPlaying/Players/Amarok.pyを開いて流れをチェック。
Gnome系のプレイヤーはD-Busを使ってやりとりをしていますが、AmarokはDCOP。そのため、冒頭でdcopモジュールをインポートしています。
で、よくよく起動時のメッセージを見ると、なんとdcopモジュールが見つかっていないではないですか。起動時のメッセージは結構たくさん表示されてまして、件の「モジュール見つからねぇよゴルァ!」なメッセージは流れてしまってたんですね。それで今まで気づかなかったと。
そら要となるdcopモジュールが見つからないのでは話になりません。このモジュールがどのパッケージに含まれるのか調べたところ、pydcop.pyというファイルらしく、それがkdebindingsに同梱されているらしいんですね。
ここでふと疑問が。kdebindingsはFedora9に更新した直後に放り込んだパッケージなんですよ。手動で放り込んだので覚えています。けど「pydcop fedora」でぐぐったらkdebindingsのパッケージが引っかかる。
ただ、引っかかったのは全部Fedora8以前のものだったんですね。ここでふと思い出す。
・・・、KDE4ってそういやDCOPからD-Busへ移行したんだっけ。
KDEアプリが完全移行したわけではないのでDCOPも残っていますが、方向性としてはD-Busへ移行しDCOPは縮小方向へ向かっているわけです。当然、KDE4のkdebindingsにはpydcopなんて含まれていないわけでOrz(ちゃんとrpm -ql kdebindingsで調べた。なかった)。
で、KDE3向けのパッケージに運良く入ってないかと期待しましたが、/usr/lib64/python-2.5以下にそんなものは用意されていませんでしたOrz
つまるところ、NowPlayingの作者さまがpydcopを使わない形でAmarok.pyを修正してくださるか、自前でスクリプトを修正するかの2択となったわけです。
で、ちょっと考えてはみたんですが自力での修正はかなり悩まないと無理そうだということでひとまず置いておきます。というか、AmarokもそのうちD-Busへ対応するでしょうし、今これをpydcopを使わない形で修正してもAmarok2.0が出たときに再度修正する必要が出てくるんですよね。そら面倒くさいな、と。
まぁAmarok2.0は開発が地味に難航しているようですからいつくらいに出るかは不明ですけれど、そのときにはD-Busが乗っかっていることでしょう。ちらっと調べたところ、DCOPよりも扱いはややこしそうですが、ルールさえ分かってしまえばかなり幅広く他のアプリと連携が取れそうですので面白そうです。DCOPの手軽さも大好きなんですけれどね。
ということで、しばらくはデスクトップがおとなしくなりそうです(苦笑) なるほど、PlasmaにSuperKarambaのスクリプトを変換させてもなかなかうまく変換してくれないのはDCOPが多用されていたからか。
pydcopがないために起こるってことだし、Fedora9以外では起きてないかもな。KDE3を完全に切り離してるのはFedora9くらいだし。ちょ〜っと先走りすぎたのかもしれないね?^^;