2008年2月4日月曜日

[Linux][Widget][Screenlets]Screenletsの便利な用法

普段からLinux系のネタが多く、巡回してくれている友人に申し訳ないということで、タイトルに内容に即したタグをつけるようにしてみました。ユーザタグにも同じものをいれるようにしようかと考えてます。
ということで、興味のない人にとっては記事内容を読まずにスルーできる確率が増えました(ぉ
さて前置きはこれくらいにして、今回の本題。このところ、Mac OS XのDashboard、Vistaのサイドバー、GoogleToolbarのGoogleガジェットなどデスクトップウィジェットは結構な人気です。Linuxにも(Gnomeの方はよく知らないんですが^^;)SuperKarambaなどが人気です。
で、こないだみつけたLinux向けのウィジェットツールに、Screenletsというものがあります。これはCompiz-Fusionとセットで使うことを目的に作られたウィジェットツールで、Dashboardみたくウィジェットレイヤーで表示することが可能です。
逆に、Compizを無効にしていると透過するはずの背景が黒くなってしまうという問題を抱えています。まぁ、Compiz使用が前提なので仕方ないかも^^;
さて、このScreenletsですが、残念ながらFedora向けのバイナリは提供されていません。使用する場合は自前でビルドする必要があります。Gnome向けのパッケージですし、Fedora9の頃にはバイナリが提供されるとは思いますが、Fedoraユーザですぐ試したい方は頑張ってビルドしてください。
Ubuntuユーザにはaptラインが用意されており、すぐ試すことができます。最近、Ubuntuの方がいいんじゃないかと思えて来ました・・・。KDE4も試せるしね・・・。
ちなみに、Screenletsのウィジェットは大半がUbuntu向けに提供されてます。ウィジェット作成者にUbuntuユーザが多いのでしょうが・・・、Fedoraではスクリプトを修正しないと動かないものがちょこちょこあります。
で、これだけなら特別SuperKarambaから乗り換えるほどの魅力もないんですが、なかなか面白いことが可能であることに気づいたんです。
Screenletsのウィジェット配布サイトとして、Gnome-look.orgなんかがあるんですが、ここに「Googlemaps」とか「LastWidget(LastFMのウィジェット)」、「WebFrame」なんてのが登録されてるんですよ。
つまり、Webページをウィジェットとしてデスクトップに置くことができる訳です。
これらの機能はDashboardやVistaのサイドバー、Googleデスクトップにもついてます(ついてたはず)。
からくりとしてはとても簡単です。ScreenletsはPythonスクリプトでウィジェットを構成するのですが、Pythonのモジュールとして提供されているgtkmozenbed(であってたっけ?)を利用し、WebページをそのままGeckoエンジンで描画している訳です。よーは、ウィジェットにブラウザエンジンを埋め込み、そいつがページを描画している訳です。よって、Firefoxで閲覧できるページはどこでも表示可能ということになります。
さらに、この埋め込みブラウザはFlashやJavascriptなども実行可能ですから、先述したGooglemapsなども表示可能。やろうと思えばニコニコ動画やYouTubeの動画垂れ流しも可能です。
また、Flashが使用可能ということで、数多く提供されているブログパーツをウィジェットとして利用することも可能です。実際、ブログパーツとして提供されているLast.fmのウィジェット(このサイトの右下にもありますね)は正しく表示できることを確認しました。表示するURLは、Last.fmの場合

http://www.lastfm.jp/widgets/popup/?colour=red&chartType=recenttracks&user=code_air_edge&chartFriends=1&from=code&widget=chart&resize=1

になります。「user=code_air_edge」と書いてある部分は表示したいユーザに書き換えてください。そのままコピペすると私のリストになっちゃいます^^;
時計のウィジェットとかだと、単体のウィジェットとしても十分使えそうですよね。ふるみっく伝染プレーヤーとかも面白そう。GoogleリーダーのようなRSSリーダーも便利かもしれませんね。
また、Blogペットを利用している人は、Blogを開いていなくてもペットを愛でることができます。しかもそれがBlogの方と同じなわけですから、愛着も増すんじゃないでしょうか?
ってなわけで、割とべた褒めなんですが、ちらっと述べましたように、これらのウィジェット(特にウェブページを表示するタイプ)はその大半がUbuntu向けに提供されています。元となるスクリプトとしてGooglemapsを真似して作ってあるスクリプトが多いんですが、そのスクリプト内でUbuntuかどうかを判断している部分があります。で、Ubuntuでない場合が実装されてません^^; ですので、Fedoraでは大概動きません。
幸いにして、修正は簡単です。元となるスクリプトには

if commands.getoutput("lsb_release -is") == 'Ubuntu':
mypath = sys.argv[0][:sys.argv[0].find('WebframeScreenlet.py')].strip()
if os.path.isfile(mypath + "running"):
os.system("rm -f " + mypath + "running")
else:
os.system ("export LD_LIBRARY_PATH=/usr/lib/firefox \n export MOZILLA_FIVE_HOME=/usr/lib/firefox \n"+ sys.argv[0] + " &")
fileObj = open(mypath + "running", "w")
fileObj.write('gtkmozembed bug workarround')
fileObj.close()
exit()
else:
pass

と書かれておりますので、次のように書き換えてください。

if commands.getoutput("lsb_release -is") == 'Ubuntu':
mypath = sys.argv[0][:sys.argv[0].find('WebframeScreenlet.py')].strip()
if os.path.isfile(mypath + "running"):
os.system("rm -f " + mypath + "running")
else:
os.system ("export LD_LIBRARY_PATH=/usr/lib/firefox \n export MOZILLA_FIVE_HOME=/usr/lib/firefox \n"+ sys.argv[0] + " &")
fileObj = open(mypath + "running", "w")
fileObj.write('gtkmozembed bug workarround')
fileObj.close()
exit()
else:
mypath = sys.argv[0][:sys.argv[0].find('WebframeScreenlet.py')].strip()
if os.path.isfile(mypath + "running"):
os.system("rm -f " + mypath + "running")
else:
os.system ("export LD_LIBRARY_PATH=/usr/lib/firefox-2.0.0.10 \n export MOZILLA_FIVE_HOME=/usr/lib/firefox-2.0.0.10 \n"+ sys.argv[0] + " &")
fileObj = open(mypath + "running", "w")
fileObj.write('gtkmozembed bug workarround')
fileObj.close()
exit()

ちなみに、64bit版のFedoraを利用している方は「/usr/lib」のところを「/usr/lib64」に書き換えてください。また、これはFirefoxのバージョンが上がると使えなくなるのでその都度書き換える必要が出てきます。kernelみたいに、/usr/lib/firefoxにシンボリックリンク作ってほしいですねぇ。このあたり、Ubuntuの仕様の方がステキです。Fedora9ではXULRunnerが利用される可能性もありますね。
あ、それとここでは「WebframeScreenlet.py」となっていますが、私がWebframeというウィジェットをサンプルに選んだだけで、GooglemapsやLastWidgetだとそのファイル名が違っています。基本的にはifの文面をelseにコピーして修正ってことなんで、適宜対応してください。
使ってみた感じですが、予想以上にメモリ使用量が少なく、いけてる感じでした。特にWebframeはURLを設定画面で入力するだけで表示してくれるので非常にお手軽。これできちんと表示できるかを確かめて、それから専用ウィジェットを作成すると手間が省けそうです(ブログパーツなんかだと、Webframeのウィジェットサイズが大きすぎて不格好になる)。
さらにさらに、Flashを作れる人は、表示をScreenlets側に投げることができるので、ちょっとした表示用のスクリプトを書くだけでWinとMacとLinuxに対応できます。AIRなんかなくても平気ってやつですね。
Webコンテンツをウィジェットに登録ってのも、結構面白いもんだ。Twitterとか作っちゃおうかしら^^