Windows10
WSL
BoW

WSLを楽しく使う

More than 1 year has passed since last update.


はじめに

Windows 10標準のLinux仮想環境、Windows Subsystem for Linux(以下WSL)は着実に進歩してますが、デフォルトのままだとまだまだ使い勝手が悪い部分があります。ここでは快適に楽しく使うために個人的に試したことを紹介します。

なお、試したのは Windows 10 Insider Preview Build 17672の環境です。それより古いバージョンだと動作しない場合があります。


コマンドプロンプトからのWSLの起動

WSLを起動する方法はいくつかありますが、以下のようにwsl.exeコマンドにディストリビューションを指定する方法を覚えておけば今後変更があってもつぶしがききそうです。

> wsl.exe -d distribution

指定可能なディストリビューションの一覧は以下のコマンドで表示されます。

> wslconfig.exe /l

ディストリビューションを省略すると規定のディストリビューションが立ち上がります。これはwslconfig.exeコマンドで変更できます。

詳しくは下記参照。


ターミナル環境

Windows10標準のターミナルはバージョンによって日本語がうまく表示できなくなったり、コマンドによっては表示が崩れたり、使い勝手も今ひとつなので、Hyperというオープンソースのターミナルソフトをいれました。複数タブに対応し、ひとつのタブを水平または垂直方向に分割可能です。インストールは以下のリンクから。


シェルの選択

Hyperには起動するシェルを複数登録して選択する機能はありません。そこで、シェル選択用のbatファイルを用意し、Hyper のShellとして登録しています。以下のファイルではcmd, Powershell, ubuntu, ubuntu1804, debian という5つのシェルの中から選択するようにしています。


Windows環境とのファイル共有


パスの変換

Windowsの C:\User\you\Documents というパスはWSLでは/mnt/c/Users/you/Documentsとして見えます。この変換はほとんどの場合自動で行われますが、明示的に行いたい場合WSL上にwslpathというコマンドが用意されてます。

$ wslpath 'C:\Users\you\Documents'

/mnt/c/Users/you/Documents
$ wslpath -w /mnt/c/Users/you/Documents
C:\Users\you\Documents


metadata の設定

Windowsのファイルに対してLinuxのファイル属性を設定したりオーナー変更をすることができるようになりました。設定した内容は他のLinuxディストリビューションでも共有されます。mount時のオプション指定でも可能ですが、/etc/wsl.confというファイルを作成して以下のように設定するのが、自動化できて便利です。

[automount]

options = "metadata"

WSLを再起動すると反映されます。

wsl.confの書式については下記を参照。


プロンプト設定

複数のLinuxのディストリビューションやバージョンを使い分けるときに間違いやすいので、プロンプトに表示するようにしています。以下の記述を $HOME/.bashrc に追加しました。

case "$TERM" in

    xterm-color|*-256color) color_prompt=yes;;
esac
OS=$(awk -F'=' '/PRETTY_NAME/ {print $2}' /etc/os-release | sed 's/"//g')
if [ "$color_prompt" = yes ]; then
    PS1="\033[01;32m$OS\[\033[00m:\033[01;34m\]\w\[\033[00m\]\$ "
else
    PS1="$OS:\w\$ "
fi


環境変数の受け渡し

WindowsからWSLを起動するときと、WSLからWindowsのプロセスを起動するときに環境変数を渡すしくみが用意されました。渡す環境変数のリストを:区切りで WSLENVという環境変数に指定します。たとえばWindowsのUSERPROFILEUSERNAMEをWSLに渡したい場合は、

> set WSLENV=USERPROFILE:USERNAME

としてからWSLを起動します。

サフィックスをつけることで、それぞれの環境変数のパスの形式を変更することもできます。詳しくは下記ページを参照。


おわりに

あとこれでWSLからGPUにアクセスできるようにしてもらえると、いったん文句ないです。