前回はWindows11に導入したWSL2(Ubuntu)でWSLgという仕組みを使ってLinuxのGUIを実行する方法を紹介しました。
これでだいぶ環境が整ってきたので、今回はwsl.confという設定ファイルを使って、いろいろ自動化したいと思います。
WSL2の起動時の行いたい設定
このブログではWSL2(Ubuntu)を導入していろいろ調査・設定してきました。
その中でいつも起動時に有効にしたい設定がいくつかあります。
まずはネットワークドライブのマウントです。
私の場合はよく使うデータをNASにおいてあるので、ネットワークドライブにはWSL2からもアクセスする可能性もあり、自動的にマウントしておきたいところです。
次はSSHサーバの起動です。
WSL2はWindows Terminalで操作することもできますが、SSHを使って接続すると使い慣れたSSHクライアントを使えるので便利です。
最後はリモートデスクトップ接続のためのxrdpの起動です。
WSL2はWSLgという仕組みでLinuxのGUIアプリをWindows上に表示させることはできますが、Linuxのデスクトップ環境をのものを表示させることはできません。
Linuxのデスクトップ環境を利用する場合はWSL2でxrdpを起動させておき、Windowsからはリモートデスクトップで接続する形になります。
WSL2の起動後にこれらの設定を手動でやっても良いのですが、できれば自動で行いたいところです。
wsl.confファイル
WSL2には起動したLinuxディストリビューションの動作を制御するためのwsl.confファイルが定義されています。Microsoftによる紹介は下記になります。
WSL2全体の動作を設定する.wslconfigファイルもありますが、今回はこちらのファイルは使用しません。
このwsl.confファイルを設定したいLinuxディストリビューションの/etc以下に作成すると、様々な動作を変更することができます。
ネットワークドライブのマウント
まずはネットワークドライブのマウントが自動化されるような設定をしていきます。
実はこの設定はwsl.confファイルだけでなく/etcにあるfstabというファイルを設定する必要があります。
例えばx:に割り当てたネットワークドライブを/mnt/xにマウントしたい場合は次のような行をfstabに追加します。
x: /mnt/x drvfs defaults 0 0
このファイルの修正にはルート権限が必要なので、suコマンドを使って修正しましょう。
xドライブ以外にもマウントしたいネットワークドライブがある場合は、同様な行を追加していきましょう。
続いてwsl.confファイルを/etcディレクトリに作成します。
初期状態ではwsl.confファイルはないので、新たにファイルを作成することになります。
また作成にはルート権限が必要ですので、適宜suコマンドを使ってください。
wsl.confファイルの内容は次のようにします。
[automount] enabled = true mountFsTab = true
実はこれがデフォルトの設定なのでwsl.confファイルを作らなくてもネットワークドライブの自動マウントができるのですが、のちのち必要なのでwsl.confファイルを作っておきました。
設定が終わったらいったんWSL2を終了したのち、再度起動してみましょう。
PowerShellで「wsl –shutdown」を実行するとWSL2を強制終了することができます。
再起動後、mountコマンドを実行してみてfstabに記載したドライブがマウントされていれば成功です。
$ mount /dev/sdc on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered) ・・・ drvfs on /mnt/x type 9p (rw,relatime,dirsync,aname=drvfs;path=s:;symlinkroot=/mnt/,mmap,access=client,msize=262144,trans=virtio)
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
とするだけでcドライブのマウントが可能になります。
SSHサーバとxrdpの自動起動
SSHサーバとxrdpの自動起動は同時にやってしまいます。この設定はwsl.confのみで実現可能です。
wsl.confファイルに次の行を追加してください。
ついでにcronも動くようにしておきましょう。
[boot] command = "service ssh start ; service xrdp start ; service cron start"
wsl.confの修正が終わったらWSL2を終了してから再度立ち上げます。
WSL2が起動したら実行中のプロセスを調べてみましょう。
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2016 1344 ? Sl 23:47 0:00 /init root 17 0.0 0.0 2112 344 ? Ss 23:47 0:00 /init root 18 0.1 0.0 2112 352 ? S 23:47 0:00 /init root 28 0.0 0.0 12180 3012 ? Ss 23:47 0:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups root 53 0.0 0.0 11200 504 ? S 23:47 0:00 /usr/sbin/xrdp-sesman xrdp 59 0.0 0.0 11492 612 ? S 23:47 0:00 /usr/sbin/xrdp root 76 0.0 0.0 3820 2092 ? Ss 22:44 0:00 /usr/sbin/cron ・・・
「sshd」「xrdp」「cron」が起動していれば設定成功です。もちろん、「dbus」などが必要であれば、同様にcommandに起動するコマンドを追加していけばOKです。
まとめ
今回はwsl.confというファイルを使って、WSL2の起動時にネットワークドライブの自動マウントと、sshサーバ・xrdpに自動起動を設定しました。
WSL2ではsystemdが動いていないため起動時の自動起動は面倒かと思ったのですが、この設定フィアルで簡単に行うことができました。WSL2で動かしておきたいサービスがある方は活用して見てください。
次回はWSL2に外部のPCから接続してみます。
コメント