WSL2をインストールしてWindowsでUbuntuを使う方法

Linux

WindowsでLinuxを使いたいけど、仮想環境を立てるのはめんどくさい。WindowsからDockerが使いたい。諸事情でWindowsしか使わせてもらえないけど、どうしてもLinuxが使いたい。そんな方にWSL2がオススメです。WSL2を使えばWindowsからUbuntu等のLinuxディストリビューションを利用することができます。

WSLとは

WSLとはWindows Subsystem for Linuxの略でWindows10からLinuxを利用するためのソフトウェアです。Windowsはこれまでcmd.exeで提供するコマンドプロンプトやPowerShellなどでCLIを提供しようと試みていましたが、ついにLinuxそのものをWindowsで起動できるようにしました。

WSLは仮想環境とは違い、Linuxカーネルをロードするのではなく、Windowsプロセス上で動くサブシステムとして起動されます。このことで仮想環境を立ち上げる際に問題となっていたメモリやCPUなどのリソースの消費が軽減されます。

WSLの仕組みは便利だったのですが、Linuxコマンドを変換するLXCoreの動作が不安定なために、dockerなどのカーネルを共有するようなアプリケーションは上手く動作しませんでした。

そこでWSL2ではLinuxディストリビューションを搭載することでこの問題が解決されました。WSL2ではOSの差異をほぼ意識することなくLinuxコマンドを利用できるようになります。またWSL2になったことで実行速度もWSLから改善されています。これからWSLを利用するなら、WSL2がオススメです。

WSL2のインストール

WSL2をインストールする流れは以下の通りです。

  1. Windows Insider Programに参加する
  2. WSLを有効にする
  3. Windows StoreからWSLをインストールする
  4. WSLをWSL2に変換する

もしWSL2ではなく、WSLを利用したい場合は2,3のみを実行してください。

Windows Insider Programに参加する

WSL2はまだ一般向けのアップデートに含まれていないので利用するにはWindows Insider Programに登録する必要があります。

設定→更新とセキュリティ→Windows Insider Programから「開始する」を選択してください。

ダイアログが表示されるので「登録」を選択します。

「登録」を選択します。

初めての場合は「新規登録」を選択します。

「新規登録」を選択します。

同意にチェックを入れて送信を選択します。

同意にチェックを入れて送信を選択します。

Windows Insider Programに参加するアカウントを追加します。

アカウントを追加します。

参加するInsiderはファストに設定します。

参加するInsiderはファストに設定します。

再起動します。

再起動します。

再起動が終了すれば無事、Insider Programに参加した状態になります。再起動終了後に、Windows Updateから更新プログラムをダウンロードしてください。

Windows Updateから更新プログラムをダウンロードしてください。

更新が完了したら、次はオプションの更新プログラムをインストールしてください。

オプションの更新プログラムをインストールしてください。

スタートメニューから「winver」を実行して、OSビルドが18917以降になっていればWSL2を利用できます。

「winver」を実行して、OSビルド番号を確認する

WSLを有効にする

WSLを利用するにはWSLを有効にする必要があります。まずはPowerShellを管理者として実行します。

PowerShellを管理者として実行

以下のコマンドを実行します。実行後、再起動の必要があるばあいはYを入力して再起動します。

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Windows StoreからWSLをインストールする

WSLをインストールしたことが無ければWindows StoreからWSLをインストールします。

ここではUbuntuを選択します。

WSLをWSL2に変換する

この状態で利用できるのはまだWSLです。PowerShellから利用するWSLをWSL2にする必要があります。まずはPowerShellを開いて下記コマンドでWSLのバージョンを確認してください。

wsl -l -v
    NAME      STATE           VERSION
* Ubuntu    Stopped         1

何も設定をしていなければ、上のようにVERSIONが1となっています。ここで下記コマンドを実行してWSLのバージョンを2にします。

wsl --set-version Ubuntu 2

上のコマンドの実行が確認できたら、下記コマンドを実行して、VERSIONが2になっていることを確認してください。

wsl -l -v
    NAME      STATE           VERSION
* Ubuntu    Stopped         2

下記コマンドでデフォルトのWSLバージョンを2に設定します。

wsl --set-default-version 2

ここまでの設定が上手くいっていれば、スタートメニューからUbuntuを起動できます。初回起動時はユーザー名とパスワードを設定する必要があります。あとは通常通りUbuntuとして使用できます。

試しにneofetchしてみました。

sudo apt install neofetch
neofetch
neofetch

WSL2の設定

特別、設定しなければならないことはありませんが、やっておくと便利に使える設定があるのでご紹介します。

WSL2でのsshの設定

WSL2でsshを使うには以下の手順を行います。

  1. WSL側でsshの設定
  2. Windows側でFirewallの設定
  3. Windows側でポートフォワーディングの設定

WSL側でsshの設定

まずはWSL側でopenssh-serverをインストールしてsshを使えるようにします。

sudo apt install openssh-server

次に/etc/ssh/sshd_config/のPasswordAuthenticationをyesに変更します。

sudo vi /etc/ssh/sshd_config

次のコマンドでssh-keyを作成します。

sudo ssh-keygen -A

最後に下記コマンドでsshをスタートさせます。

sudo service ssh start

statusで正常に起動されているか確認できます。

sudo service ssh status

正常に起動していればsshd is runningと表示されます。

Windows側でFirewallの設定

スタートメニューに「Windows Firewall」と入力して、「ファイアウォールとネットワーク保護」を起動します。

