前回はWindowsにフリーのXサーバを導入してWSLのGUIアプリを使う方法を紹介しました。
今回はwsl.confによる設定を紹介したいと思います。
wsl.confファイル
WSL2には起動したLinuxディストリビューションの動作を制御するためのwsl.confファイルが定義されています。Microsoftによる紹介は下記になります。

WSL2全体の動作を設定する「.wslconfigファイル」もありますが、今回はこちらのファイルは使用しません。
このwsl.confファイルを設定したいLinuxディストリビューションの/etc以下に存在します。
デフォルトの内容は次のようになっています。
[boot]
systemd=true
これはsystemdを有効にするための設定で、デフォルトでsystemdが有効になっていることがわかります。
サーバの自動起動
以前のWSL2ではsystemdが利用できなかったため、sshサーバーやリモートデスクトップ接続のためのxrdpの起動をwsl.confで行う必要がありました。
しかし、最近のWSL2では上述の通りwsl.confでsystemdが有効になっています。したがって、systemdの設定で必要なサービスを有効にしておけば自動起動するようになります。
sudo systemctl enable ssh
sudo systemctl start ssh
sudo systemctl enable xrdp
sudo systemctl start xrdp
このようにしておけば、起動直後からSSHサーバーとxrdpが起動している状態となるので、すぐにSSH接続あるいはリモートデスクトップ接続が可能になります。
systemdがWSL2で使えるようになったのは「Windows11バージョン22H2」の頃からのようですが、ユーザにとっては大きな改善だったのではないかと思います。
ネットワークドライブの自動マウント
WSL2からNASにアクセスするためにはネットワークドライブをマウントしておきたいところですが、WSL2ではデフォルトではネットワークドライブはマウントされません。
そのため手動でマウントする必要があります。

頻繁にネットワークドライブにアクセスするのであれば、WSLの起動時に自動でマウントしておきたいところです。このためには、実はこの設定は「/etc/fstab」というファイルを設定する必要があります。
たとえば「x:」に割り当てたネットワークドライブを「/mnt/x」にマウントしたい場合は次のような行をfstabに追加します。
X:\ /mnt/x drvfs rw,noatime,uid=1000,gid=1000,umask=022,fmask=111 0 0
fstabの修正にはルート権限が必要なので、suコマンドを使って修正しましょう。
次にwsl.confファイルに次の設定を追加しましょう。
[automount]
enabled = true
mountFsTab = true
実はこれがデフォルトの設定なのでwsl.confファイルを作らなくても/etc/fstabを設定しておけばネットワークドライブの自動マウントはできます。
設定が終わったらいったんWSL2を終了したのち、再度起動してみましょう。
PowerShellで「wsl –shutdown
」を実行するとWSL2を強制終了できます。
再起動後、mountコマンドを実行してみてfstabに記載したドライブがマウントされていれば成功です。
$ mount
・・・
S:\ on /mnt/s type 9p (rw,noatime,dirsync,aname=drvfs;path=S:\;uid=1000;gid=1000;umask=022;fmask=111;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=3,wfd=3)
・・・
Windowsのドライブを自動マウントしない
さきほどの設定とは若干矛盾してしまいますが、WindowsのドライブがWSL2から見えてほしくないという方もいると思います。
というのも、WSL2からWindowsのドライブが見えてしまうと、WSL2上の誤操作でWindowsのファイルを消してしまう危険性があるからです。
必要なとき手動でマウントし、用事が終わったらアンマウントする運用の方が安全かもしれません。
このような運用にする場合はwsl.confの内容を
[automount]
enabled = false
mountFsTab = false
としてください。
「enabled」を「false」とすることでSSD/HDDのドライブの自動マウントが無効化され、「mountFsTab」を「false」とすることで/etc/fstabの内容を無視する(=ネットワークドライブのマウント設定が無視される)様になります。
ただし、副作用としてWSL2のLinuxからWindowsのコマンドが実行できなくなります(Windows側のドライブが見えないので当然ですが・・・)。
安全性と相互運用性のトレードオフになりますので、自分の運用方針に合わせて自動マウントするかどうかを決めてください。
なお、このようにするとcドライブなどのマウントが面倒になります。そのような場合は、fstabファイルに
C:\ /mnt/c drvfs defaults 0 0
と記載しておくと
sudo mount /mnt/c
でマウントできるようになります。
ホスト名の変更
デフォルトではWSLのホスト名はWindowsのホスト名と一致します。
WindowsとWSLは同じPCで動いているのでホスト名が一致してもおかしくはないのですが、別々のOSなのでホスト名も違うほうが混乱しないと思います。
また、WSL2で2つ以上のディストリビューションをインストールした場合は、同じホスト名のLinux環境ができてしまい、ますます混乱してしまいます。
そこで「wsl.conf」ファイルを使ってWSLに独自のホスト名を設定しましょう。
ホスト名をたとえば「ubuntu」とするには次のようにします。
[network]
hostname = ubuntu
generateHosts = true
設定が終わったらいったんWSL2を終了したのち、再度起動してみましょう。
ホスト名を確かめるには次のコマンドを実行します。
$ hostname
ubuntu
これでホスト名がwsl.confで指定したものになっていることがわかります。
まとめ
今回はWSL2の設定ファイルであるwsl.confを使った設定を紹介しました。
wsl.confには色々設定項目がありますがデフォルトのままでもほとんど問題なく使用できます。ただ、ホスト名は変更しておいたほうがわかりやすい気がします。
次回はWSL2に外部のPCから接続してみます。
コメント