WSL2 に ArchLinux を入れる

こんにちは、masm11 です。

私は Linux といえば ArchLinux を使っています。 デスクトップも家庭内サーバも、VPS にも。

次はどこにしましょう。Windows 内にしましょうか。WSL2 ですね!

というわけで、今回は WSL2 に ArchLinux を入れ、 pgtk emacs で綺麗なフォントを表示するところまでをお送りします。

前提

WSL2 は ArchLinux に対応していません。ですが、使えないわけではありません。

今回、インストール済みの Ubuntu を使います。そこまでは他に記事がたくさんありますので、 それらを参考にしてください。この記事では、そこまでは終わっていることを前提とします。

ではやっていきましょう

Windows で以下のファイルをダウンロードします。

ダウンロードしたら、これらのファイルを C:\Users\masm\ に移動しておきます。

wsl
cd
cp /mnt/c/Users/masm/archlinux-bootstrap-2023.09.01-x86_64.tar.gz* .

↑WSL2 を起動し、ホームに先程ダウンロードしたファイルをコピーしています。

gpg --recv-keys 3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C
gpg --verify archlinux-bootstrap-2023.09.01-x86_64.tar.gz.sig

↑PGP キーを取得し、ダウンロードしたファイルをチェックしています。

gpg: assuming signed data in 'archlinux-bootstrap-2023.09.01-x86_64.tar.gz'
gpg: Signature made Fri Sep  1 19:48:55 2023 JST
gpg:                using EDDSA key 3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C
gpg:                issuer "pierre@archlinux.org"
gpg: Good signature from "Pierre Schmitz <pierre@archlinux.org>" [unknown]
gpg:                 aka "Pierre Schmitz <pierre@archlinux.de>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3E80 CA1A 8B89 F69C BA57  D98A 76A5 EF90 5444 9A5C

↑Good signature などと出力されていれば大丈夫でしょう。

sudo tar zxpf archlinux-bootstrap-2023.09.01-x86_64.tar.gz

↑WSL2 の中に展開します。

cd root.x86_64/
sudo vi etc/pacman.d/mirrorlist

ディレクトリを移動し、pacman の mirrorlist を編集します。

sudo tar zcpf ../root.tar.gz *

↑root.tar.gz というファイルに固め直しています。

mirrorlist の編集は"ついで"です。アーカイブ内の構造を直すのが主目的です。

mv ../root.tar.gz /mnt/c/Users/masm/
exit

↑できあがったアーカイブを C:\Users\masm\ に移動しています。

mkdir c:\wsl
mkdir c:\wsl\arch
wsl --import ArchLinux c:\wsl\arch c:\Users\masm\root.tar.gz

↑これは PowerShell で実行します。C:\wsl\arch を作り、 先程作ったアーカイブをインポートしています。 C:\wsl\arch\ には .vhdx というストレージファイルが作成されます。

wsl --set-default ArchLinux

↑ここまでで、Ubuntu に加えて ArchLinux ができていますので、 デフォルトを ArchLinux に変更しています。

PS C:\Users\masm> wsl -l -v
  NAME            STATE           VERSION
* ArchLinux       Stopped         2
  Ubuntu-22.04    Stopped         2

↑ここまでの結果です。

wsl

で起動します。ここから ArchLinux の初期化をしていきます。

pacman-key --init
pacman-key --populate archlinux
pacman -Syyu
pacman -S base base-devel

↑pacman 用の鍵を初期化し、リポジトリ情報を更新し、諸々をアップデート、インストールしています。 zsh, vim 等、欲しいものがあればインストールしてしまいましょう。 必要になった時にインストールしても良いです。

passwd
useradd masm
passwd masm

↑ユーザを作成し、パスワードを設定します。root のパスワードも設定しています。

ln -s vim /usr/bin/vi

↑私はかなり古い人間なので、"vim" と入力しません。"vi" と入力する癖が付いています。 ストレスを軽減するため、いつもこの symbolic link を作成しています。

echo '%wheel ALL=(ALL:ALL) ALL' > /etc/sudoers.d/wheel

↑sudo の設定です。

vi /etc/wsl.conf
[user]
default=masm

↑WSL2 の設定です。デフォルトのユーザを masm に変更します。 PowerShell で wsl コマンドを実行した時に、このユーザになります。

いったん仮想マシン(?) を再起動しておきましょう。

exit

↑で shell を抜け、

wsl --shutdown

↑で仮想マシンを落とします。

wsl

↑で起動してログインします。

Emacs をインストール

sudo pacman -S emacs-wayland

↑いよいよ emacs をインストールします。 ArchLinux では pgtk emacs は emacs-wayland という名前のパッケージになっています。

ここで初めて大量のダウンロードをしたわけですが、 どうもネットワークが遅いです・・・ "wsl slow net" 等でぐぐると、いろいろ情報が出てきます。 既知の問題のようで、いろいろ試してみると良いでしょう。

sudo pacman -S noto-fonts noto-fonts-cjk

綺麗なフォントの代表格、Noto フォントをインストールします。

sudo vi /etc/locale.gen
sudo locale-gen

忘れてました。locale を設定します。

ここで、4K 外部モニタで emacs を起動して

(set-frame-parameter nil 'font "Noto Sans Mono CJK JP 16")

とすると、いまいちフォントが綺麗でないことがわかります。 文字の輪郭がくっきりしていませんでした。

特に t が顕著じゃないですかね。(ブログ上じゃわからないかもしれません・・・)

これの修正をしていきます。

まずはディスプレイの設定です。

  • 表示領域を拡張
  • メインディスプレイにする
  • 解像度 3840x2160
  • 拡大/縮小 200%

そして WSL2 の設定です。

sudo vi /mnt/c/Users/masm/.wslgconfig

↑これは WSL2 内からファイルを作成しています。

もし Windows 側でファイルを作成する場合は、 改行コードや、暗黙的に付く余分な拡張子にご注意ください。

あとファイル名は、.wsl"g"config です。

[system-distro-env]
WESTON_RDP_DISABLE_HI_DPI_SCALING=false
WESTON_RDP_DISABLE_FRACTIONAL_HI_DPI_SCALING=false
WESTON_RDP_DEBUG_DESKTOP_SCALING_FACTOR=200

↑ファイルの中身はこんな感じです。

ややこしい話なのですが、WSL2 には WSLg というものが含まれており、 WSLg では Wayland compositor として weston を使っていて、 その weston が RDP を喋っている感じです。上記はこのへんの設定です。

wsl --shutdown
wsl

↑WSL2 を再起動しています。

emacs

↑で Emacs を起動し、*scratch* バッファで以下を実行します。 実行は、) の右で Ctrl+j ですね。

(set-frame-parameter nil 'font "Noto Sans Mono CJK JP 14")

これで、以下のように綺麗になりました!

終わりに

綺麗に表示されて良かったです!

なお、WSL はまだまだ流動的なようです。 あなたが Google からこの記事にたどり着く頃にはこの記事は古くなっているかもしれませんね。

ではまた!