🤖

【Python】WSLでPythonのグラフを表示しようとしたときのエラー(DISPLAY環境変数)

に公開

今日は、WindowsのWSL(Windows Subsystem for Linux)でPythonプログラムを動かしていて、グラフを表示しようとしたときに出たエラーについてお話しします。

どんな問題が起きたのか?

WindowsでXLaunchというソフトを使って、WSL上でPythonのmatplotlibというグラフを描くライブラリを使ったプログラムを動かそうとすると、こんなエラーが出ました:

Exception: couldn't connect to display "10.255.255.254:0.0"

これは、「画面に表示しようとしたけど、表示する場所(ディスプレイ)が見つからなかったよ」という意味です。

つまりこのエラーは、XLaunc(Xサーバー経由でGUIアプリケーションを表示するためのツール)を使ってPythonスクリプトを実行しようとしたときに、Xサーバーに接続できなかったことを意味します。

なぜこの問題が起きるの?

コンピューターの世界では、OSとアプリケーションの間に「窓口」のようなものがあります。

Windowsとは別のLinux(WSL)で動くプログラムを、Windowsの画面に表示させるには、この「窓口」を正しく設定する必要があります。

XLaunchは、この「窓口」の役割をするソフトウェア。

でも設定が正しくないと、「どこに表示したらいいの?」と迷子になってしまいます。

Exception: couldn't connect to display "10.255.255.254:0.0"というエラーは、DISPLAY環境変数が不適切に設定されている、あるいは、指定されたアドレスにXサーバーが実際には存在していない・アクセスできないことが原因です。

そもそも DISPLAY とは?

DISPLAY は「どこにウィンドウを表示するか」を指示する環境変数です。

典型的には:

  • :0.0 → ローカルマシンのディスプレイ(普通これ)
  • localhost:10.0 → SSH経由のX11フォワーディング(信頼された接続)

DISPLAY環境変数を確認するには、以下のコマンドを使用します。

echo $DISPLAY

10.255.255.254:0.0 のような「おかしなIP」入る主な原因

1. 🧪 WSL(Windows Subsystem for Linux)を使っている

WSLでは、Windows側にXサーバー(例:VcXsrv)をインストールして、Linux側からGUIを転送するため、DISPLAY にWindowsのローカルIPを設定する必要があります。

→ ここで間違って 不正なIP(10.255.255.254など) が自動設定されてしまうことがあります。

たとえば .bashrc.zshrc に以下のようなコードがあると:

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

これが失敗すると、変なIPが入ることがあります。


2. ネットワークの変化(VPN、Wi-Fi切替、IP変更など)

IP取得が自動処理になっている場合、VPNやネットワークの切り替えで DISPLAY のIPが変わり、誤った値になることがあります。

3. スクリプトやDockerが自動で設定している

Dockerやconda環境でDISPLAYが自動設定されるようにしている場合、そのスクリプトが間違っていることがあります。

対処法

export DISPLAY=:0.0 # または、適切なIPに修正

そして .bashrc.zshrc で怪しい自動設定がないかチェックしてみてください:

grep DISPLAY ~/.bashrc ~/.zshrc

Discussion