見出し画像

WSL2上でGUIアプリ導入とVSCodeによるpython開発環境の設定

はじめに

Windows Subsystem for Linux 2 (WSL2) がリリースされてからWindows 10上でLinuxのライブラリが使いやすくなってきました.特にPythonでプログラミングを始めると時々WindowsのVC++とCMAKEではコンパイルできないライブラリに遭遇し結局LinuxマシンやGoogle colaboratoryでしか動作確認ができない状況に陥ります.そんな時にWSL2にGUIを使えるように設定すると通常のpythonスクリプトからもグラフなどで結果の出力ができますし,様々なLinuxのGUIアプリが使用できるようになります.この記事では最初にWSL2でGUIを使う設定を行い,後半では,Visual Studio CodeをWSL2から呼び出しpython開発環境を構築するところまでの手順を紹介します.

Windows 10側にX-Windowsサーバーを導入

多くのLinuxではX Window Systemを利用してGUIソフトウェアのディスプレイ出力を行います.X Window SystemとはUnix系OSで開発され利用されているクライアント・サーバ型のウィンドウ型GUIシステムのことです.
つまりはディスプレイへの入出力はX server,クライアントソフトウェアの実行はX Clientと分離したGUIシステムを採用しています.
上記を踏まえた上でWSL2上のアプリケーションからWindows上でGUIを描画するときは以下の流れになります.

1. X ClientであるWSL2上のUbuntuから描画データをX-serverに送信
2. Windows10上で動くX-serverである(例えばVcXserv)がデータを受信してGUI画面を描画

これらの具体的な設定方法を紹介していきましょう.

Windows10上にVcXservのインストール

Windows上で動くXサーバーは主に2つあります.一つはVcXsrv(無料)ともう一つはx410(Windowsストアで有料)です.VcXsrv(無料)とx410(Windows Storeで有料)の2つのWindows Xサーバーを海外のブロガーがテストしていましたが,特に性能面で大きな違いはないようでした.x410のほうがVcXsrvよりも安定しているようですが,私が使っている限りはVcXsrvでも十分実用的です.x410のウェブサイトには,WSL2 GUIアプリの始め方についての詳細なガイドがあるので,もし興味があってそちらを選択したい場合は公式ガイドをチェックしてみてください.ここでは、VcXsrvに焦点を当てます.
VcXsrvをダウンロード,インストールします.公式のダウンロードページは以下のリンクです.

https://sourceforge.net/projects/vcxsrv/

VcXsrvを起動

インストールが完了したら,デスクトップのXLaunchアイコンから起動してください.もしデスクトップアイコンを設定しなかった場合は,Windowsボタンを押して"xlaunch"と検索しXLaunchアプリを起動します.

画像1

起動オプションでMultiple Windowsを選択し”Next”ボタンを押してください.

画像2

Client Setupでは”Start no client”にチェックを入れて”Next”ボタンを押します.

画像3

Extra settingsでは,全部にチェックを入れてください.もしDisable Access Controlが見当たらない場合は,Additional Parametersに-acを追加してください.

画像4

他の追加オプションを見たい場合は以下のリンクから確認できます.

WSL2側の設定(DISPLAY環境変数を設定)

X ClientであるUbuntuがWin10上で動くX-Serverを知るために環境変数の設定が必要になります.最初の起動時に以下のコマンドを実行してみてください.

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
export LIBGL_ALWAYS_INDIRECT=1
sudo /etc/init.d/dbus start &> /dev/null

最初のコマンドでDISPLAY=x.x.x.x:0.0となります.x.x.x.xはUbuntuのIPアドレスです.WSL2では起動のたびにIPアドレスが変更されるので上記の設定を追加することでIPアドレスの変更に対応しています.ちなみにWindows10のバージョンによっては127.0.0.1:0.0(localhost)でもGUIを起動することができました.しかし現在はこの方法は使えなくなっています.
Ubuntuを開くたびにこれらのコマンドを入力したくない場合は,これらのコマンドをコピーしてホームディレクトリの .bash_profile* ファイルの末尾に貼り付ける必要があります.nanoやvimエディターを使ってファイルを開くことができます(代わりにgeditもあります).

Ubuntu上でプログラムを実行

設定が完了すればあとは好きなGUIプログラムをインストールして実行するだけです.
試しに, geditをインストールして実行してみましょう.

sudo apt intall gedit
gedit

もしエラーが出て起動できない場合は大概Windows Defenderのファイヤーウォールの設定の問題です.WSLからローカルのVcXsrvに接続するときはパブリックネットワークに対するファイアウォールを許可しなければならないというのが理由です.
上記の解決策はいくつか存在していますが,一番簡単なのはVcXsrvに対してパブリックネットワークのアクセスを許可してしまうことです.これだとセキュリティーが気になるという場合は以下のgithubリンクでアクセスコントロールする方法などが議論されています.

https://github.com/microsoft/WSL/issues/4139


Visual Studio Codeのインストール

最新版のVisual Studio CodeをWindows側でインストールします.
https://code.visualstudio.com/

Remote - WSL extensionを使用するとWindows Subsystem for Linux (WSL) 内で Visual Studio Code を実行することができます.Visual Studio Codeを起動してエクステンションの中から以下のパッケージを探してインストールします.

画像5

上記の処理はpower shell上からも以下のコマンドを実行することで可能です.
code --install-extension ms-vscode-remote.vscode-remote-extensionpack

Python用のエクステンションをインストールしておきます.こちらもGUIから選択しても良いですし以下のコマンドを実行する場合のどちらでもOKです.
code --install-extension ms-python.python

UbuntuでPython3をインストール
以下のコマンドを実行してpythonの実行環境をUbuntu側でインストールしておきます.
sudo apt install python3 python3-pip

WSL2からVSCodeを起動

WSL2のConsoleを開いたら以下のコマンドを入力してVSCodeをWSL2から起動します.
code .

起動すると自動的にWSLへリモートで接続するはずです.VSCodeのWindowの左下角のステータスに以下の画像のようにWSL:Ubuntuと表示されているのを確認してください.

画像6

次にextensionをチェックします.Python用のエクステンションが以下のようにInstall in WSLと表示されていればOKです.Reloadボタンが表示されている場合はそれをクリックしてください.そうすることによって以下の画面のようになるはずです.

画像7

新規ファイルの作成からexample.pyというファイルを以下のコードを入力して保存します. ​

print(“Hello World”)

あとはCtrl+F5で実行して上記のexample.pyが正しく実行されるか確認します.無事実行されれば’Hello World”とコンソール上に表示されるはずです.

まとめ

以上がWSL2へGUI環境を構築し,Visual Studio Code上でpythonでのコーディングとリモートデバッグが行える環境が整いました.
WSL2でもまだ一部のシステムコールに対応しておらず,トラブルに遭遇することも稀にありますがほとんどのアプリが動作してくれます.Githubで公開されているライブラリがWindows上ではうまくコンパイルできない時はかなり重宝するはずです.私は仕事と趣味両方でWSL2を便利に利用させてもらっています.
最近のMicrosoftはオープンソースのサポート体制が整っており好感が持てます.ネイティブでLinux GUIアプリをサポートするWSLgもWindows Insider Previewで公開されています.そちらはGPGPUによるアクセラレーションなどにも対応するようなので正式リリースがいまから楽しみにしています.

この記事が気に入ったらサポートをしてみませんか?