Active Desktop 風の効果 part1: xwinwrap

LinuxGnome 環境のデスクトップを Active Desktop 風にできないかちょっと調べて試してみることに。

動画やWebカメラの中継やスクリーンセーバーを壁紙のように扱うには今のところ xwinwrap で決まりでしょうか。
こちらの独学Linuxさんのページですでに紹介もされています。

最初に xwinwrap のデメリットを挙げてしまうと、動画等を表示させるのに以下のコマンドを実行して Nautilus によるデスクトップの描画を停止させてやる必要があるため、デスクトップ上に Nautilus の右クリックメニューやアイコンが表示されなくなること。
$ gconftool-2 --type bool --set /apps/nautilus/preferences/show_desktop false
アイコン等を元に戻すには下を実行して再ログイン。
$ gconftool-2 --type bool --set /apps/nautilus/preferences/show_desktop true

また、自分のように ATI のグラフィックカードを使用していて、Metacity の合成マネージャや Compiz を有効にしている状態では OpenGL 系スクリーンセーバーや動画の再生が正しく働かず画面が乱れてしまい役に立たない可能性が大・・・。T_T

・・・気を取り直して話を続けると、xwinwrap は最初のバージョン発表からまったく更新されていなかったそうですが、有志がバグフィックスや機能を加えてこちらで公開され解説もされています。

ダウンロードした zipアーカイブには、32bit 用と 64bit 用のバイナリファイル/usr/local/bin 下にコピーすればオーケーか?)、および Ubuntu/Debian 用の .deb パッケージが含まれていて、deb パッケージの方は Ubuntu Intrepid で動作を確認しました。

開発とソースコードの方はこちらです。
ソースからビルドする場合は以下を実行し、続いてソースを適当なディレクトリにダウンロード。
$ sudo apt-get install bzr build-essential
$ bzr branch lp:xwinwrap

xwinwrap.c ファイルがある xwinwrap ディレクトリに移動して以下を実行しインストール。
$ make
$ sudo make install

アンインストールは
$ sudo make uninstall

なお、動画を再生するには mplayer が必要なのでこれもインストールしておきましょう。
アニメーションGIF を使用したい場合は、gifsicle パッケージをインストールするとよいようです。

オリジナルからの変更点は、壁紙ウィンドウが「すべてのウィンドウの最小化」や「デスクトップの表示」からきちんと除外されて最小化されなくなったこと。

壁紙ウィンドウに対する大きさや配置位置の指定がきちんと働くようになったことなどだそう。

コマンドの記述:

xwinwrap [-g {w}x{h}+{x}+{y}] [-ni] [-argb] [-fs] [-s] [-st] [-sp] [-a] [-b] [-nf] [-o OPACITY] [-sh SHAPE] [-ov] -- コマンド 引き数1...

オプション:

-g 画像の大きさと配置位置(Geometry)の指定(w=幅(width)、h=高さ(hight)、x=x軸、y=y軸。記述例: -g 640×480+100+100)
-ni 入力を無視(No-Input
-argb RGB
-fs 全画面表示(Full Screen
-s スティッキー(Sticky
-st タスクバーに含めない(Skip Taskbar
-sp ページャーに含めない(Skip Pager
-a 他のウィンドウより上に(Above
-b 他のウィンドウより下に(Below
-nf フォーカスを渡さない(No Focus
-o 不透明度(Opacity) 0 〜 1 の値。(記述例: -o 0.20
-sh 壁紙ウィンドウの形(Shape)。(rectangle, circle, triangle から選択)
-ov override_redirect フラグを付与して、ウィンドウのタイトルバー等を非表示にしたりする

具体的な使用例:

fuzzyflakes というスクリーンセーバーを壁紙として表示:
xwinwrap -ov -fs -b -nf -- /usr/lib/xscreensaver/fuzzyflakes -root -window-id WID

小さくサイズ変更し位置も指定して表示:
xwinwrap -ov -b -nf -g 400x400+400+200 -- /usr/lib/xscreensaver/fuzzy -root -window-id WID

サークル状にして表示:
xwinwrap -ov -b -nf -g 400x400+400+200 -sh circle -- /usr/lib/xscreensaver/fuzzyflakes -root -window-id WID

mplayer を使用して ~/ビデオ ディレクトリにある「サンプル.avi」動画ファイルを壁紙として表示:
xwinwrap -ni -o 0.8 -fs -s -st -sp -b -nf -- mplayer -wid WID -quiet -loop 0 ~/ビデオ/サンプル.avi

gifsicle パッケージに含まれる gifview を利用して ~/画像 ディレクトリにある サンプル.gif アニメーションGIF画像ファイルを表示
参考: http://ubuntuforums.org/showthread.php?t=926519
xwinwrap -g 500x500+400+200 -ov -ni -s -nf -b -- gifview -w WID -a ~/画像/サンプル.gif

xwinwrap の停止は

$ killall xwinwrap

他に、webカメラで撮っている映像を壁紙として利用する方法や xwinwrap の始動/停止を切り替える便利なスクリプトについてはこちらを参考にしてください。

-- /usr/lib/screensaver/fuzzyflakes -- mplayer に続くのはそのコマンドの引数ですね。
それぞれ -window-id -wid-w のように表記が異なっているとはいえ、ウィンドウIDWID にセットしているのは共通のようです。

うーん、ということは、ウィンドウIDをセットするオプションが用意されていないプログラムは xwinwrap の取扱い対象外でしょうか?

追記:

Gwinwrap という、Python スクリプト言語で記述された xwinwarp の GUI フロントエンドも一応存在します。

実は swf ファイルを壁紙のようにできないかと、オープンソースのフラッシュ・ビューワである Gnash を試しました。

Gnash にはウィンドウID を指定するような --xid オプションが用意されているようなんですが、どうにも xwinwrap による制御を効かせることができませんでした。ツールバーがあるようなウィンドウだとダメなんだろうか?それとも自分が何か大きな勘違いをしているんだろうか?

本家 Adobe Linux 向け stand-alone 版の Flash Player 10 の場合は、コマンドにどんなオプションが用意されてるのか分からず、そもそも再生したい swf ファイルのパス以外の引数を受け付けない感じがするのでこれもパス。

追記2:

xmountains というプログラムも xwinwrap で制御できるみたいです。

参考:http://glymph.livejournal.com/6684.html

xmountains のコマンドラインを調べてみると、 -window-id オプションが存在するので、xwinwrap がWID変数に代入した値を描画の出力先のウィンドウのIDとすることができるのだと推測。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。