Compiz を Python からあやつる

タイトルは大袈裟。


ここ半年ほど Compiz のワークスペース切替器にキューブではなくデスクトップの壁(wall)を使っています。こっちのほうがキビキビ動くし。

んでこの wall plugin ですが,システム起動直後だと,ワークスペース切替時に壁紙がスクロールしないんです。まぁそんな仕様だと思えばいいんですけど,CompizConfig 設定マネージャを立ち上げて,「デスクトップの壁」プラグインを一度無効化して有効にすると,壁紙もスクロールするようになります。じゃあそういう仕様じゃないじゃん。

いままでいちいち起動後に CompizConfig 設定マネージャを立ち上げて修正していたんですけど,めんどくさい。CompizConfig 設定マネージャ*1Python で書かれているっぽいので Python から Compiz の挙動を操作できるんじゃね,と思ってやってみました。

import time
import compizconfig
ccs = compizconfig

context = ccs.Context()
wall = ccs.Plugin(context, 'wall')

wall.Enabled = False

time.sleep(1)

wall.Enabled = True

いちいち compizconfig.Context() って書いてもいいんだけど長ったらしいので ccs = compizconfig ってしてます((まぁ本気で短く書こうと思ったら compizconfig のままやったほうが今回は短いと思う。Context オブジェクトもわざわざ変数に代入する必要ないし。))。って実は CompizConfig 設定マネージャのソースの真似。Python ってこういう書き方もできるのねと勉強になりました。

time.sleep() なしでもうまく動くかなと思ったけど,ムリだったので入れてる。1秒も待たされるのはアレだけど,まぁ実害ないというか設定マネージャ立ち上げるより百倍はやいので。


ソース見ると相当たいしたことないでしょ。でも API ドキュメントとかが全然なくて結構苦労しました。

Compiz の Git レポジトリは Compiz Git repository browser とかで見られるんだけど,libcompizconfig のソースから[http://cgit.compiz.org/compiz/compizconfig/libcompizconfig/tree/include/ccs.h:title=include/ccs.h] とか Python バインディングのソースから[http://cgit.compiz.org/compiz/compizconfig/compizconfig-python/tree/src/compizconfig.pyx:title=compizconfig.pyx] とか見ながら書いた。

*1:よくよく考えたら変な名前ですよね。まぁ英語でももともと CompizConfig Setting Manager ですけど。