65 脱線: WSL2 を試す

(当分工事中)

この文書は、Mac を使いこなすためのメモと言うことなので、 脱線ということになってしまうけれど… Windows マシンで WSL (Windows Subsystem for Linux) を使う話は書いておこうかな。

…まあ、Mac からの脱出も考えておかなくちゃ、それもノウハウのうち、 とこじつけたりして。


既に[*] 「番外編: 初めてのWSL」というのを書いたことがある。 でもそれは WSL で、今回試したいのは WSL2 ということで、0からスタート。


ちなみにマシンは、買ったばかりのまっさらに近いもの (msi Prestige 14)。

「WSL2の初歩メモ」 を参考にしてインストールする。


まず、タスクマネージャーを起動して (ctrl+alt+DELETE して選択する)、 パフォーマンス タブで仮想化が有効になっていることを確認せよ、 とある。これは大丈夫だった。


管理者権限で PowerShell を起動して (スタートメニューで Windows PowerShell の下にある “Windows PowerShell” (紛らわしいね) を右クリックする、 あるいは検索ボックスに powershell を入力して「管理者として実行する」、 あるいは画面左下のWindowsロゴを右クリックしてコンテキストメニューを表示)、 以下のコマンドを実行して、WSLを有効にする。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

仮想マシンプラットホームを有効にする。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

ここでPCを再起動する(スタートメニュー、電源、再起動)。


コントロールパネルの[プログラム][Windowsの機能の有効化または無効化] (呼び出すには Windowsキーを押してスタートメニューを表示させ、 “windows fea” と入力する、という手もある) で、 「Linux 用 Windows サブシステム」と 「仮想マシンプラットホーム」にチェックがついていることを確認する。 (これはついていた。)

PowerShell で次のコマンドを実行して、WSL のデフォルト・バージョンをWSL2とする。
wsl --set-default-version 2

“WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。 詳細については https://aka.ms/wsl2kernel を参照してください” と言われてしまった。

カーネルのパッケージを https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi(これはわずか 14.6MB) からダウンロードして実行し、上のコマンドをやり直す。 今度は無事通った。

「Microsoft Store」を開いて、 希望する Linux ディストリビューションを選択する (選択肢は Ubuntu, openSUSE-Leap-15-1, Kali Linux, Debian, Alpine WSL)。 まあ、Ubuntu にしておきます。 453.7MB か。昔ならいざ知らず、今だと可愛いサイズだね。

インストールして、起動 (この辺はクリックするだけ)。 最初は少し時間がかかるとか、と言われたけれど 1分もかからなかった。

“Enter new UNIX username: ”, “New password: ”, “Retype new password: ” と尋ねられる。適当に答えておく。

Ubuntu 20.04.2 LTS (GNU/Linux 5.4.72-micsosoft-standard-WSL2 x86_64)

あ、“1 update can be installed immediately.” とある。 こうすればいいのかな?(自信はない。)
sudo apt update
sudo apt upgrade -y

ここまでの段階で ~/.bashrc が存在するので、 色々設定が書ける。 curl も ssh も使えるので、 必要なものを Mac で用意して持って来ることもできる。

ssh の設定をして (細かいことは省略)。
eval `ssh-agent`
ssh-add

すんなり研究室のマシンにリモート・ログイン出来た。 バックスラッシュが円記号に見えるのは久しぶりだ (ちょっと気持ち悪い)。


Windows Terminal というのを使ってみるか。

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701

これがあると、 Windows PowerShell, コマンドプロンプト, Ubuntu, Azure Cloud Shell が選択できる。 デフォールトでは ctrl+shift+2 で Ubuntu (bash) が起動するのか。 気軽に複数のシェルが起動できるので、作業がとてもやりやすい。

あ、バックスラッシュが円記号でなくてバックスラッシュに見える。 なるほど。 こっちがいいや (これは冗談で、他にも色々便利な機能があります)。

Ubuntu を “デフォルトのプロファイルにする場合は、 settings.jsonにて defaultProfile として、 Ubuntu の guid を指定してください。” というのがあるけれど、json の編集か。 VS code でもやらされたやつか。どうしようかな (ちょっと面倒かな)。

VS code は Windows にインストールするのか、Ubuntu にインストールするのか。 はてさて?

今日はここまで。


(X11 とか Emacs とか gcc とか…)

(2021/3/9追記) Windows Terminalの settings.jsonの場所が分かった。 ただのテキストファイルなので、例えば vi で編集しても構わないわけだ。
vi ~/AppData/Local/Packages/Microsoft.WindowsTerminal_8wekyb3d8bbwe/LocalState/settings.json

Windows では、copy がctrl+C, pasteがctrl+Vとなっているが、 これはUNIX使いには難物だ。 でもWindows Terminalでは同時に shift を押したら? (つまり copy は ctrl+shift+C, paste が ctrl+shift+V) となっているらしい (default.json に設定が書かれているそうだ)。 デフォールトでは Windows 流の ctrl+C, ctrl+Vも有効だが、 これは設定ファイル settings.json の方でやっているとか。 それをコメントアウトすれば ctrl+C, ctrl+V のコピペへのバインディングが外せるのか。

settings.json の該当部分 (注釈を読むと理解できる)
 "actions":
    [
        // Copy and paste are bound to Ctrl+Shift+C and Ctrl+Shift+V in your defaults.json.
        // These two lines additionally bind them to Ctrl+C and Ctrl+V.
        // To learn more about selection, visit https://aka.ms/terminal-selection
        //{ "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
        //{ "command": "paste", "keys": "ctrl+v" },

        // Press Ctrl+Shift+F to open the search box
        { "command": "find", "keys": "ctrl+shift+f" },

        // Press Alt+Shift+D to open a new pane.
        // - "split": "auto" makes this pane open in the direction that provides the most surface area.
        // - "splitMode": "duplicate" makes the new pane use the focused pane's profile.
        // To learn more about panes, visit https://aka.ms/terminal-panes
        { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" }
    ]

Windows Terminalまだ慣れていないけれど、割といいかもしれない。 実はかなり長時間 Windows Terminal から Mac にリモート・ログインして書き物をしている(出来ている … 不便だとちょっとやっているうちにくたびれるはず)。

段々ストレスが減っていく感じ。


(ところで Macでは、PC のCAPSの位置に controlがあり、 PCの ctrl の位置付近に command があって、 ctrl+C と ctrl+V がそれぞれ command+C, command+V に割り当てられているが、 これって実に傑作な設定だといまさらながら感心した。 UNIXとPCの両方に慣れた人にやさしいということになるのかな。)


この文書は Mac についてのメモだけど、 WSLについてのメモというのを書き始めるべきなのかもしれないな。

桂田 祐史