$DISPLAYが未定義でmatplotlibがコケる問題を再発させない方法

  • 39
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ssh経由でリモートログインしていてmatplotlibを使った可視化のスクリプトを実行したりすると、たとえGUIを出すコードではなくファイルに出力するコードでも _tkinter.TclError: no display name and no $DISPLAY environment variable と怒られてしまう。

で、その直接的な解決方法はもちろん env DISPLAY=:0 python ... でよいのだけども、まあ人間はうっかり付け忘れてがっかりする生き物なので恒久的に再発防止をしたい。

このエラーの根本的な原因はmatplotlibのデフォルトバックエンドがTkAggになっているせい。というわけで /etc/matplotlibrc で以下のように変更すれば良い。

- backend      : TkAgg
+ backend      : Agg

めでたしめでたし