So-net無料ブログ作成

【Ubuntu 11.10】Compiz Comfig設定マネージャーのプロファイル選択が出来ない問題の対処 --- Compiz Desktop Cubeも動くようになった [ubuntu]

--- 2011/10/15 追記 ---

直してくれてるようです。

https://bugs.launchpad.net/ubuntu/+source/compizconfig-python/+bug/874799

私のパッチとは若干違いますが、基本的に同じ修正です。そのうち出ると思います。

---2011/10/15追記終わり ---

いつの頃か、Compiz Config設定マネージャーでプロファイル設定が出来なくなりました。

下図のように、プロファイルを変えようとしてもメニューが文字化けしてしまいます。

SS-ccsm-bug1-001.JPG

どこが悪いのかちょっとソースを追いかけてみました。

このメニュー部分を出力する仕組みは、下記のようにコールして行われます。

CompizComfig-Settings-Manager (フロントエンド:pythonで記述)
                ↓
CompizConfig-python (Python -C ブリッジ :pythonで記述)
      ↓
libcompizconfg-0 (Compiz Comfig ライブラリ : Cで記述)
      ↓
compizconfig-backend-gconf (gconfへのアクセスルーチン : Cで記述)
      ↓
    Gconfの設定データ

Gconfの設定データを読んだら、その戻り値でプロファイル名をリスト構造で返していき、最終的にCompiz Config設定マネージャーが出力するようになっています。

Gconfの設定データを読み出したcompizconfig-backend-gconfでは、下図のようなデータ形式でデータを詰め込んでいます。

SS-ccsm-bug1-005.JPG

ところが、CompizConfig-pythonの所で、C言語のデータ形式をpython言語読み出せるようにしているのですが、そこでは何故か下記のデータ形式だと思って読みだしていました。

SS-ccsm-bug1-006.JPG

 

というわけで、compizconfig-python(対象:python-compizconfig_0.9.5.94-0ubuntu2_i386.deb) を書き直しました。

下記がそのパッチ。

diff -urN compizconfig-python-0.9.5.94.org/src/compizconfig.pyx compizconfig-python-0.9.5.94/src/compizconfig.pyx
--- compizconfig-python-0.9.5.94.org/src/compizconfig.pyx       2011-09-03 02:36:32.000000000 +0900
+++ compizconfig-python-0.9.5.94/src/compizconfig.pyx   2011-10-07 15:36:19.034895854 +0900
@@ -1178,11 +1178,11 @@
         self.profiles = {}
         self.currentProfile = Profile (self, ccsGetProfile (self.ccsContext))
         cdef CCSStringList * profileList
-        cdef char * profileName
+        cdef CCSString * profileName
         profileList = ccsGetExistingProfiles (self.ccsContext)
         while profileList != NULL:
-            profileName = <char *> profileList.data
-            self.profiles[profileName] = Profile (self, profileName)
+            profileName = <CCSString *> profileList.data
+            self.profiles[profileName.value] = Profile (self, profileName.value)
             profileList = profileList.next
 
         self.backends = {}
 

後は、ビルドして放り込むだけ。

apt-get source compizconfig-python

cd compizconfig-python-0.9.5.94 

ここで上記パッチを当てて、

sudo apt-get build-deb compizconfig-python 

debuild -us -uc -b

でパッケージを作ります。最後のdebuildをするにはいくつかパッケージをインストールしないといけないのですが、忘れてしまいました・・

後はパッケージをインストールするだけなのですが、私は展開してcompizconfig.soのみをコピーしました。

そしたら下記のように変更できる状態になりました。

SS-ccsm-bug1-002.JPG

今まではデフォルトしか選べなかったのですが(私の環境だけかな??)、下図のように他の物も選べます。

SS-ccsm-bug1-003.JPG

おかげで、Desktop Cubeも動くようになりました。

SS-ccsm-bug1-004.jpeg

もしbackendをGSettingsで動かして、本記事のパッチを当てずにまともに動いたら、厄介な状態です。

そうなったら、本記事のパッチを当てた状態でGSettings側のbackendを変えるか、本記事のパッチを当てずにGconfのbackendを変更する事になります。後者の場合、backendをコールするlibcompizconfig-0が受け渡す際の型が違ってしまうので、前者の方が簡単かもしれません。

それから、本対処をしてもまだ問題があるようで、プロファイルを変更した時にやたら時間がかかってしまいます。(かなりかかります。5~10分前後) なんか、一度Compizが落ちてるんじゃないかな~と思ってしまいます。

 

 ←iPad2 (32G)

    先日(10/5)に、スティーブ・ジョブズさんが
    お亡くなりになりました。
    ご冥福をお祈りします。
    でも、私Appleの製品買った事がない。
    値段が少し高いことと、私が持っている
    他のPCや周辺機器との相性を考えると
    購入できなかったです。


nice!(0)  コメント(2) 
共通テーマ:パソコン・インターネット
メッセージを送る