【令和2年10月24日更新: Windows 10 20H2のWSL2で確認済み】
Windows 10 64bitではWindows Subsystem for Linux (WSL)を用いて気軽にLinux環境で遊べるようになりました。しかし、そのままWSLのLinuxを起動した場合、Windowsの環境変数PATHを引き継いでしまいます。これにはWindows上のコマンドをそのまま実行できるという利点がありますが、WSLから見えているパスの違いによる起動失敗、予期せぬコマンドの実行、PATHにスペースが含まれていることによる不具合、などの弊害も少なからずあります。
この記事ではWindowsのPATHを引き継がないようにするための設定を記述します。なお、Windows 10のバージョンによって設定方法が異なります。特に明記しない限り、Microsoft Storeで入手できる「Ubuntu」を使用した場合になります。他のディストリビューションでは検証していませんが、ほぼ同じと思われます。
Windows 10 1809 - 20H2 WSL1およびWSL2
ディストリビューション毎に、そのLinux上の/etc/wsl.conf
ファイルで設定します。Linuxにログインして、sudo vim /etc/wsl.conf
等で編集してください。(ファイルがない場合は、新規作成してください。)
[interop]
appendWindowsPath = false
あわせて、enabled = false
も書けば、Windowsの通常プログラムをWSL上で実行する事もできなくなります。その他にもマウントのオプション等をwsl.confで設定できます。細かい設定内容については下記の公式ドキュメントやブログを参照してください。
Linux ディストリビューションの管理 | Microsoft Docs ※ 設定値とかも機械翻訳されている場合がありますので、概要がわかったら細かいところは英語で読むことをお勧めします。
Automatically Configuring WSL – Windows Command Line Tools For Developers
この方法はWSL1とWSL2の両方で可能です。
後述のWindows 10 1709 - 1803での方法でも可能な場合もありますが、WSL2等については確認していません。
Windows 10 1709 - 1803
全てのディストリビューションに設定する方法と、個別に設定する方法の二つがあります。
全てのディストリビューションに反映
下記レジストリを追加することで、全てのディストリビューションで無効化されます。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LxssManager]
"DistributionFlags"=dword:fffffffd
Issueの情報によると、ディストリビューション毎の個別設定GUIを提供したいと考えていたようです。ただ、それが間に合っていなく、とりあえず全体で無効化する方法を用意しているという形のようです。1
特定のディストリビューションのみに反映
【これは公式の方法ではありません。】
HKCUのディストリビューション毎のレジストリキーにはFlags
というレジストリ値があります。どうやら、上に書いたDistributionFlags
はFlags
のマスク値のようです。つまり、マスクによって除外される値0x00000002
がPATHを引き継ぐかどうかのフラグとなっているようです。例えば、Ubuntuではデフォルトの値dword:00000007
ですので、2だけひいたdword:00000005
にすればうまくいきそうです。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{7b23236a-3e42-4ecf-9940-e7e50e98b9bc}]
"Flags"=dword:00000005
**{7b23236a-3e42-4ecf-9940-e7e50e98b9bc}
はインストールしたディストリビューションによって異なります。**手元の環境では、上記レジストリでPATHが引き継がないようになりました。全体設定と違い、各ユーザー毎かつ各ディストリビューション毎の設定になります。
なお、正式な文献等の根拠はありませんので、動作は一切保証しません。自己責任でお使いください。
Ubuntu以外のディストビューションでも同様にできる可能性はありますが、調べていません。デフォルトのFlags
の値も異なる可能性がありますので、ご注意ください。
Windows 10 1607 - 1703 (レガシー版)
Microsoft Storeに公開される前の、Windows 10 1607から提供された、開発者向けのBash on Ubuntu on Windowsと言われているWSL環境についてです。この頃から使っている場合は、1709以降もそのまま利用している人もいるかと思います。
下記レジストリを追加することで、無効化できます。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss]
"AppendNtPath"=dword:00000000
設定はユーザー単位です。Microsoft Storeにある正式版では、この設定では反映されません。
【参考Issues】
- [Question] How to remove Windows pathes from WSL PATH? · Issue #1493 · Microsoft/WSL · GitHub
- bash $PATH includes native Windows path(work around "AppendNtPath"=dword:00000000 Not working) · Issue #2048 · Microsoft/WSL · GitHub
-
GUIはありませんが、1809以降は
/etc/wsl.conf
で個別設定公式に可能になりました。 ↩