【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