エクスプローラーの右クリックメニューに「Codeで開く(WSL)」を追加する

はじめに

CTFを解く時にWSLのKali Linuxを使うことが多く、いつもVS Codeのお世話になっているけどKali Linuxで開くためにフォルダ内で右クリック→「Codeで開く」→Ctrl+Shift+P→「WSLでフォルダーをもう一度開く」→「kali-linux」とやるのが非常に面倒なので右クリックメニューに「Codeで開く(WSL)」的なのを追加できれば楽なんじゃないかと思って試してみた。

WSLでCodeを開く方法

UbuntuはWindows側のCodeにパスが通っているのでそのまま開ける。

$ which code
/mnt/c/Users/Poyo/AppData/Local/Programs/Microsoft VS Code/bin/code

$ code

KaliではKaliに入っているCodeが開いてしまうので絶対パスで指定する必要がある。パスの空白はしっかりとバックスラッシュでエスケープする必要がある。

$ which code
/usr/bin/code

// Kaliに入っているCodeが起動する
$ code

// Windows側のCodeが起動する
$ /mnt/c/Users/Poyo/AppData/Local/Programs/Microsoft\ VS\ Code/bin/code

Windows側で実行する際は先頭にwsl --distribution {ディストリビューションの名前}を付ければ良い。ディストリビューションの名前はwsl -l -vで確認できる。

レジストリに追加

右クリックメニューに追加するためにデフォルトの設定(コンピューター\HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\VSCode内)を参考にしてレジストリに値を追加する。\Directory\Background\はフォルダ内でなにもないところを右クリックした際に開くメニューである。

自分は以下の通りにした。PowerToysの「レジストリ プレビュー」を使えば編集しながらどのように値が反映されるか確認できるので便利。

日本語を入れる場合はUTF-16(LE: Little Endian)で保存しないと反映時に文字化けします!

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\VSCodeWSLUbuntu]
@="Code で開く(WSL: Ubuntu)"
"Icon"="C:\\Users\\Poyo\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"

[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\VSCodeWSLUbuntu\command]
@="C:\\Windows\\System32\\wsl.exe --distribution Ubuntu /mnt/c/Users/Poyo/AppData/Local/Programs/Microsoft\\ VS\\ Code/bin/code ."


[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\VSCodeWSLKali]
@="Code で開く(WSL: Kali)"
"Icon"="C:\\Users\\Poyo\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"

[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\VSCodeWSLKali\command]
@="C:\\Windows\\System32\\wsl.exe --distribution kali-linux /mnt/c/Users/Poyo/AppData/Local/Programs/Microsoft\\ VS\\ Code/bin/code ."

確認

レジストリを変更した時点でちゃんと更新されているのでエクスプローラーやPCの再起動はいらない。

以下の画像のとおりになっていたら成功。

下2つが自分で追加したもの