search
LoginSignup
112

More than 1 year has passed since last update.

posted at

updated at

WSL2におけるVcXsrvの設定

WSL2でmatplotlibをプロットしようと思ったら...

なぜか出力するディスプレイが見つからないということを言われてしまったので, いろいろと調べてみました.

(9/21/2021) 追加情報

現在、InsiderProgram上でWSLgの開発が走っているので、将来的にはVcXsrvを使わずともネイティヴにGUI環境を実行できるようになるかと思います!
参考記事: Windows 10 HomeでWSLgをさっそく試してみた

参考としたサイト

Can't use X-Server in WSL 2 #4106
こちらのサイトにほとんど解決策が載っておりますので, こちらの記事から抽出してまとめました.

VcXsrvの自動起動設定

  1. xlaunch.exeという実行ファイルがあると思いますので, 起動します.
  2. multiple window を選んで, 次へを選択します.
  3. start no client を選んで, 次へを選択します.
  4. clipboard を使用したければ, clipboardにチェックを入れます.
  5. Additional parameters for VcXsrv という入力フォームに -ac と入力して, 次へを選択します.
    図1.png

  6. Save configuration を押して, どこかアクセスしやすい場所(デスクトップとか)に保存してください.

  7. 完了を押してxlaunchを終了します.

  8. 続いて, Windowsキー + rを押して, shell:startupと入力して検索します.

  9. スタートアップというフォルダが開きますので, ここに先ほどxlaunchを用いて作成したファイルを移動してしまってください.

これで, 自動的にVcXsrvがパソコンの起動時に立ち上がるようになりました.

WSL上のディスプレイの設定

最後にVcXsrvの存在をWSLに教えてあげましょう.

  1. Windows PowerShell を開きます.
  2. ipconfigと入力します.
  3. イーサネット アダプター vEthernet (WSL)という項がありますので, その部分のIPv4 アドレス をメモしておきます. 仮にここでは aaa.bbb.ccc.ddd としておきます.
  4. WSLを開きます.
  5. vim や nano などで~/.bashrcを開きます.
  6. 開いた.bashrcの最後の行に, 以下のコマンドを追記して保存してください.
.bashrc
   export DISPLAY=aaa.bbb.ccc.ddd:0

最後にWSLを再起動すると, 先ほど編集した.bashrcが読み込まれて, 設定が反映されます.

まだ改善できていない点

WSLに割り当てられるIPアドレスは再起動を行うたびに変更してしまうそうです。今の所IPアドレスを固定する術が見当たらないため、なにか情報がありますとありがたいです。
2019年9月現在はps1ファイルを作成してIPアドレスの割当を行っております。

追記

MicrosoftのissueにIPアドレスの割当方法が解決されていましたのでご紹介します。

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

上の項で説明したexportの指示をこちらに変えていただけたらと思います。

追記2

taichi-ishitaniさまによると、次の方法で/etc/resolv.confを参照せずともIPアドレスを割り当てることができるとコメントしていただきました。情報提供のほど感謝いたします。

~/.bashrc
export DISPLAY=`hostname`.mshome.net:0.0

参考記事: WSL2 での DISPLAY 設定

最後に

VcXsrv側に-ac というオプションを加えましたが, 参考サイトによりますとパブリックアクセスを許可するコマンドであるそうです. WSL2が新たなコンテナシステムを形成したことによるのかと思われます。

以前の記事

WSLでmatplotlibやgnuplotでプロットができない

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
What you can do with signing up
112