2011-01-04 4 views
2

Python-ClutterでX11ディスプレイをどのように設定しますか?私はそれをXSCREENSAVER_WINDOWに設定しようとしています。私はclutter.x11をインポートしてset_display()を使ってみましたが、これは正しいコマンドではないようです。誰もがこれを行う正しい方法を知っていますか?Pythonクラッター:ディスプレイを設定しますか?

+1

を参照してください、あなたはスクリプトを実行する前に、DISPLAY環境変数を設定するか試してみましたその後、例えば'export DISPLAY = ':0.0''または' os.environ [' DISPLAY '] =':0.0''? –

+0

これはスクリーンセーバーなので、これはうまくいくのではないでしょうか?私はこれを完全には理解していません。それは行くだろう。 –

答えて

0

私はthis threadを見つけて、アバター画像を見て、あなたのスレッドだと思っています; LemursDontExistで与えられたコードを投稿してみましょう。


短い説明:X Windowsでプログラムスクリーンセーバーを作るために、プログラムをチェックし、それはスクリーンセーバーとして実行されているであれば、それはのようなウィンドウ・システムによって呼び出された場合、それが意味しています。これは、環境変数DISPLAYXSCREENSAVER_WINDOWに設定されているかどうかをチェックすることによって行われます。

この場合、プログラムはフルスクリーンになり、特定のイベントに反応する必要があります。これはまさに以下のコードが行うことです。この変数を設定することは、xscreensaverアプリケーションを通じて行われます。あなたはそれを自分でやってはいけません。

欠けているビットは、clutter-gtkのpythonバインディングです。現在のUbuntuでは、パッケージ名はgir1.2-clutter-gtk-0.10です。これで、クラスターAPIと共にカスタムウィンドウクラスを使用できます。 pythonと混乱を使用する方法の簡単な概要については


class GsThemeWindow(gtk.Window): 
    __gtype_name__ = 'GsThemeWindow' 

def __init__(self): 
    super(GsThemeWindow, self).__init__() 
    self.connect("destroy", gtk.main_quit) 

def do_realize(self): 
    ident = os.environ.get('XSCREENSAVER_WINDOW') 
    if not ident is None: 
     self.window = gtk.gdk.window_foreign_new(int(ident, 16)) 
     self.window.set_events(gtk.gdk.EXPOSURE_MASK | 
           gtk.gdk.STRUCTURE_MASK) 
     x, y, w, h, depth = self.window.get_geometry() 
     self.size_allocate(gtk.gdk.Rectangle(x, y, w, h)) 
     self.set_default_size(w, h) 
     self.set_decorated(False) 
    else: 
     self.window = gtk.gdk.Window(
      self.get_parent_window(), 
      width=self.allocation.width, 
      height=self.allocation.height, 
      window_type=gtk.gdk.WINDOW_TOPLEVEL, 
      wclass=gtk.gdk.INPUT_OUTPUT, 
      event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK) 
    self.window.set_user_data(self) 
    self.style.attach(self.window) 
    self.set_flags(self.flags() | gtk.REALIZED) 

(それは多くのことを変更されている)、this example

関連する問題