Compiz を Python からあやつる
タイトルは大袈裟。
ここ半年ほど Compiz のワークスペース切替器にキューブではなくデスクトップの壁(wall)を使っています。こっちのほうがキビキビ動くし。
んでこの wall plugin ですが,システム起動直後だと,ワークスペース切替時に壁紙がスクロールしないんです。まぁそんな仕様だと思えばいいんですけど,CompizConfig 設定マネージャを立ち上げて,「デスクトップの壁」プラグインを一度無効化して有効にすると,壁紙もスクロールするようになります。じゃあそういう仕様じゃないじゃん。
いままでいちいち起動後に CompizConfig 設定マネージャを立ち上げて修正していたんですけど,めんどくさい。CompizConfig 設定マネージャ*1が Python で書かれているっぽいので 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 ですけど。