2021-01-20
WSLでWindowsのデスクトップにアクセスする

結論

以下のコマンドでWSLのホームディレクトリに、Windowsのデスクトップへのリンクを設定できます。

ln -s /mnt/c/Users/$(powershell.exe '$env:UserName' | tr -d '\r')/Desktop ~/Desktop

シンボリックリンクをはる

Windowsのホームディレクトリは/mnt/c/Users/{Windowsのユーザー名}にマウントされています。なので、デスクトップにあるファイルの一覧は

ls -l /mnt/c/Users/{Windowsのユーザー名}/Desktop

で取得できます。

ただこれを毎回打つのはちょっとしんどいですから、シンボリックリンクをWSL側にホームディレクトリにはることで、デスクトップLinuxを使うときのように~/Desktopでアクセスできるようにします。

ln -s /mnt/c/Users/{Windowsのユーザー名}/Desktop ~/Desktop

CLIでWindowsのユーザー名を取得する

Windowsのユーザー名はもちろんGUIで確認することもできますが、この方法だけでは自動化できる範囲に限界があります。

例えば、WSLセットアップ用のスクリプトに上のようにリンクをはるスクリプトを組み入れるとき、わざわざWindowsのGUIでWindowsのユーザー名で確認してからスクリプトを編集するのはちょっと面倒です。そこでWSLのCLIでWindowsのユーザー名を取得することで、この確認作業を自動化しましょう。

Windows側では、例えばPowerShellを使用してCLIでユーザー名を取得できます。

echo $env:UserName

WSLではWindowsにあるソフトウェアを実行しその出力を取得することができます。

powershell.exe '$env:UserName'

例えば上のコマンドをWSL上で実行するとコマンド$env:UserNameをPowerShellに渡して実行することができ、その結果Windowsのユーザー名を取得できます。

これを先ほどのマウントされているパス/mnt/c/Users/{Windowsのユーザー名}/Desktopに組み入れれば、リンク先のパスを自動的に取得できます。

ln -s /mnt/c/Users/$(powershell.exe '$env:UserName' | tr -d '\r')/Desktop ~/Desktop

この先に出力されている改行記号をtrで取り除くことを忘れないようにしましょう。