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

WSL2の導入とGUI環境の構築とsshfsしたものもgnome-openしたい!!

2020年春の大型アップデート以降、Linuxがまともに使える(正確にはLinuxカーネルを載せる)ようになるWindows Subsystem for Linux 2が正式リリースされます。wsl2のインストール方法のほか、wslとGUIの導入方法がやや異なるので紹介していきます。

なお、本記事は2020年春のアップデート以前に、Windows Insider Programに参加し、Windows2004をインストールしてwsl2を導入できるのでそれを基に書かれたものです。ただし変わっていないので問題ないです。(一応補足しておくと、2021年の大型アップデート以降?ならpowershellで wsl --installと打つだけでインストールできるようになるはずなのでそのときには状況は変わります)

2020/6/18
Build 20150以降、 wsl -–install でwslのインストールが、 wsl --update でwsl2で使用するLinuxカーネルのアップデートができるようになりました。また、CUDAの公式サポートも始まりました。GPUが使える時代になりましたね…。
https://blogs.windows.com/windowsexperience/2020/06/17/announcing-windows-10-insider-preview-build-20150/

目次

  1. WSL2のインストール
  2. WSL2でGUIを使う
  3. gnome-openを使えるようにする
  4. WSL2にもChromeをインストールする
  5. GUIで日本語フォントを使えるようにする
  6. sshfsを使ってマウントする
  7. sshfsしたものもgnome-openできるようにする
  8. Windows側からwslのgitを使う(おまけ)

WSL2でsshfsしたものをエクスプローラーなどのWindowsのプログラムを用いて開く方法はあまり紹介されていないのでぜひご参照ください。

また、GUI関係は2021年ごろに正式に搭載され、もっと楽になりそうです。それまではがんばりましょう。

1. WSL2のインストール

参考: https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install
ここに書いてある通りです。また、wsl -–install などが使えるようになったら最初にwsl入れるというようなまどろっこしいことはしなくていいかもしれないですね。

Windows Insider Programへの参加とWindowsのバージョンアップ(~2020年春のアップデートまで)

設定->更新とセキュリティ-> Windows Insider Program から参加できます。Insiderの設定はスローでよいです。

登録ができたら、設定->更新とセキュリティ-> Windows Update からアップデートができるはずなのでします。

WSLのインストール

注: Build 20150以降であれば wsl -–installでいけます。2020/6現在、Windows Insider ProgramのFast Ringに登録している必要あり。

まず、"仮想マシン プラットフォーム" のオプション コンポーネントを有効にし、wslが有効であることを確認します。これはGUIからもできますが、PowerShellからでもできます。管理者権限が必要だったかも。

PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

終わったらコンピュータを再起動します。

Linuxディストリビューションのインストール

もしもLinuxディストリビューションを入れていなければいれます。Microsoft Storeから好きなものをいれます。その後起動し、ユーザー登録を済ませます。パスワードはsudoに必要なので忘れないようにしてください。

参考:

WSL2のインストール

wslをバージョン2にアップデートします。
起動済みのインスタンスを触りたい場合にはいったん終了してください。

ディストリビューションを設定するには

PowerShell
wsl --set-version <Distro> 2

を実行します。<Distro>はUbuntuならUbuntu、Ubuntu18.04ならそれなど。
このときにLinuxカーネルを更新しろ、 https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel を見ろ、と言われるかもしれませんが、そしたらこのページの通り、 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi をダウンロードして実行すればOKです。実行して終わったら再び上記のコマンドをたたいてください。

最後に、デフォルトのwslを2にしたければ

PowerShell
wsl --set-default-version 2

を叩いて終わりです。

2. WSL2でGUIを使う

以降はUbuntu 18.04を想定します(MS StoreでいれるものはUbuntu18.04か20のリリース前ならUbuntuでもOK)。

いろいろなページに書いてありますが、VcXsrvをダウンロードして使えばよいです。また、これまたいろいろなページに書いてありますがwslと異なって、VcXsrvを立ち上げるときにコマンドラインオプションをつけてやる必要、ファイアウォールに気を付ける必要、export DISPLAY の書き方に気を付ける必要があります。

参考

Ubuntu側でのGUIの導入

 sudo apt install libgl1-mesa-dev xorg-dev

これで最低限はできるはずです。いろいろなGUI環境があると思うので自由に選んで下さい。

Windows側の設定

X Serverの導入

https://sourceforge.net/projects/vcxsrv/ からVcXsrvをダウンロードします。チェックはそのままでよいのでインストールします。

X Serverの起動

VcXsrvをダウンロードして起動します。基本的にはそのままで大丈夫ですが、"Additional parameters for VcXsrv"に -ac を記述する必要があります。

(参考: その他の設定)

  • Select display settings: Multiple Display
  • Select how to start clients: Start no client
  • Extra settings: デフォ+最後の欄に -ac を追加。

ただし、自身の環境ではOpenGLのバージョンが1.4であり、これより新しいバージョンが必要な場合にはNative openglというような設定のチェックを外し、Disable access controlにチェック、さらに

~/.bashrc
unset LIBGL_ALWAYS_INDIRECT

などしてLIBGL_ALWAYS_INDIRECT変数を消す必要があります。

参考: https://superuser.com/questions/1487555/how-to-troubleshoot-opengl-on-ubuntu-under-windows-10-wsl

ファイアウォールの設定

VcXsrvの初回起動時にファイアウォールを聞かれたら解除しておきましょう。し損ねたら「セキュリティで強化されたWindows Defender ファイアウォール」から「Windows Defender ファイアウォールのプロパティ->パブリック プロファイル->保護されているネットワーク接続: カスタマイズ」からWSLを外します。

