Lion で X11 が死ぬ問題の解決法

Lion に移行してから、ROOT で script を複数回走らせると X11 が凍るというか死ぬ問題が発生するようになりました。RootTalk の情報では、これは ROOT の bug ではなく (Apple の) X11 の bug だそうです。同じ thread に解決方法も載っているので、Lion + ROOT を使っている人は回避策を実行しておいたほうが吉。

再現するのも簡単で、以下の通りやれば X11 が反応しなくなります (cmd + opt + esc をやると、"Not Responding" になる)。

void bugx11() {
   TCanvas *c1 = new TCanvas(); 
   TCanvas *c2 = new TCanvas();
   c2->Divide(1,2);

   TH1D * h1 = new TH1D("h1","h1",100,0,1);
   h1->Draw();

   printf(">>> Before Update\n");
   gPad->Update();
   printf("<<< After Update\n");
}
$ root 
root [1] .x bugx11.C
>>> Before Update
<<< After Update\
root [2] .q
$ root 
root [1] .x bugx11.C
>>> Before Update
[ここで固まる]

解決方法

XQuartz 2.7.0 以上を落としてきて、install する。次に以下の command を実行 (やらなくても良い気がするんだけど、うちの環境はやらないと駄目だった)。

$ launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist

最後に login し直して ROOT を立ち上げると、X11.app ではなく XQuartz.app が立ち上がるはずです。