Windows Firewallを起動する

「詳細設定」を押して設定画面を開きます。

詳細設定を開く

左側の「受信の規則」をクリックして、右側の「新しい規則」をクリックします。これで「新規の受信の規則ウィザード」が表示されます。

新規の受信の規則ウィザードを開く

規則の種類を「ポート」に設定します。

規則の種類を「ポート」に設定する

プロトコルおよびポートでプロトコルを「TCP」、ポートを「特定のローカルポート」の22に設定します。

プロトコルおよびポートでプロトコルを「TCP」、ポートを「特定のローカルポート」の22に設定します。

操作で「接続を許可する」を設定します。

操作で「接続を許可する」を設定します。

プロファイルでは自分が接続する際に利用するネットワークを選択します。ここでは「プライベート」のみを選択しました。利用するネットワークに応じて変更してください。

プロファイルを設定する

名前を設定したら、「完了」を押して設定を終了します。

WSL1の場合はこの設定だけで他のホストから接続することができます。WSL2ではWindows上にLinuxカーネルが乗っているため、IPアドレス自体が双方で異なります。次のポートフォワーディングの設定でWindowsに送られた情報をWSL2に流します。

Windows側でポートフォワーディングの設定

ポートフォワーディングするためにWSL側のIPアドレスを特定しておきます。WSLで次のコマンドを実行して、IPアドレスを確認してください。

ifconfig | grep 'inet ' | awk '{print $2}'

次にWindows側で管理者権限でPowershellを起動し、下記コマンドでポートフォワーディングの設定を行います。connectaddrにWSL側のIPアドレスを入力してください。

netsh interface portproxy add v4tov4 listenport=22 connectaddr=xxx.xx.xxx.xxx connectport=22

正常に設定されたかどうか下記コマンドで確認します。

netsh interface portproxy show v4tov4

上手くいっていれば、次のように表示されます。

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               22          xxx.xx.xxx.xxx   22

以上でsshの設定は終了です。実際にssh接続するにはWindows側のIPアドレスに対して、sshを行います。WSL2側のIPアドレスではないので注意してください。

ssh yyy.yy.yyy.yyy

あとは通常通り、ユーザー名とパスワードを入力してログインできます。

クリップボードの設定

WSLではclip.exeを使うことでWindowsのクリップボードにコピーができるのですが、このclip.exeがコピーする際に勝手に改行を入れてしまうため、非常に使いづらいです。そこでwin32yank.exeを使うことをオススメします。

まずhttps://github.com/equalsraf/win32yank/releasesからwin32yank.exeをダウンロードします。

ダウンロードしたzipファイルを解凍し、WSLの~/.local/bin/に置きます。これでコマンドでコピーと貼り付けができます。

# コピー
echo "hoge" | win32yank.exe -i
# 貼り付け
win32yank.exe -o

NeoVim向けには次のように設定するのがオススメです。

" WSL用のクリップボード設定
if system('uname -a | grep microsoft') != ""
  let g:clipboard = {
        \   'name': 'wslClipboard',
        \   'copy': {
        \      '+': 'win32yank.exe -i',
        \      '*': 'win32yank.exe -i',
        \    },
        \   'paste': {
        \      '+': 'win32yank.exe -o',
        \      '*': 'win32yank.exe -o',
        \   },
        \   'cache_enabled': 1,
        \ }
endif

tmuxでは次のようにします。

if-shell 'test "$(uname -a | grep microsoft)" != ""'  bind-key -t vi-copy Enter copy-pipe "cat | win32yank.exe -i"

WSL オススメ Terminal

WSLのデフォルトの端末はtmuxやVimなどの表示が崩れてしまいます。

WSLではtmuxのステータスラインが崩れる

そこでWSL向けのTerminalであるwslttyの使用をお勧めします。wslttyならtmuxやVimの表示が崩れることなく、快適に使用できます。

wslttyではtmuxを正常表示できる

こちらのリンクから”wsltty-x.x.x-install.exe”をダウンロードして、インストールすればwslttyを使用できます。

Releases · mintty/wsltty
Mintty as a terminal for Bash on Ubuntu on Windows / WSL - mintty/wsltty

WSL よくあるエラー

WSLを利用する際によくあるエラーについてまとめました。

apt install ができない。

apt install時に“Release file is not valid yet. Updates for this repository will not be applied.”と表示されてしまい、apt installが上手くできないときの対処方です。

WSLのアンインストール

スタートメニューからUbuntuを右クリックして「アンインストール」を選択します。

参考

https://github.com/microsoft/WSL
https://docs.microsoft.com/en-us/windows/wsl/release-notes
https://docs.microsoft.com/en-us/windows/wsl/wsl2-install
https://scotch.io/bar-talk/trying-the-new-wsl-2-its-fast-windows-subsystem-for-linux
https://www.buildinsider.net/enterprise/wsl/01#whatiswsl
https://qiita.com/ezmscrap/items/30eaf9531e240c992cf1
https://qiita.com/yabeenico/items/15532c703974dc40a7f5
https://wand-ta.hatenablog.com/entry/2019/11/10/095539
https://blog.himanoa.net/entries/20/
https://github.com/equalsraf/win32yank/releases

WindowsからUbuntuを使うにはWSL2ですが、UbuntuからWindowsのアプリを実行するにはwineがオススメです。詳しくはこちら

UbuntuでWindowsアプリを使用するためのwineのインストール、設定方法を紹介

コメント

タイトルとURLをコピーしました