Вопрос или проблема
Ясно, что запустить WSL при загрузке достаточно сложно и существует множество методов, которые использовались для достижения этой цели.
Ответ на недавний пост (24 декабря 2022 года) указывает на то, что Microsoft сломала это, когда WSL переместился в их магазин. WSL больше не может работать как сервис или запланированная задача, потому что он больше не будет работать в сессии 0. вопрос на superuser о запуске wsl при загрузке windows. Затем второй ответ от @andrus утверждает, что один из методов, который работает (по состоянию на 25 декабря 2022 года), это использовать set object = createobject("wscript.shell") object.run "wsl.exe", 0
, который все еще работает с последней версией WSL и Windows 11.
Предположительно, этот код должен использоваться как скрипт vbs, и его нужно запускать из планировщика задач в соответствии с этой статьей.
Мне не удалось заставить это работать. Я могу запустить wsl, используя скрипт vbs из командной строки (powershell), но он не работает, когда запущен из планировщика задач. На всякий случай, я использую Windows 11 Pro, скачал WSL из магазина Microsoft, установил WSL с помощью “wsl –install Ubuntu” (для установки 22.04), затем сконфигурировал WSL для использования systemd, затем внес необходимые изменения “сетевого моста” как в Windows, так и в WSL, чтобы sshd запускался и машина получала собственный IP#. Всё это работает очень хорошо, когда запускается из командной строки (с использованием wscript или cscript). Но я просто не вижу никаких доказательств того, что WSL действительно запускается, когда скрипт vbs вызывается из планировщика задач. Отслеживание кодов возврата из планировщика задач показывает только коды возврата “0”.
Может кто-нибудь подтвердить, что утверждение от Андруса о том, что решение все еще работает для них, когда они используют современную версию WSL 2, установленную через магазин Microsoft? И, возможно, указать мне на лучшее описание того, как именно это настроить?
wsl –version
возвращает
Версия WSL: 1.0.3.0
Версия ядра: 5.15.79.1
Версия WSLg: 1.0.47
Версия MSRDC: 1.2.3575
Версия Direct3D: 1.606.4
Версия DXCore: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Версия Windows: 10.0.22621.1105
Я использую это, сохранив как .vbs. Работает на последнем WSL2:
command = "wsl.exe"
set shell = CreateObject("WScript.Shell")
shell.Run command,0
Одно из преимуществ использования vbs заключается в том, что он запускается беззвучно, без открытия чего-либо в панели задач или терминал.
В настоящее время, похоже, невозможно запустить WSL как сервис. Этот вопрос сейчас покрыт немного более подробно в этом вопросе на superuser, который предоставляет некоторую документацию на основе обсуждения с командами Microsoft WSL на github. Также не было предложено никаких комментариев, подтверждающих успех с современными установками WSL2.
Вы пробовали
wsl --set-version Ubuntu-20.04 2
Если вы вручную установили WSL до того, как команда wsl –install стала доступна, вам также может потребоваться включить опциональный компонент виртуальной машины, используемый WSL 2, и установить пакет ядра, если вы этого еще не сделали.
А затем вы должны быть в состоянии использовать что-то вроде этого (просто пример)
' terminator.vbs
myCd = "~"
If WScript.Arguments.Length > 0 Then
myCd = "'$(wslpath -u '" & WScript.Arguments(0) & "')'"
End If
args = "bash" & " -c ""cd " & myCd & "; DISPLAY=:0 terminator"""
WScript.CreateObject("Shell.Application").ShellExecute "C:\Windows\System32\wsl.exe", args, "", "open", 0
Ответ или решение
Краткий ответ на вопрос «Может ли WSL (Windows Subsystem for Linux) запускаться при загрузке системы Windows 11 Pro на 30 января 2023 года?» — это «да, но с определенными ограничениями и не без усилий». Давайте разберем этот вопрос подробнее.
Фон ситуации
WSL ранее имел возможность работать как служба, что позволяло ему автоматически запускаться при старте системы. Однако после того, как WSL был переведен в Microsoft Store, эта функциональность претерпела изменения. Основное объяснение заключается в том, что WSL больше не может работать в сессии 0 — сессии, в которой выполняются системные службы. Это привело к тому, что большинство попыток запустить WSL при загрузке через планировщик задач или службы не увенчались успехом.
Подходящие методы запуска WSL при загрузке
Существуют различные обхідные методы, которые позволяют запускать WSL при загрузке системы, хотя их реализация требует дополнительных шагов:
-
Использование .vbs скрипта: Одним из работающих решений является использование VBScript. Код, приведенный ниже, можно сохранить в файл с расширением
.vbs
:command = "wsl.exe" set shell = CreateObject("WScript.Shell") shell.Run command, 0
Этот скрипт запускает WSL в фоновом режиме, не отображая никаких окон. Чтобы обеспечить его выполнение при старте системы, необходимо запланировать задачу в планировщике задач Windows. Настройка задачи должна включать выбор триггера под названием "При запуске компьютера".
-
Настройка планировщика задач: Для настройки задачи в планировщике задач выполните следующие шаги:
- Откройте диспетчер задач (Task Scheduler).
- Создайте новую задачу, выберите параметры:
- Убедитесь, что выбран триггер "При запуске компьютера".
- Убедитесь, что задача настроена на выполнение с наивысшими правами.
- В поле действия укажите путь к вашему .vbs скрипту.
-
Проблемы с запускаемостью: Многие пользователи сталкиваются с тем, что при выполнении .vbs через планировщик задач WSL не запускается, несмотря на то, что скрипт работает из командной строки PowerShell. Это может быть связано с контекстом безопасности или отсутствием необходимых привилегий. Рекомендуется выполнить тестирование, сначала создавая простые сценарии для отладки, чтобы проверить, работает ли обычный запуск через планировщик.
Подтверждение функциональности
Важно отметить, что, по состоянию на декабрь 2022 года и январь 2023 года, описанные решения работают для пользователей, которые установили последнюю версию WSL 2 через Microsoft Store. Однако информации о полностью подтвержденной работоспособности точно так же в рабочей среде довольно ограничено. Убедитесь, что WSL настроен на использование systemd
, если это необходимо, и выполнены все рекомендации по установке (например, правильная версия ядра и компоненты виртуальной машины).
Заключение
В условиях новых ограничений, введенных Microsoft, запуск WSL при загрузке Windows 11 Pro требует терпения и тщательной настройки. Использование .vbs скриптов через планировщик задач является наилучшим обходным методом, хотя некоторые нюансы могут обострять проблемы с запуском. Обязательно тестируйте вашу конфигурацию, чтобы убедиться, что все работает в соответствии с вашими ожиданиями.