WSL2 / Windows Terminal / Windows 10 で Ubuntu 環境を構築する
Windows で CUI の Ubuntu 環境を構築するのによいという WSL2 で Linux 環境を作ってみました。VMPlayer や VirtualBox のように Windows 上で VM として Linux が動く形ですが、Linux カーネルが完全に動く(らしい)わりにめっちゃ軽いのが特徴です。私の環境だと 5 秒くらいで Ubuntu が起動してくれるます。早い。Windows で作業をしている時に、使いたいタイミングで追加で Linux 動かせるのがいいですね。
WSL2 で起動した Linux 内の GUI アプリを Windows 上のウインドウアプリケーションとして動かす(VirtualBox のシームレスモード)こともできますが、今回は WSL2 の CUI ターミナルだけ使っています。
また、WSL2 で起動した Ubuntu の CUI ターミナル(と WSL を起動するのに利用する PowerShell)をよりリッチに使うために、Windows Terminal もインストールしました。
Windows Terminal を使うとこんな風に WSL2 のターミナルや PowerShell、Git Bash(使うには自分で追加設定が必要)などをまとめて 1 つのターミナルから触れるようになります。
Windows Terminal のインストール
Windows Terminal は Windows のコマンド プロンプト、PowerShell、WSL ターミナル、はては Git Bash などのターミナルの GUI をリッチに使わせてくれるアプリケーションです。WSL のデフォルトのターミナルもクオリティはコマンドプロンプト同様に微妙な感じなので、入れておくと幸せになれると思います。
ただ変わるのはユーザーインターフェースだけで、中で動いてるのは PowerShell そのままだったりするので、使えるコマンドが統一されるとかではありません。
Microsoft App Store から
Windows Terminal
をインストールできます。WSL は PowerShell から起動するのですが、Windows Terminal はデフォルトで PowerShell を動かしてくれるので、WSL を使う分にはインストールするだけでよいです。
捕捉: Windows Terminal で gnome terminal ライクなコピーをする
Windows Terminal はデフォルトでは、テキストを選択して右クリックするとコピー、再度右クリックするとペーストができます。これを Linux ライクにテキスト選択だけでコピーできるようにするには、Windows Terminal の
設定
> 操作
から 選択範囲をクリップボードに自動でコピーする
をオンする必要があります。※マウスのミドルボタンでペーストする方法はまだわかっていません。
WSL のインストール
Windows Terminal(PowerShell)を起動し、以下を実行します。> wsl --install
デフォルトでインストールされるのは Ubuntu で、他のディストリビューションを選択することもできます。
インストールにはしばらく時間がかかり、途中 Windows の再起動も求められます。
Windows 再起動後は 自動で Ubuntu のターミナルが表示され、インストールが続行されます。
Ubuntu は既にインストールされています。 Ubuntu を起動しています... Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username:最後に Ubuntu のアカウントの作成が行われるので、ユーザー名とパスワードを入力します。
初回はこれで Windows Terminal が Ubuntu にログインした状態になり、そのまま使えるようになります。
WSL2 の Ubuntu は Windows Terminal(PowerShell)から
wsl
コマンドを実行することでも起動できます。> wsl新しく Windows を起動した後などはこれで Ubuntu を起動できるのですが、Ubuntu の起動時間もなかなか早いです。
Windows ショートカットから WSL を起動する
Windows Terminal である wt コマンドをショートカットとして登録すると、Windows ショートカットも作成できます。マウスで WSL の Ubuntu ターミナルが起動するようになるので便利です。Windows のエクスプローラーで右クリックから
新規作成
> ショートカット
でウィザードを実行し、項目の場所として wt wsl --cd ~
を指定します。Windows Terminal で wsl コマンドを実行するもので、かつ実行時にホームディレクトリをカレントディレクトリとして指定する wsl の
--cd
オプションを指定しています。続いてのショートカットの名前の入力値は任意です。(わかりやすい名前で Ubuntu とか入れておけば良さそう)
あとはショートカットをダブルクリックなどで実行すると、Ubuntu にログインした状態の Windows Terminal が起動します。
私は Windows のスタートにアプリケーションを置いておきたい派なので、このショートカットをスタートにピン留めしてます。
WSL のバージョン確認
インストールした wsl のバージョンは--version
オプションで確認できます。> wsl --version WSL バージョン: 2.3.26.0 カーネル バージョン: 5.15.167.4-1 WSLg バージョン: 1.0.65 MSRDC バージョン: 1.2.5620 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26100.1-240331-1435.ge-release Windows バージョン: 10.0.19045.5073普通にインストールすれば WSL バージョンは 2 系になっていると思います。
WSL2 の設定ファイル
WSL2 の設定ファイルは以下の 2 種類があり、WSL2 で動かす Ubuntu 等のディストリビューション毎に設定を行うのか、構築したすべてのディストリビューションに対してグローバルに設定するのかで設定ファイルがわかれています。設定ファイルの内容を変更したあとは、設定値を有効にするために、Windows Terminal(PowerShell)から
wsl --shutdown
コマンドを実行して一度シャットダウンしてください。.wslconfig ファイル
すべてのゲストのディストリビューションに対してグローバルに設定を行える設定ファイルです。ホスト Windows の %UserProfile% ディレクトリに格納されます。おそらくデフォルトでは存在しないので必要な場合に作りましょう。
設定後は
wsl --shutdown
の実行後に Ubuntu を再起動してください。/etc/wsl.conf ファイル
ゲストのディストリビューション毎に、それ自身の設定を行える設定ファイルです。ゲストのファイルシステム内部に置くもので、Ubuntu の場合、パスは
/etc/wsl.conf
です。ホスト Windows とのファイルシステムの共有
WSL2 で構築されたゲストでは、デフォルトでホスト Windows 側のファイルシステム(ドライブ)がすべて、ゲスト Ubuntu 側の/mnt
配下にマウントされています。例えばホスト Windows 側の C ドライブはゲスト Ubuntu 側の
/mnt/c
からアクセスすることができます。逆にホスト Windows 側のすべてのドライブをマウントさせたくない場合、まず
/etc/wsl.conf
で WSL2 の自動マウントを無効化し、次に Ubuntu の fstab でマウントさせたいドライブのみをマウントするよう設定します。WSL2 の設定ファイル
/etc/wsl.conf
で以下のように設定します。[automount] enabled = false mountFsTab = true
Ubuntu の fstab は、
/etc/fstab
で以下のように C ドライブのみマウントするようにします。C: /mnt/c drvfs defaults 0 0
Ubuntu を再起動すると設定が反映されます。
ホスト Windows 側とのファイル共有はとても便利なのですが、共有されるファイルの所有者やアクセス権の設定などの面から、個人的には共有するファイルシステムは限定させたほうがいいのでは、と思います。
ゲスト Ubuntu のネットワークアクセスが遅い現象
ゲスト Ubuntu からの apt-get 等のネットワークアクセスがものすごく遅いのですが、これはネットワークの名前解決に起因しているようで、パブリック DNS サーバーを利用するようにすると改善しました。まず Ubuntu の
/etc/wsl.conf
の network セクションで generateResolvConf を false に設定します。[network] generateResolvConf = false
続いて
/etc/resolv.conf
に Google のパブリック DNS サーバーを設定したいのですが、この resolve.conf が自動生成されるファイルのシンボリックリンクになっていて、このまま編集しても再起動時に戻されてしまいます。# ll /etc/resolv.conf lrwxrwxrwx 1 root root 39 Nov 9 11:03 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
なのでシンボリックリンクを一度削除してからパブリック DNS サーバーを書いた
/etc/resolv.conf
を改めて作成します。# rm /etc/resolv.conf # echo "nameserver 8.8.8.8" > /etc/resolv.conf # sudo chattr +i /etc/resolv.conf
Ubuntu を再起動すると設定が反映されます。
Windows11 ではネットワークでミラーモードを使える
Windows 11 22H2 以降を実行しているマシンではネットワークをミラーモードにすることで、ネットワーク絡みのいろいろな恩恵が受けられるらしいです。(うちは Windows 10 なので試してません)こちらは
.wslconfig
で設定します。[wsl2] networkingMode=mirrored
ホスト名を変更する
Ubuntu のホスト名を変更したい場合は/etc/wsl.conf
の hostname 値として設定できます。[network] hostname = ubunchu
ホスト Windows からゲスト Ubuntu に http アクセスする
ホスト Windows からはゲスト Ubuntu の IP アドレスに対してアクセスできるようになっています。例えば Apache なら、ゲスト Ubuntu 上で apache2 をインストールし、
# apt-get install apache2ゲスト Ubuntu の IP アドレスを調べれば、その IP に対して http アクセスできるようになります。
$ ip addr show eth0 した時の IP アドレスで、Windows 側からアクセスできるapache の構築や IP の確認などは、Ubuntu 一般の話がそのまま通用する形です。
Linux コメント (0) 2024/11/13 12:02:23