今回は、これまでの取り組みをまとめてみたい。まず、WindowsにサインインするタイミングでWSLを自動起動してUbuntuを動作させる。続いて、UbuntuにインストールしたWebサーバを自動起動させる。これでWindowsにサインインしたらUbuntuのWebサーバが自動的に使えるようになる。WindowsでUbuntuを常用するなら、知っておきたい設定方法だ。→連載「WindowsでUbuntuをはじめる」のこれまでの回はこちらを参照

Windowsサインイン時にWSLを実行する

まず、WindowsにサインインしたらWSLが動作するように設定する。方法は複数あるが、Windowsのタスクスケジューラを使ってサインイン時にWSLコマンド(C:\Windows\System32\wsl.exe)を実行するように設定するのは順当な方法だ。

タスクスケジューラを起動してタスクを追加する。

  • タスクスケジューラ: 新規タスク - 「WSL起動」

    タスクスケジューラ: 新規タスク - 「WSL起動」

トリガーは「ログオン時」に設定する。

  • タスクスケジューラ: トリガー: ログオン時

    タスクスケジューラ: トリガー: ログオン時

操作は「プログラムの開始」とし、対象は「C:\Windows\System32\wsl.exe」とする。

  • タスクスケジューラ: 操作: プログラムの実行

    タスクスケジューラ: 操作: プログラムの実行

  • タスクスケジューラ: 操作: プログラムの実行: プログラム/スクリプト - 「C:\Windows\System32\wsl.exe」

    タスクスケジューラ: 操作: プログラムの実行: プログラム/スクリプト - 「C:\Windows\System32\wsl.exe」

条件と設定は、必要に合わせてチェックすればよい。

  • タスクスケジューラ: 条件

    タスクスケジューラ: 条件

  • タスクスケジューラ: 設定

    タスクスケジューラ: 設定

ここまで設定して、タスクスケジューラのタスク一覧に追加されていることを確認する。

  • タスクスケジューラ

    タスクスケジューラ

状態が無効になっていると動作しない。「準備完了」のように次のサインイン時に動作する設定になっていることを確認しておく。

systemd経由でWebサーバを起動する

WSLで動作するUbuntuで自動的にWebサーバが起動してくるように、systemdを有効化する。Ubuntuにアクセスして/etc/wsl.confファイルを作成し、次の設定を追加する。

/etc/wsl.conf

[boot]
systemd=true

systemd経由での操作は前回に説明したとおりだ。基本的にはsystemdを有効化すればインストールしたサーバなどは自動的に起動してくる対象になると思う。または、前回の説明を参考にして自動起動が有効になっているかの確認と、なっていない場合には有効化する操作を行っておく。

システムを再起動して動作を確認

ここまで設定したら動作確認を行う。システムを再起動してサインインを行い、次のようなターミナルが起動してくることを確認する。

  • WSLが自動起動された証拠となるターミナルアプリケーション

    WSLが自動起動された証拠となるターミナルアプリケーション

この状態でWSLの動作状態を確認すると、次のようにUbuntuが稼働していることが確認できる。

  • Windowsサインイン後にWSLが動作していることを確認

    Windowsサインイン後にWSLが動作していることを確認

WindowsからWebサーバにアクセスすることも確認できる。

  • WindowsからWebサーバにアクセスできることを確認

    WindowsからWebサーバにアクセスできることを確認

今回説明した設定を行っておくと、このようにサインインしたあとでUbuntuで動作するWebサービスを利用できる。Ubuntuでプロジェクト管理用のWebアプリケーションを動作させるとか、この設定をしておくことで扱いやすくなる。

注意:サインイン時に起動してきたターミナルとプログラムは終了しない

以前は、これでWSL経由でUbuntuがバックグラウンドで動作を続けてくれたのだが、最近の変更でバックグラウンドでの動作は継続されないようになった。

最初に起動してきたターミナルを終了し、ほかのターミナルからWSLの動作状況を確認していると、次のようにWSLがシャットダウンすることを確認できる。

  • 最初に起動してきたターミナルを終了すると、Ubuntuも終了する

    最初に起動してきたターミナルを終了すると、Ubuntuも終了する

当然、こうなると先ほどアクセスできたWebサーバにアクセスしても次のように見えなくなる。

  • 最初に起動してきたターミナルと終了すると、Ubuntuで動作していたWebサーバにもアクセスできなくなる

    最初に起動してきたターミナルと終了すると、Ubuntuで動作していたWebサーバにもアクセスできなくなる

今のところ、最初の起動してきたターミナルを非表示にしておく簡単な方法は用意されていないように思われる。この辺りはアップデートがあったら取り上げつもりだ。

こんな感じで2つの設定を行っておけば、サインインしたあとで自動的にUbuntuが起動して、そこにセットアップしたサーバが起動して利用できる状態にできる。WindowsでUbuntuを日常的に活用する場合にはこの設定をしておくと便利なことが多いと思うので、参考にしてもらえれば幸いだ。

参考