WSLでWindowsのPATHを引き継がないようにする方法

【令和元年6月8日更新: Windows 10 1903まで確認】

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 - 1903

ディストリビューション毎に、そのLinux上の/etc/wsl.confファイルで設定します。Linuxにログインして、sudo vim /etc/wsl.conf等で編集してください。(ファイルがない場合は、新規作成してください。)


/etc/wsl.conf

[interop]

appendWindowsPath = false

あわせて、enabled = falseも書けば、Windowsの通常プログラムをWSL上で実行する事もできなくなります。その他にもマウントのオプション等をwsl.confで設定できます。細かい設定内容については下記の公式ブログを参照してください。

Automatically Configuring WSL – Windows Command Line Tools For Developers

後述のWindows 10 1709 -1803での方法でも可能ですが、いつまで有効化は不明です。


Windows 10 1709 - 1803

全てのディストリビューションに設定する方法と、個別に設定する方法の二つがあります。


全てのディストリビューションに反映

下記レジストリを追加することで、全てのディストリビューションで無効化されます。


追加PATH無効正式版.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LxssManager]
"DistributionFlags"=dword:fffffffd


Issueの情報によると、ディストリビューション毎の個別設定GUIを提供したいと考えていたようです。ただ、それが間に合っていなく、とりあえず全体で無効化する方法を用意しているという形のようです。1


特定のディストリビューションのみに反映

【これは公式の方法ではありません。】

HKCUのディストリビューション毎のレジストリキーにはFlagsというレジストリ値があります。どうやら、上に書いたDistributionFlagsFlagsのマスク値のようです。つまり、マスクによって除外される値0x00000002がPATHを引き継ぐかどうかのフラグとなっているようです。例えば、Ubuntuではデフォルトの値dword:00000007ですので、2だけひいたdword:00000005にすればうまくいきそうです。


追加PATH無効Ubuntu(実験的).reg

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以降もそのまま利用している人もいるかと思います。

下記レジストリを追加することで、無効化できます。


追加PATH無効β版.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss]
"AppendNtPath"=dword:00000000


設定はユーザー単位です。Microsoft Storeにある正式版では、この設定では反映されません。


【参考Issues】





  1. GUIはありませんが、1809以降は/etc/wsl.confで個別設定公式に可能になりました。