pygtkの前にXvfbを起動する
pywebkitgtkとPILでWebページのサムネイル作成 - ラシウラでは、gtkのためにxvfb-run経由で呼び出しました。
いちいちxvfb-runを呼ぶのも面倒です。gtkモジュールを読み込む前にスクリプト中でXvfbを立ち上げたら、どうか試したところ、うまくできたようです。
Xvfb起動関数vfb()
Python標準のsubprocessモジュールのPopenを使って、Xvfbを起動させる関数です。
振舞い方は、xvfb-runを模倣してます。
def vfb(display_spec="1024x768x24", server=0, screen=0, auto_screen=True): """ run Xvfb and set DISPLAY env """ import subprocess import os while True: try: devnull = open("/dev/null", "w") proc = subprocess.Popen( ["Xvfb", ":%d" % server, "-screen", "%d" % screen, display_spec], shell=False, stdout=devnull, stderr=devnull) os.environ["DISPLAY"] = ":%d.%d" % (server, screen) return (proc, screen) except: #import traceback #traceback.print_exc() if not auto_screen: break screen += 1 pass pass pass
使い方は以下のような感じです。
proc, screen = vfb()
import gtk
...
proc.terminate()