WSL(Windows Subsystem for Linux)のファイルやフォルダはWSL内で閉じていて、エクスプローラーなど、WSLの外からはアクセスできません。
なので、WSLとWindowsの両方からアクセスできる場所として、Windowsのフォルダをシンボリックリンクで参照して使っています。
便利でよく使っているのですが、問題があって、「ls」でファイル一覧を見た時、Windowsのフォルダの色が、緑背景に青文字でとても見づらいのです。
原因
Windowsのフォルダ・ファイルは、WSLから見ると、other userの書き込み権限がついてしまいます。
そして、「ls」のデフォルトのカラー設定では、other userの書き込み権限がついたフォルダは、緑背景に青文字になっているためです。
なので、「ls」のカラー設定を変更して対処します。
手順
流れ
- 「ls」のカラー設定は、環境変数「LS_COLORS」で行います
- 「LS_COLORS」を直接編集してもいいのですが、ここでは、設定をやり易くするコマンド「dircolors」を使います
- 「dircolors」コマンドは
- デフォルトのカラー設定を分かり易い形式で出力してくれます
- 出力したのと同じ形式のカラー設定ファイルを読み込んで、「LS_COLORS」変数を設定してくれます
下記のような流れになります。
- 「dircolors」で一旦設定をファイルに出力
- 好みの色になるようファイルを編集
- シェルの起動スクリプトから「dircolors」で編集したファイルを読み込んで、「LS_COLORS」を設定
LSカラー設定ファイルを出力
dircolors -p > ~/.dircolors
LSカラー設定ファイルを編集
other userの書き込み権限がついたフォルダは「OTHER_WRITEBLE」で、その値は「34;42」=「文字青;背景緑」となっています。
... OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky ...
ここでは「01;32」=「ボールド;文字緑」としてみました。
... OTHER_WRITABLE 01;32 # dir that is other-writable (o+w) and not sticky ...
色の設定方法
色の設定方法は、出力された設定ファイルのコメントに記載されています。ファイル・ディレクトリ等の種類別(OTHER_WRITEBLE等)に「文字種類(Attribute codes)」「文字色(Text color codes)」「背景色(Background color codes)」を設定でき、設定値は「;」でつなぎます。(3つ全て設定する必要はありません)
# Below are the color init strings for the basic file types. A color init # string consists of one or more of the following numeric codes: # Attribute codes: # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed # Text color codes: # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white # Background color codes: # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
LS_COLORS設定
dircolors -b [設定ファイルパス]
で、LS_COLORSを設定するコードが出力されるので、下記を「.bashrc」などに追記します。
eval $(dircolors -b ~/.dircolors)
以上で完了です。シェルを立ち上げ直すと、Windowsのフォルダが緑文字になっています。
おまけ
▼追記 2019/06/26(ここから)
Windows TerminalがMicrosoft Storeに上がっていたのでインストールしてみました。
カラーテーマ使えますね。これで安心して正式リリースを待てます。
設定は下記記事を参考にしました。テーマ名にスペースが必要な場合があるので注意です。
https://www.howtogeek.com/426346/how-to-customize-the-new-windows-terminal-app/
▲追記(ここまで)
「ColorTool」というMicrosoftのツールを使うと、WSL・コマンドプロンプト・PowerShellのカラーテーマを変えることができます。
デフォルトだとディレクトリが青で見づらいので、「ColorTool」で見やすくしてみます。
手順
- ダウンロードページへ移動
zipファイルをダウンロードして解凍- 解答したフォルダを、Shiftを押しながら右クリックで「PowerShellウィンドウをここに開く」
▼追記(ここから)
「ColorTool.exe」のバイナリ配布がなくなってますね…。仕方がないので、VisualStudio無料版を使って、下記の手順でビルドしました。
- Visual Studio Communityエディションをインストール
- GithubのColorToolフォルダ以下をダウンロード
- PowerShell等で
.\build.bat rel
を実行 - 「ColorTool/bin/Release/xxx/ColorTool.exe」が作成される
- 「schemes」フォルダを、作成された「ColorTool.exe」と同じフォルダに置く
- スキームの指定は「ColorTool.exe -b .\schemes\xxx.ini」で行う
注意:「build.bat」では「msbuild.exe」の場所を探して設定しているので、Visual Studioをデフォルトとは別のフォルダにインストールした場合は、手動でMSBUILDをインストール先の「msbuild.exe」になるよう修正が必要です。
▲追記(ここまで)
.\ColorTool.exe -s
でスキーム一覧が表示されるので、.\ColorTool.exe -b <スキーム名>
で適用します。
(元に戻すには、デフォルトのスキーム「cmd-legacy」を適用します)
WSLを立ち上げ直すと、WSLの色も変わっています。
最初と比べて、随分見やすくなりました。
スキーム追加
スキームは「schemes」フォルダにファイルを入れていって追加できます。
こちらの「schemes」にスキームファイルがいっぱいあるのですが、多すぎて組み込みのでいいやとなってしまいました…。
感想など
あまりカスタマイズするのは好きじゃなく、ずっとデフォルトで頑張ってたんですが、画面の小さいノートPCにしたら文字が読めなくなって…。仕方なくカスタマイズすることにしました。
ColorToolのバイナリ配布がなくなったので、全然手軽じゃなくなりました…。
ColorToolは、先日発表のあった「Windows Terminal」に含まれているので、バイナリ配布は「Windows Terminal」のリリース時になるのかなぁ…。
参考記事
- https://qiita.com/soramugi/items/a726bd64330e08daa9e5
- https://qiita.com/yuyuchu3333/items/84fa4e051c3325098be3
- https://techblog.recochoku.jp/5537