はやし雑記

はやしです

WSLで環境を整えた

WSL2にUbuntu 20.4を入れて環境を整えてみると、結構いい感じになったので書き残しておく。

Windows terminalをインストールした

www.microsoft.com

タブ機能などがあり、コマンドプロンプトやPowershellより使いやすい。

[settings.json] defaultProfile をWSL Ubuntuに設定した

v から設定を選び、settings.json を編集した。

初期状態ではWindows terminalを開くとPowershellが起動するようになっているが、WSL Ubuntuを起動するように defaultProfile のUUIDをUbuntuのguidに設定した。

[settings.json] startingDirectory をHOMEのところにした

初期状態ではWindowsのユーザーのHOME (/mnt/c/Users/<user_name>) がカレントディレクトリになって起動してしまうが、UbuntuのユーザーのHOME (~) から始めたいので

"startingDirectory": "//wsl$/Ubuntu-20.04/home/<user_name>"

を設定した。

startingDirectoryを設定してもうまくいかないという記事を見かけたが、//wsl$/Ubuntu-20.04 ではなく、//wsl$/Ubuntu としているからじゃないかと思う。

[settings.json] colorScheme をいい感じにした

とりあえず

"colorScheme": "One Half Dark"

にした。

Windows ターミナルの配色 | Microsoft Docs

ls で表示される色を変えて見やすくした

lsをしたときに、other-writable なディレクトリがクッソ見にくいので、見やすいように色を変えた。

f:id:hayashikunsan:20200628152100p:plain

ls の色を変えるためには、$LS_COLORS に設定を書けば良い

$LS_COLROSの設定を .dircolors に書けば、.bashrc で読んでくれるので、Windows terminalで

$ # 初期状態を書き出す
$ dircolors -p > ~/.dircolors
$ # 色の設定を変える
$ vim ~/.dircolors

dircolorsの設定は、dircolors -pに記述されているように、指定したいスタイルを数字で;区切りで記述する。

$ cat ~/.dircolors
...
# 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
...

例えば、文字色を赤にして背景を青にしたければ31;44とし、アンダースコア付きで背景色を白にしたければ04;47とする。

f:id:hayashikunsan:20200628153002p:plain

vimで開くと指定したスタイルがどう見えるかを表示してくれるのでわかりやすい。 とりあえず、見にくかったOTHER_WRITABLEを太字で文字色を緑に設定した。

f:id:hayashikunsan:20200628153346p:plain

かなり見やすくなったと思う。

open でexplorerが立ち上がるようにした

Twitterで見た。

alias open=explorer.exe.profileとかで設定すれば、open .とかでエクスプローラーを開くことができる。

sshでwindows側から接続できるようにした

必要になる場面はあんまりないと思うが、IDEなどからSSHで接続する必要があったので設定した。

$ sudo apt install openssh-server
$ sudo vim /etc/ssh/sshd_config
...
PasswordAuthentication yes
...
$ sudo service ssh restart

とすればWindowsからユーザー名とパスワードでSSH接続ができる。

PS > ssh <user_name>@localhost
<user_name>@localhost's password:
Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.19.104-microsoft-standard x86_64)

WSLのUbuntuはSystemdではないし、chkconfigも使えないっぽいので、自動起動させるのはすこし面倒くさい。

別のマシンからWSLにsshで接続できるようにした

同一LAN内の別のマシンや、外部ネットワークからsshでWSLに入れるようにした。

まずファイヤーウォールで22番ポートを開ける必要がある。

「設定」→「ネットワークとインターネット」→「Windows ファイヤーウォール」→「詳細設定」 で受信の規則に22番を許可するように設定する。

f:id:hayashikunsan:20200628195150p:plain

次に、ポートフォワーディングの設定をする。

$ sudo apt install net-tools
$ vim /opt/bin/start_ssh.sh
$ cat start_ssh.sh
#!/bin/bash

service ssh restart

IP=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')

netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=$IP
$ chmod a+x start_ssh.sh

start_ssh.shにsshの起動と、ポートフォワーディングについて記述する。 ポートフォワーディングはnetsh.exeにlistenportとフォワーディングする先を指定する。WSL側のIPアドレスを知る必要があるため、WSL側からnetsh.exeを実行する。

netsh.exeは管理者権限が必要なので、WindowsでPowershellを管理者権限で起動し、

> wsl -u root -e  bash '/opt/bin/start_ssh.sh'

を実行すれば、sshで別のマシンから接続ができる。

マシンの起動時にこの操作を行うには、タスクスケジューラからトリガーをシステム起動時にして上記操作を実行させるようにする。 ただし、「最上位の特権で実行する」にチェックを入れること。 また、設定の「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」にチェックを入れておかないと、うまく実行されないことがある(気がする)