rcmdnk's blog

20211108_wslsettings_200_200

Windows 11にしてからwsltty 上で日本語が文字化けするようになってしまったので、 Windows純正のWindowsターミナルを使っているのですが、 初期ディレクトリの設定が変わった?のか起動時にルートディレクトリ(/)開かれる 様になってしまったため設定変更しました。

Winodwsターミナル

昨年正式リリースされたMicrosoft純正のターミナル。

Windows 11ではデフォルトのターミナルアプリとしてコマンドプロンプトやPowerShellターミナルから移行されています。 ただし、ターミナル上でコマンドプロンプトやPowerShellも使えるようになっていて WSLも使える様になっています。

これまでWSLはwslttyというターミナルアプリを使って 操作していましたが、Windows 11になって日本語が化ける状態になってしまって まだ直せてないのでWindowsターミナルを使っています。

ちょっと日本語を変換するときに見にくくなるのが欠点ですが、 まだ他のアプリとかを探せてないので引き続き使ってます。

起動時のディレクトリ設定が変わった?

Windowsターミナルでは起動時にデフォルトでコマンドプロンプトやPowerShell、もしくはWSLなど 好きなものを立ち上げられる様に設定できますがWSLのUbuntuを立ち上げる様にしてあります。

多分Windows 11にアップグレードしたタイミングでは起動時にきちんと UbuntuのHOMEディレクトリに入っていたと思うのですが、 最近ルートディレクトリで開く様になってしまっていました。 (もしかしたら記憶が曖昧なだけで11への変更がきっかけかもしれません。)

cdすると普通にHOMEディレクトリに移動できて、シェル変数なども特におかしな部分は ないのですがターミナルから開くと何故かルートディレクトリに。

Windowsターミナルの起動時の初期ディレクトリ設定

というわけで、設定を調べてみます。

Windowsターミナルを開いてCtrl-,を押すかタブが開いていればその右側にある下三角ボタンから設定を開きます。

プロファイルにあるUbuntuなどをエンタクしてディレクトリの開始の項目をチェック。

するとこんな感じになっていました。

20211108_wslsettings.jpg

ディレクトリの開始には

//wsl$/Ubuntu/home/<User>

といった内容が。 これがおかしいっぽい。

結論としてはスラッシュになってるのをバックスラッシュに置き換えてあげれば治りました。

調べる方法としてWindowsターミナルでUbuntuを開いて、ホームディレクトリに移動して

$ explorer.exe .

を実行すればホームディレクトリがエクスプローラーで表示できます。

20211108_explorer.jpg

するとこんな感じで開けるので左上の表示やアドレスバーのところをクリックしてパスを表示させてあげれば確認できます。

\\wsl.localhost\Ubuntu\home\<User>

wsl.localhostとなっていますが、これはwsl$と同じです。

なので上との違いはスラッシュかバックスラッシュか。

ディレクトリの開始をこれに書き換えて上げると起動時にちゃんとHOMEディレクトリになるようになりました。 また、ルートディレクトリにあるディレクトリの確認に時間がかかるものがあるので 起動もだいぶ速くなりました。(変更前は数秒かかってたけど変更後は一瞬で立ち上がる)

まとめ

立ち上がりの速度も変わってなんか遅いな、と最近感じていたので、やはりWindows 11に変更した段階で変わっていたということは多分無いと思ってます。

10の時はだいぶ前に触ったまましばらく触っていなかったので、最初色々不具合がないか 結構見たつもりですし。

逆にこれがなんで突然変わったのかはもっと不明ですが。

いずれにしろ設定自体は上の様にあるのでなにかあれば調べてみれば、と。

おまけ1: Windows内でのWSLのフォルダ

ベータ版の頃のWSL1では

C:\Users\<WindowsUserName>\AppData\Local\lxss\rootfs

の中にLinuxのファイルがあって、ただし/home/の下は何もない状態。 実質的に別のファイルシステムでWindows側からファイルを直接共有することはできませんでした。

Linux側からは/mnt/c/からWindows側にアクセスすることができました。

その後正式リリース後(?)

C:\Users\<WindowsUserName>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

といったフォルダに変更されていました。(Linuxのディストリビューション毎に違うフォルダ)

そしてWSL2になったあとは上記のLocalSteteまでのフォルダはありますが、 その中にはext4.vhdxというLinuxのディスクファイルがあってこれはダブルクリックとかしても開けないものになっています。

一方で

\\wsl$\...

からネットワーク越しの様な形でファイルにアクセス出来る形になっています。

おまけ2: フォルダをエクスプローラーで開く

上にも書いたように、WSL内ではexplorer.exeというコマンドが使えて ディレクトリを引数として渡すことでそのディレクトリを Windows側のエクスプローラーで表示することができます。

同様に

$ powershell.exe /c start .

とやっても開くことができます。

これらを使って、jpgやpdfファイルなどを指定しても適宣アプリを使って開いてくれます。

ただし、explorer.exeの方だと何故か?必ず返り値が1でエラー終了になります。

コマンドラインで叩く際には特に気にしなければ問題ありませんし、コマンドも短いのでexplorer.exeのほうが便利ですが、ちょっと微妙。

2つでもしかしたら開けるものとかに差異があるかもしれませんが同じだと思うと 正常終了してくれてたほうがうれしいです。

で、話はちょっと変わってmacOSにはopenという便利コマンドがあって これを使うとディレクトリをFinderで表示したりファイルを適当なアプリで開いたりしてくれます。

短いですし便利なので、WSLでも同じコマンドで使えるように.bashrcなんかに

.bashrc
1
2
3
4
5
if type open >& /dev/null;then
  if type powershell.exe >& /dev/null;then
    alias open="powershell.exe /c start"
  fi
fi

みたいな設定を書いておけばmacOSでもWSLでも同じ様な感覚でopenコマンドを使う事が出来るようになります。

Sponsored Links
Sponsored Links

« Read the Docsでビルドが失敗している件 WindowsのWSL用のターミナルとしてhyperを使う »