LoginSignup
15
11

More than 3 years have passed since last update.

WSL2上のPython環境でtkinter等のGUIプログラムを動かす方法

Posted at

普段、PythonをWSL2でUbuntu環境を作り、その上でPyenv + Pipenv環境を構築して使っているのですが、tkinter等のGUIプログラムを動かす必要があったので、どのように設定を行ったのかをまとめました。

ちなみに、WSL2環境でGUIプログラム (この場合tkinter)を動かそうとすると、_tkinter.TclError: no display name and no $DISPLAY environment variableとエラーが出てしまいました。

(余談: WSL (WSL1)の場合、下記で紹介するXming Serverのインストール (Additional parametersの設定なし)と、Ubuntu等のWSL環境での環境変数の変更だけで対応できるようですが、WSL2の場合、仕様が異なるため、複雑な手順を踏まないといけないようです。)

Windows側の対応

GUIプログラムを動かすにあたって、Windows側にXming Serverなるものをインストールし、GUIの画面出力をできるようにします。

Xming Serverを自分の環境では使いましたが、VcXsrvの方が使いやすいかもです。 (機能は一緒)

インストールしたら、Xming Serverの場合はXLaunch、VcXsrvの場合はそのままアプリを立ち上げると設定画面のようなものが出ます。そのままなにも変更せずにNextを押し続けると以下のような画面が出てくると思うので、Additional parameters for Xmingに-acと入力て、そのままNextを押し続けて設定を完了させます。
スクリーンショット 2020-12-16 110417.png

すると、タスクバー (右側のバックグラウンドアプリの場所)にXming Serverのアプリが起動していると思うので、マウスオーバーして記されている文字列を確認します。下記の画像のように、:0.0などの数字を確認しておいてください。 (あとで使います)
スクリーンショット 2020-12-16 110612.png

WSL2環境 (Ubuntu)の設定

今回はUbuntuを使用します。

GUIプログラムを動かすためにDISPLAYという環境変数を設定してあげる必要があります。

環境によって異なりますが、今回は.bash_profileに環境変数を設定してあげます。

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

これは、DISPLAYという環境変数にXming Serverを指定するものなのですが、通常はDISPLAY=:0.0のような形式で設定できますが、WSL2のネットワークの仕様変更により (localhostでの接続ができなくなるため)Windows側のIPアドレスを指定する必要があるので、長いコマンドではありますが、このように設定してあげる必要があります。

これらの設定が終わると、GUIプログラムが動くようになります。
スクリーンショット 2020-12-16 111230.png
スクリーンショット 2020-12-16 111341.png

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11