Windowsで動作するUbuntuをメインで使うようになってくると、Ubuntuの提供するDockerやcronやサーバといった機能を使うようになってくる。そうなると、Windowsにサインインしたときや、Windowsが起動したときには同時にUbuntuも実行されていてほしくなってくる。今回はそんな場合の設定方法を取り上げる。→連載「WindowsでUbuntuをはじめる」のこれまでの回はこちらを参照

常にUbuntuが動いていてほしい

WSLで実行されるUbuntuをよく使う場合、常に背後でUbuntuが動作しておいてほしいと考えるようになる。しかしながら、Ubuntu/WSLは明示的に起動しない限り動作しない。Windowsにサインインした直後に次のようにコマンドを実行すると、Ubuntuが動作していないことを確認することができる。

  • Windowsサインイン直後、Ubuntuは実行されていない

    Windowsサインイン直後、Ubuntuは実行されていない

Ubuntuをよく使うユーザーとしては、WindowsにサインインしたときにUbuntuも同時に起動してくれると便利だ。以下、その設定方法を紹介していこう。

Windowsサインイン時にUbuntuを起動する設定

かといって、特別な設定をするわけではない。タスクスケジューラでWindowsサインイン時にwsl.exeが実行されるようにすればよいだけだ。まず、wsl.exeのフルパスを調べる。

  • wsl.exeのフルパスを調べる

    wsl.exeのフルパスを調べる

wsl.exeのフルパスが「C:\WINDOWS\system32\wsl.exe」であることがわかる。wsl.exeのフルパスがわかったら、タスクスケジューラを起動して新しいタスクを追加する。

  • タスクスケジューラ

    タスクスケジューラ

新しいタスクを作成し、まずは名前を入力する。

  • タスクスケジューラ: 名前を入力

    タスクスケジューラ: 名前を入力

次にトリガーで、サインイン時に動作するように設定する。

  • タスクスケジューラ: トリガー: 「新規」

    タスクスケジューラ: トリガー: 「新規」

  • タスクスケジューラ: トリガー: 新しいトリガー

    タスクスケジューラ: トリガー: 新しいトリガー

  • タスクスケジューラ: トリガー: 新しいトリガー: タスクの開始を「ログオン時」に設定

    タスクスケジューラ: トリガー: 新しいトリガー: タスクの開始を「ログオン時」に設定

  • タスクスケジューラ: トリガー: 新しいトリガー

    タスクスケジューラ: トリガー: 新しいトリガー

どのユーザーを対象とするかなどの設定は、用途に応じてオプションを変更していただきたい。

次に、「操作」でwsl.exeを起動するように設定を行う。

  • タスクスケジューラ: 操作: 「新規」

    タスクスケジューラ: 操作: 「新規」

  • タスクスケジューラ: 操作: 新しい操作

    タスクスケジューラ: 操作: 新しい操作

  • タスクスケジューラ: 操作: 新しい操作: プログラム/スクリプトに「C:\WINDOWS\system32\wsl.exe」を設定

    タスクスケジューラ: 操作: 新しい操作: プログラム/スクリプトに「C:\WINDOWS\system32\wsl.exe」を設定

  • タスクスケジューラ: 操作

    タスクスケジューラ: 操作

最後に、「設定」でタスクを停止するまでの時間などに関する設定を必要に応じて変更しておく。

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

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

これで、タスクの追加は完了だ。

  • タスクスケジューラ: タスクの追加完了

    タスクスケジューラ: タスクの追加完了

作成したタスクがリストに追加されており、状態が「準備完了」になっていることを確認したら、いったんサインアウトするかシステムを再起動して動作を確認する。

WindowsにサインインしてUbuntuの起動を確認

設定が適切に行われていれば、Windowsにサインインした直後にUbuntuが起動する。次のようなターミナルアプリケーションが起動してくるはずだ。

  • Windowsサインイン直後に起動してくるUbuntu/WSL

    Windowsサインイン直後に起動してくるUbuntu/WSL

これで、デフォルトの設定よりもUbuntuの応用範囲がちょっと広がった。

注意: 最近のアップデートで挙動変更

これまでは、今回説明した方法で問題なかったのだが、最近この部分に関する挙動が変更され、ターミナルアプリケーションを終了するとそのターミナルにひもづいたWSLの仮想環境が自動的にシャットダウンするようになった。

要は、wsl.exeを利用しているターミナルが一つでもないと、自動的にUbuntuが終了してしまう。これでは背後でサーバやcronが動作していてほしいユーザーとしては、困ったことになる。

今回の変更が永続的なものなのか、ユーザーの反応によってはもとの挙動に戻るのか、ターミナルが終了してもWSL仮想環境が動作し続けるようにオプションが追加されるのか、現状では今後の動きはわからない。

本稿執筆時点で確実なことは、Ubuntuを背後で動かしておきたい場合はwslを実行したターミナルを終了せずに保持しておく必要があるということだ。

Ubuntuを常に背後で動かしておいてシステム開発を行うような使い方をしていた開発者などは、今回の変更の影響を受けるので、Microsoftから何らかの対応があると考えられる。今後の動向を待つ必要がある状況だ。

参考