~/.bashrcの設定

~/.bashrcでDISPLAY変数の設定をしないといけないのはwslと同様ですが、バグによりlocalhostではだめで、WSLのIPアドレスを入れてやる必要があります。export DISPLAY=:0というwslの書き方はだめです。

$ export DISPLAY=:0
$ GUI apps command
Error: Can't open display: :0

たぶんこうなります。

自力で頑張るのであれば、PowerShellから ipconfigイーサネット アダプター vEthernet (WSL):を探し、そのIPv4アドレス(aaa.bbb.ccc.dddとおきます)をコピーし、

export DISPLAY=aaa.bbb.ccc.ddd:0.0

すればOKです。ここで、0.0はDisplay番号ですが、VcXsrvのアイコンにカーソルをかざしたときに(hoge):0.0などとあるこの番号に対応させます。まれに1.0などということもあるかと思いますが、そのときは1.0にします。

また、この番号はwslのインスタンスを再起動するたびに代わってしまうので、

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

~/.bashrcに記述する方法が提案されています。

検証

これで動くはずです。有名なテストなら、

sudo apt install x11-apps

をして

xeyes

が動けばOKです。

ここまでくれば

$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo apt update
$ sudo apt install google-chrome-stable

でChromeを入れれば

$ google-chrome

でChromeも開けます。お疲れ様でした。

GUIのポイント

  1. UbuntuにGUI環境を入れる
  2. VcXsrvを入れる
  3. VcXsrvの起動時に-acオプションを忘れない
  4. ファイアウォールの設定は大丈夫か気にする
  5. export DISPLAY=:0というwslの書き方はだめ。ipアドレスを指定した書き方にする。
  6. もしもOpenGLのバージョンが合わないならVcXsrvの起動時の設定でnative openglというような設定のチェックを外し、Disable access controlにチェック、さらにunset LIBGL_ALWAYS_INDIRECTなどしLIBGL_ALWAYS_INDIRECT変数を削除する。

OpenGL のバージョンについて

デフォルトのOpenGLはバージョンがとても古いです。これが原因で開けない場合の解決方法も紹介しています。
WSL(2)上でMuJoCoを動かす(GUIも)
こちらも併せてご覧ください。

3. WSL2にもChromeをインストールする

なにかと便利なので。やることは公開鍵の登録とリポジトリの追加、そして apt installです。

sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> 
/etc/apt/sources.list.d/google-chrome.list'
sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo apt update
sudo apt install google-chrome-stable

参考: https://qiita.com/develop/items/350f5487b4825d716d9d

おまけ: アップデート方法

sudo apt update
sudo apt --only-upgrade install google-chrome-stable

4. GUIで日本語フォントを使えるようにする

WSL2でGUIを使うの状態ではChromeを導入しても日本語が表示されません。これはデフォルトでは日本語フォントが入っていないためです。これを解決するには主に2つの方法があります。

  1. 日本語フォントをダウンロードする
  2. Windows側のフォントを利用する

ここではWindows側のフォントを利用する方法を記載します。やりかたは簡単で、Windows側のフォントからシンボリックリンクをはっているだけです。

sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows
sudo fc-cache -fv

参考: https://nakomii.hatenablog.com/entry/wsl_ubuntu

5. gnome-openを使えるようにする

Windows Subsystem for Linux 2 ではWindows側からLinux側のファイルを \\wsl$\(ディストリビューション名) でアクセスできますし、デフォルトではLinux側からWindows側も /mnt/c などでアクセスできます。

これと PowerShell の機能であって拡張子に紐づけられたアプリ・ソフトを実行する Invoke-Item を利用して Ubuntu の gnome-open と同じことをします。

書き方

これを ~/.bashrc に書きました。

~/.bashrc
alias gnome-open="powershell.exe Invoke-Item"

powershell.exe にはデフォルトではパスがwsl上で通っていると思います。powershell.exeの引数にコマンドを書けばそれが実行できるのでこう書けます。
ただしこれだけだとwslでマウントしたものは開けない可能性があります。例えばsshfsでrootユーザー以外でマウントするとallow_userができないからです。これはwslのユーザーとwindows側のユーザーが異なるからです。解決策は下記参照ください。

6. sshfsを使ってマウントする

sshfs導入

2019年末に、wsl2でsshfsが使えるようになったようです。

sudo apt install sshfs

してやればsshfsできます!

これで端末からはアクセスできますが、Windows標準のエクスプローラー (explorer.exe) を用いて表示することはできません(アクセス許可がないと怒られます)。

7. sshfsしたものもgnome-openできるようにする

そこで、 /etc/fuse.conf を書き換え、管理者以外がallow_otherオプションを用いて自分以外のユーザーからのアクセスを許可するようにします。

GitHubのissue: https://github.com/Microsoft/WSL/issues/4172

デフォルトでは次のようになっています。

/etc/fuse.conf
# /etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE)

# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
#mount_max = 1000

# Allow non-root users to specify the allow_other or allow_root mount options.
#user_allow_other

この部分のうち、 user_allow_other のコメントアウトを外します。

/etc/fuse.conf
# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other

やっていることは管理者以外がマウントさせたときに他のユーザーからのアクセスを許容することです。

さらに、sshfsする際に allow_other オプションを追加します。

sshfs -o allow_user test@test:/target /path/to/mount

これでエクスプローラーで開けるようになりました。

8. Windows側からwslのgitを使う(おまけ)

Windows10からWSL 2のgitを使う

別の記事を書いています。けっこうややこしくてStack Overflowでも議論されがちです。よければご覧ください。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした