17
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WSL2,WSLgを使ったWindows上の開発環境構築2022版

Last updated at Posted at 2022-01-10

2022-12-27 現在では、Microsoft Storeからダウンロード・インストールするWSLが何も考えずにWSL2、WSLgがインストールされます。以下の記事は古すぎるため実施すべきではないです。

(あちこちから情報を持ってきたので、不足と重複があるかもしれないので、徐々にブラッシュアップします。)

Windows上でサーバーサイド開発の環境を整える手法

まずサーバーサイド開発環境とはLinuxサーバでの動作と同じものを作るというのが大前提。さらにシェアの多さで言えばUbuntuかCentOS(うちではデスクトップアプリをサーバーサイドで動かすことも多いのでUbuntuを標準にしてる)

WindowsマシンでUbuntuを使うには以下の複数の選択肢がある

  • Windowsをぶっこ抜いてUbuntuをクリーンインストール
    • 実はこれでも十分。一番シンプル。MS-Officeが使えない、ゲームができないという以外に不便はない。
  • WindowsとデュアルブートでUbuntuを入れる
    • 買ったばかりのPCでキーボードが反応しないとかの初期不良を追求するにはプリインストールのOSは残しておいた方がいい。起動しなおせばWindowsだって使える。
  • Windows上にWSL1
    • 2020年では一番初心者向き
    • ただちょっと特殊なLinuxなので、Dockerが使えないなどの「今どきの開発環境にしては不便」な点が残る
    • MicrosoftがWSL2を激推ししているのでWSL1へのサポート情報がどんどん減ってる
  • Winodws11上にWSL2
    • 2022年ではおそらくこれがデファクト
    • 仮想マシン上でのLinuxなのでほぼ完全なLinux
    • ただしWSL1でできた「Windowsとのシームレスな連携」は逆になくなる
    • Windowsとのシームレスな連携がないならもうデュアルブートでいいじゃないって発想に戻る

ここではWindows11上にWSL2を入れるという前提でセットアップ方法を示す。
WSL1とWSL2の使い分けに関しては、別記事で解説する。

以下セットアップ手順

準備するもの

  • Windows11(Windows10の例がどんどん減ってるからやめたほうがいい)
  • WindowsTerminal(WSL1,WSL2,PoserShellにまたがってアクセスするにはこの一択)

ここで指すGUI込のUbuntuの再現はWSLではWSLgと呼ばれており、WSLgの前提がWindows11なのでそれを指す。
https://github.com/microsoft/wslg#pre-requisites
ここの記事ではGPUドライバを最新化するように指定されいたが、私の環境ではIntelGPUドライバは最新版であったので特に何もしていない。

以下手順

Windows-Terminalを管理者権限で起動する。

powershell
# WSLの機能をONにする
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# OSの仮想マシンの機能をONにする
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

さらにWSL2向けのカーネル更新パッケージをインストールする

さらに、WSLを最新版にupdateする

wsl --update

おさらいすると以下の4点をやってる。一気にできればいいんだけど、それぞれ目的が違うので受け入れる。

  • WSLの機能をONにする(これはWSL1のときも必要だった)
  • Windows側の仮想マシンの機能をONにする(これはWSL1のときには必要なかった)
  • Linuxカーネルを最新化する
  • WSLを最新化する

Linuxカーネルの最新化とWSLの最新化でおそらくWSL2がWSLgというやつになってるんだと思う。

次にWSL上にUbuntuを入れる。入れれるディストリビューションの一覧はこのように参照できる。

 wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

ちゃんとバージョン指定してインストールする。

 wsl --install -d Ubuntu-20.04

そして、ここで私は既にWSL1上にUbuntu18を入れているのが特殊環境。ディストリビューションごとにWSL1かWSL2かは選べる。複数のディストリビューションを入れることでWSL1とWSL2を共存させることができる。ただし2022年以降の人が無理にWSL1を入れる必要はない(事例もどんどん減っていくはず)

インストールしているWSLをみるとこんな感じ

PS C:\Users\yugoy> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         1
  Ubuntu-20.04    Running         2

とりあえず以前入ってるWSL1をデフォルトにしている。
(しばらくは機能比較のために両方を使う予定)

WSL2にインストールができると、WindowsTerminalからも接続先の選択肢加わってる(これがWindowsTerminalの超便利機能)。

image.png

Ubuntu20.04を選択してタブを開く。

GUIつきアプリが起動するかどうかをテストするには、昔ながらの方法でxeyesを使う。(これ30年以上変わらない)

まずはxeyesが含まれるパッケージをインストール

sudo apt install x11-apps

xeyesを起動

image.png

成功。そして面白いのはどこにもX-Serverが起動してないというところ。X-ServerでGUIを受けるのではなく、RPD(リモートデスクトップ)でWindowsからLinuxを覗きにいってるというのが特徴。仮想化+RDPという超昔ながらの技術ではあるものの、LinuxカーネルをいじったりGPUドライバをいじることで「仮想マシンで起動してる別OSを部分的に覗きに行く」ことに成功している。
2022-05-26 修正
wsl --sytem でログインすると westonがプロセスとして存在しました。westonのバックエンドにrdbを結びつけてるみたいです。

# pgrep -fa  wayland
664 /usr/bin/weston --backend=rdp-backend.so --xwayland --shell=rdprail-shell.so --logger-scopes=log,rdp-backend,rdprail-shell --log=/mnt/wslg/weston.log

WSL2はネットワーク通信が遅いと言われていたので、スピードテストをしてみる。

CLIで動くスピードテストをインストール

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli

起動するとPythonが入ってないとのこと

sudo apt install python
$ E: Package 'python' has no installation candidate

pythonがないのはパッケージマネージャーが古いから

sudo apt update

再度チャレンジ

sudo apt install python

これでPythonが入った。Ubuntu20でもPythonコマンドで入るのは2.7

あらためてスピードテスト

$ ./speedtest-cli
Retrieving speedtest.net configuration...
Testing from DTI (153.232.40.31)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Kobayashi Family Net (Tokyo) [0.89 km]: 9.184 ms
Testing download speed................................................................................
Download: 172.91 Mbit/s
Testing upload speed................................................................................................
Upload: 111.50 Mbit/s

十分なスピード。

あとはどうせ自分しか使わないので、デフォルトのログインユーザをrootにしちゃう。
https://devlights.hatenablog.com/entry/2021/05/29/070000#etcwslconf-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%82%8B

を参考に/etc/wsl.confを設定。

サーバーを再起動。ディストリビューション単位で再起動するには、PowerShellで以下のコマンドを実行。

wsl -t Ubuntu-20.04

ここからGUIアプリのインストール

GUIアプリといっても欲しいのはChrome。手元のUbuntuでChromeが動けばクラウドサーバーのUbuntuでGUIつきChromeの開発環境になりうる。

Google Chromeのインストール
https://postgresweb.com/install-google-chrome-ubuntu-20-04
を参考にインストール
フォントが化けてる状態 → でもこれで動くっちゃぁ動く

https://qiita.com/SoraKumo/items/f83548efde26788a1fc7
を参考に
vi /etc/fonts/local.conf
でフォントを設定しWSL2を再起動すれば日本語もレンダリングされる。

Ubuntu上でIMを入れる方法もあるようだけど、2022-01-06 時点のWSLgでは、Windows上でコピーした日本語をUbuntu上のアプリにペーストすることもできたので一旦は不要。

フォントはガビガビしているが、Ubuntu上のChromeで動画も見れるし音声もステレオでしっかり再生される。テスト環境としては100点。ただし普段使いのChromeややディタまでWSLg上のアプリで使えるかというとそこまでのUIにはなってないしやる必要がない。

とりあえず、GUIつきのChromeが入ったことで、Seleniumで起動されるChromeやChromeDriverがUbuntuで完結するようになった。普段使いのChromeのバージョンアップなどに影響されないので便利とも言えるし、普段使いのChromeが自動化できないという点はWSL1からのマイナスとも言える。

17
18
2

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
  3. You can use dark theme
What you can do with signing up
17
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?