Help us understand the problem. What is going on with this article?

WSL2でGUIアプリを起動

WSL2では今後GUIに対応する予定なので、何も考えずともGUIアプリが起動できるようになる筈である。しかし現状ではまだ対応できていない。なのでWindowsにVcXsrvのようなXサーバをインストールして、WSL2側でDISPLAYにローカルマシンのIPアドレスを設定するやり方を紹介している記事がたくさんある。いずれの記事でもDISPLAYに設定するIPアドレスの取得方法として、cat /etc/resolv.confipコマンドでのやり方を紹介している。しかし私の環境ではこの方法ではWSL2側のIPアドレスしか取って来れず、なぜかうまく動かなかった。半ば諦めかけながら何か別の方法はないかと探していた所、簡単にできる方法を見つけたのでここに紹介しておく。
ここではVcXsrvは使わずMobaXtermと言うXサーバが付属したターミナルソフト(みたいないろいろな物が入った凄い何か)を使う。ターミナル立ち上げと同時にXサーバも自動で立ち上がり大変便利なので断然こちらをお勧めする。

1. MobaXtermをインストール

まずここからダウンロードしてインストール
https://mobaxterm.mobatek.net/download-home-edition.html

2. MobaXtermを立ち上げてWSLに接続

MobaXtermのSessionに最初からWSLのアイコンがあるのでそこをクリック。
そして以下の設定をする。
Basic WSL setting -> Run method : Localhost connection
MT.png
そしてOK。

3. Xサーバへのリモートアクセスをfullに設定

Settings->X11タブに行ってX11 remote accessの項目でfullを選択

4. GUIアプリを起動

あとは好きなGUIアプリを起動するだけ。

$ xeyes

 

以上を設定すれば次回以降はMobaXtermのWSLターミナルを起動するだけで特に何も気にする必要なくWSL2でGUIが使える。SessionsにWSLのアイコンが出来ているのでお好みで右クリックでデスクトップにショートカットを作ったり、タスクバーにピン止めしておくと良い。
VcXsrvでやるよりずっと簡単で便利なのでこのMobaXtermを使った方法を是非ともお勧めする。私はこのMobaXtermを知らなかったのだが他にもSSHでのリモートホストに接続してXサーバでGUIアプリを起動できたりMSYS2みたいWindowsのなBashターミナルがあったりその他いろいろな事ができてなんだかすごい。無料でも十分の機能が使える。


以前できた方法(DISPLAYにWindows側のIPアドレスを設定)

以下以前やっていた方法です。Windows側の設定が変わったのか、MobaXtermの設定が変わったのか、Firewallの設定が変わったのか良く分かりませんが、最新の私の環境ではこの方法ではうまくできなくなりました。MobaXtermの最新版(20.5)であれば2.のRun methodを選択すればよいので今はこの方法は使っていませんがメモとして残しておきます。

a. WSL2の.bashrcで設定

~/.bashrcに以下を書く

~/.bashrc
export DISPLAY=`hostname | xargs dig +short | grep 192.168.`:0.0

そしたらsource ~/.bashrcでこれを適用。

b. MobaXtermで設定

或いは.bashrcでは設定せずMobaXtermで設定する。
->SessionsにできたWSLアイコンを右クリック
  ->Edit session
    ->Basic WSL SettingsのAdvanced WSL Settingsにある
     Execute the following commands at startup:
に同じコマンドを書いておく。そうすると.bashrcと異なりMobaXtermで立ち上げた場合にのみDISPLAYの設定がされる。

この例ではhostnameでコンピュータ名を調べてdigでそのIPアドレスを調べている。コンピュータ名が分かっていればhostnameは使わなくて決め打ちでも良い。digではWindows側とWSL2側の両方のIPアドレスが表示されるのでWindows側のものを取ってくる。digの代わりに他にもnslookuphostコマンド或いはipconfig.exesedawkを駆使しても良いだろう。多くの記事で紹介されている/etc/resolv.confipコマンドでは私の環境ではWSL2側のIPアドレスしか調べられずうまく行かなかった。
コメントで教えてもらった情報によるとWSL2側のIPアドレスではWindowsから見てファイアウォールの外とみなされるのでファイアウォールに穴を開ける等の設定をしないといけない。殆どの記事で紹介されているやり方はその方法の様だ。それに対してWindows側のIPアドレスであればファイアウォールの設定は不要となる。


参考

Quiita - WSL2のGUI設定でつまずいたところ
Quiita - WSL2でGUIをやりたいメモ
MobaXterm を ssh/mosh/X11 クライアントとして使う(Windows)
MobaXtermを使いBash On Windowsで簡単にX11を使う
WSL2のX-ServerでGUI表示する際に「export DISPLAY=:0.0」が効かない

vega77
主にLSIハード設計/検証の人。あとC/C++も。最近は趣味でラズパイやPythonや機械学習やディープラーニングも。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away