【WSL】ホストネーム変更が元に戻る問題を解決!永続化の正解はwsl.conf

WSLを使用しているとホストネームがWindowsの端末名になってしまうのですが、自分みたいに説明が画面キャプチャを貼ったりしていると、あんまり見せたくないなと思うこともあります🤔そこでWSLディストリビューションhostnameを変更を考えるのですが、一般的なhostnameの変更手順では永続化できないという現象が発生します🙄

今回はその対策のメモとなります。特に以前のディストリビューションには名前をつけられるようになったのに、それがホストネームに反映されてないとちょっと気持ちが悪いですよね。

参考

uepon.hatenadiary.com

問題点

WSLでホストネームを変更したいが、hostnameコマンドや/etc/hostnameの編集だけでは、再起動時に元に戻ってしまう。

一般的な手順(今回はこれでは永続化されない)

# 以下ではwsl --shutdownを行った場合ではもとに戻る
$ hostname newhostname
# ファイルを編集でhostnameの変更は可能だが、再起動するとこのファイルの変更が無効になる。
$ sudo nano /etc/hostname

この原因は?

実は、WSLは再起動時にWindowsホストからホストネームを継承するため、通常のLinuxの変更手順では永続化されないのです。

解決方法

wsl.confを編集することで変更の永続化が行われます。というか、再起動時にWindowsホストからホストネームの継承時に、このファイルの値が設定に反映されます。

1. wsl.confファイルを編集

$ sudo nano /etc/wsl.conf

2. wsl.confファイルに以下の内容を追加

ホストネームをMyUbuntuにする場合は以下のようになります。

  • ⚠️# generateHosts = falseは不要です。入っていたらコメントアウトしてください
  • ⚠️入っているとsudoコマンドの実行が遅くなります
[network]
hostname = newhostname
# generateHosts = false

変更箇所

3. PowerShellに戻り、WSLを再起動

PS> wsl --shutdown
PS> wsl -d ディストリビューション名

再起動するとホストネームが変わっています

おわりに

変更してsudoコマンドの実行が遅くなってかなり焦りましたが、起動時に/etc/hostsが自動生成されることでこの現象が発生するようです。手動で修正もできますが、wsl.confの修正が簡単に解消します。