Поделиться через


Настройка дополнительных параметров в WSL

Файлы wsl.conf и .wslconfig используются для настройки расширенных параметров в WSL, которые будут применены при запускевиртуальной машины WSL. wsl.conf используется для применения настроек для каждого дистрибутива WSL, а .wslconfig — для применения глобальных настроек к WSL. Дополнительные сведения о различиях см. ниже.

Аспект .wslconfig wsl.conf
Размах Общие параметры, которые применяются ко всем WSL Параметры только для дистрибутивов WSL
Настраивает Включение функций в WSL, параметры для виртуальной машины, включающей WSL 2 (ОЗУ, ядро для загрузки, количество ЦП и т. д.) Параметры дистрибутива в WSL, такие как параметры загрузки, автоматическое подключение DrvFs, сетевое взаимодействие, взаимодействие с системой Windows, использование systemd и пользователь по умолчанию
Местоположение %UserProfile%\.wslconfigза пределами дистрибутива WSL /etc/wsl.confвнутри дистрибутива WSL

В настоящее время все параметры .wslconfig применяются только к дистрибутивам WSL 2. Узнайте, как проверить, какую версию WSL вы используете.

Правило восьми секунд для изменений конфигурации

Необходимо ждать, пока подсистема, на котором работает дистрибутив Linux, полностью перестает работать и перезапускается, чтобы обновления параметров конфигурации отображались. Обычно это занимает около 8 секунд после закрытия ВСЕХ экземпляров оболочки распространения.

Если вы запускаете дистрибутив (например, Ubuntu), измените файл конфигурации, закройте дистрибутив, а затем повторно запустите его, вы можете предположить, что изменения конфигурации сразу же вступили в силу. В данный момент это не так, поскольку подсистема все еще может работать. Необходимо дождаться остановки подсистемы, прежде чем перезапускать, чтобы дать достаточно времени для получения изменений. Вы можете проверить, работает ли ваш дистрибутив Linux после его закрытия, воспользовавшись PowerShell и выполнив команду: wsl --list --running Если дистрибутивы не выполняются, вы получите ответ :"Нет запущенных дистрибутивов". Теперь можно перезапустить дистрибутив, чтобы увидеть примененные обновления конфигурации.

Команда wsl --shutdown — это быстрый путь к перезапуску дистрибутивов WSL 2, но он завершит работу всех запущенных дистрибутивов, поэтому используйте её с осторожностью. Вы также можете использовать wsl --terminate <distroName> для завершения определённого дистрибутива, который работает прямо сейчас.

wsl.conf

Настройте локальные параметры для каждого дистрибутива Linux, работающего в WSL 1 или WSL 2, используя wsl.conf.

  • Хранится в каталоге дистрибутива в /etc виде Unix-файла.
  • Используется для настройки параметров для каждой дистрибуции. Параметры, настроенные в этом файле, будут применены только к конкретному дистрибутиву Linux, содержаму каталог, в котором хранится этот файл.
  • Можно использовать для дистрибутивов, работающих на любой версии WSL 1 или WSL 2.
  • Чтобы перейти в каталог /etc для установленного дистрибутива, используйте командную строку дистрибутива вместе с cd /, чтобы получить доступ к корневому каталогу, затем используйте ls, чтобы перечислить файлы, или explorer.exe ., чтобы просмотреть их в Проводнике Windows. Путь к каталогу должен выглядеть примерно так: /etc/wsl.conf.

Примечание.

Настройка параметров дистрибутива с помощью файла wsl.conf доступна только в билдах Windows 17093 и более поздних версиях.

Параметры конфигурации для wsl.conf

Файл wsl.conf настраивает параметры на основе распределения. (Для глобальной конфигурации дистрибутивов WSL2 см. .wslconfig).

Файл wsl.conf поддерживает четыре раздела: automount, network, interop, и user. (Модель схожа с соглашениями файлов .ini: ключи объявляются в разделе, как это сделано в файлах .gitconfig.) Сведения о том, где хранить файл wsl.conf, см. в разделе wsl.conf.

системная поддержка

Многие дистрибутивы Linux используют "systemd" по умолчанию (включая Ubuntu), и WSL недавно добавил поддержку этого менеджера системы/служб, чтобы WSL был еще более похож на использование любимых дистрибутивов Linux на физическом компьютере. Для включения systemd вам потребуется версия 0.67.6+ WSL. Проверьте версию WSL с помощью команды wsl --version. Если вам нужно обновление, вы можете получить последнюю версию WSL в Microsoft Store. Дополнительные сведения см. в объявлении блога.

Чтобы включить systemd, откройте wsl.conf файл в текстовом редакторе, используя sudo с правами администратора, и добавьте следующие строки в /etc/wsl.conf:

[boot]
systemd=true

Затем необходимо закрыть дистрибутив WSL с помощью wsl.exe --shutdown из PowerShell, чтобы перезапустить экземпляры WSL. После перезапуска дистрибутива systemd должен быть запущен. Вы можете подтвердить с помощью команды: systemctl list-unit-files --type=service, которая будет отображать состояние ваших служб.

Параметры автомонтирования

Метка раздела wsl.conf: [automount]

ключ значение по умолчанию заметки
enabled булевый true вызывает автоматическое монтирование фиксированных дисков (т. е. , ) с DrvFs под . false означает, что диски не будут автоматически подключены, но вы все равно можете подключить их вручную или через fstab.
mountFsTab булевый true true настраивает /etc/fstab для обработки при запуске WSL. /etc/fstab — это файл, в котором можно объявлять другие файловые системы, например общий ресурс SMB. Поэтому вы можете автоматически подключать эти файловые системы в WSL при запуске.
root строка /mnt/ Задает каталог, в который будут автоматически подключены несъемные диски. По умолчанию это значение имеет /mnt/значение, поэтому диск C-системы Windows подключен к /mnt/c/. Если вы измените /mnt/ на /windir/, вы должны ожидать, что ваш фиксированный диск C будет подключен к /windir/c.
options Список значений, перечисленных через запятую, например, uid, gid и т. д., см. ниже в разделе "Параметры автоматического монтирования". пустая строка Значения параметров автоматического подключения перечислены ниже и добавляются в строку параметров подключения drvFs по умолчанию. Можно указать только параметры, относящиеся к DrvFs.

Параметры автоматического подключения применяются в качестве параметров подключения для всех автоматически подключенных дисков. Чтобы изменить параметры только для определенного диска, используйте вместо этого файл /etc/fstab. Параметры, которые утилита mount обычно интерпретирует и преобразует во флаг, не поддерживаются. Если вы хотите явно указать эти параметры, необходимо перечислить каждый диск, для которого вы хотите сделать это, в /etc/fstab.

Параметры автоматического монтирования

Задание различных опций монтирования для дисков Windows (DrvFs) позволяет контролировать расчёт разрешений для файлов Windows. Имеются следующие варианты:

Ключ. Описание По умолчанию
uid ИД пользователя, используемый для владельца всех файлов. Идентификатор пользователя дистрибутива WSL по умолчанию (при первой установке по умолчанию используется значение 1000).
gid Идентификатор группы, используемый для владельца всех файлов. Идентификатор группы по умолчанию дистрибутива WSL (при первой установке по умолчанию используется значение 1000)
umask Восьмеричная маска разрешений, которые нужно исключить для всех файлов и каталогов. 022
fmask Восьмеричная маска разрешений, которые необходимо исключить для всех файлов. 000
dmask Восьмеричная маска разрешений для исключения во всех каталогах. 000
metadata Добавление метаданных в файлы Windows для поддержки разрешений системы Linux disabled
case Определяет каталоги, которые рассматриваются как конфиденциальные регистры, и указывает, будут ли новые каталоги, созданные с помощью WSL, иметь набор флагов. Подробные сведения о параметрах см. в разделе учёта регистра. Параметры включают off, dir, или force. off

По умолчанию WSL задает uid и gid на значение пользователя по умолчанию. Например, в Ubuntu пользователь по умолчанию имеет uid=1000 и gid=1000. Если это значение используется для указания другого параметра gid или uid, значение пользователя по умолчанию будет перезаписано. В противном случае всегда будет добавляться значение по умолчанию.

Маска режима создания пользовательских файлов (umask) задает разрешение для вновь созданных файлов. Значение по умолчанию — 022, только вы можете записывать данные, но любой пользователь может считывать данные. Значения можно изменить, чтобы отразить различные параметры разрешений. Например, umask=077 изменяет разрешения, чтобы сделать их полностью приватными, ни один пользователь не может читать или записывать данные. Чтобы дополнительно указать разрешение, можно также использовать fmask (файлы) и dmask (каталоги).

Примечание.

Маски разрешений обрабатываются с помощью логической операции ИЛИ перед тем, как применяться к файлам или каталогам.

Что такое DrvFs?

DrvFs — это подключаемый модуль файловой системы к WSL, который был разработан для поддержки взаимодействия между WSL и файловой системой Windows. DrvFs позволяет WSL подключать диски с поддерживаемыми файловыми системами в каталоге /mnt, например /mnt/c, /mnt/d и т. д. Дополнительные сведения об указании поведения регистрозависимости по умолчанию при подключении дисков или каталогов Windows или Linux см. на странице о регистрозависимости.

Параметры сети

Метка раздела wsl.conf: [network]

ключ значение по умолчанию заметки
generateHosts булевый true true настраивает WSL для генерации /etc/hosts. Файл hosts содержит статическую карту имен узлов, соответствующих IP-адресам.
generateResolvConf булевый true true настраивает WSL на генерацию /etc/resolv.conf. resolv.conf содержит список DNS, которые способны разрешить заданное имя узла в его IP-адрес.
hostname строка Имя узла Windows Задает имя узла, используемое для распределения WSL.

Параметры интероперабельности

Метка раздела wsl.conf: [interop]

Эти параметры доступны в сборках Insider начиная со сборки 17713.

ключ значение по умолчанию примечания
enabled булевый true Установка этого ключа определяет, будет ли WSL поддерживать запуск процессов Windows.
appendWindowsPath булево true Задание этого ключа определяет, будет ли WSL добавлять элементы пути Windows в переменную среды $PATH.

Параметры пользователя

Метка раздела wsl.conf: [user]

Эти параметры доступны в сборке 18980 и более поздних версиях.

ключ значение по умолчанию примечания
default строка Исходное имя пользователя, созданное при первом запуске Установка этого ключа указывает, под каким пользователем будет выполняться сеанс при первом запуске WSL.

Параметры загрузки

Параметр загрузки доступен только в Windows 11 и Server 2022.

Метка раздела wsl.conf: [boot]

ключ значение по умолчанию примечания
command строка "" Строка команды, которую вы хотите выполнить при запуске экземпляра WSL. Эта команда выполняется от имени корневого пользователя. например: service docker start.

Пример файла wsl.conf

В приведенном ниже wsl.conf примере файла демонстрируются некоторые из доступных параметров конфигурации. В этом примере дистрибутив — Ubuntu-20.04, а путь к файлу — \\wsl.localhost\Ubuntu-20.04\etc\wsl.conf.

# Automatically mount Windows drive when the distribution is launched
[automount]

# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true

# Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c. 
root = /

# DrvFs-specific options can be specified.  
options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"

# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
mountFsTab = true

# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]
hostname = DemoHost
generateHosts = false
generateResolvConf = false

# Set whether WSL supports interop processes like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false

# Set the user when launching a distribution with WSL.
[user]
default = DemoUser

# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start

.wslconfig

Настройте глобальные параметры с помощью .wslconfig во всех установленных дистрибутивах, работающих в WSL.

  • WSLCONFIG-файл по умолчанию не существует. Его необходимо создать и сохранить в каталоге , чтобы применить эти параметры конфигурации.
  • Используется для глобальной настройки параметров во всех установленных дистрибутивах Linux, работающих в качестве версии WSL 2.
  • Можно использовать только для дистрибутивов, запускаемых WSL 2. Дистрибутивы, работающие как WSL 1, не будут затронуты этой конфигурацией, так как они не работают в качестве виртуальной машины.
  • Чтобы перейти к %UserProfile% каталогу, в PowerShell используйте cd ~ для доступа к домашнему каталогу (который обычно является вашим профилем пользователя, C:\Users\<UserName>), или откройте Проводник Windows и введите %UserProfile% в адресной строке. Путь к каталогу должен выглядеть примерно так: C:\Users\<UserName>\.wslconfig.

WSL обнаруживает существование этих файлов, считывает содержимое и автоматически применяет параметры конфигурации при каждом запуске WSL. Если файл отсутствует или поврежден (неправильное форматирование разметки), WSL продолжит запускаться как обычный без применения параметров конфигурации.

Параметры конфигурации для .wslconfig

WSLconfig-файл настраивает параметры глобально для всех дистрибутивов Linux, работающих с WSL 2. (Для конфигураций, зависящих от дистрибутива, см. wsl.conf).

Дополнительную информацию о месте хранения файла .wslconfig см. в разделе .wslconfig.

Примечание.

Настройка глобальных параметров с .wslconfig доступна только для дистрибутивов, работающих в среде WSL 2 в версиях Windows 19041 и более поздних. Помните, что вам может понадобиться выполнить wsl --shutdown, чтобы завершить работу ВМ WSL 2, а затем перезапустить экземпляр WSL, чтобы эти изменения вступили в силу.

Этот файл может содержать следующие параметры, влияющие на виртуальную машину, которая управляет любым дистрибутивом WSL 2:

Основные параметры WSL

Метка раздела .wslconfig: [wsl2]

ключ значение по умолчанию заметки
kernel путь Встроенное ядро Майкрософт, предоставленное в папке "Входящие" Абсолютный путь Windows к пользовательскому ядру Linux.
kernelModules путь Абсолютный путь к пользовательскому модулю ядра Linux VHD.
memory размер 50 % общей памяти в Windows Сколько памяти выделить виртуальной машине WSL 2.
processors число Одинаковое количество логических процессоров в Windows Сколько логических процессоров назначается виртуальной машине WSL 2.
localhostForwarding boolean true Логическое значение, указывающее, должны ли порты, привязанные к подстановочным знакам или localhost в виртуальной машине WSL 2, быть доступными для подключения с хоста через localhost:port.
kernelCommandLine строка Пустой Дополнительные аргументы командной строки ядра.
safeMode boolean false Запустите WSL в "Безопасном режиме", который отключает множество функций и предназначен для восстановления дистрибутивов, которые находятся в плохих состояниях. Доступно только для Windows 11 и WSL версии 0.66.2+.
swap размер 25 % объема памяти в Windows округляется до ближайшего ГБ Сколько дополнительного места страничной памяти нужно добавить в виртуальную машину WSL 2? Укажите 0, если обменный файл не требуется. Хранилище буфера — это дисковый ОЗУ, используемый при превышении требований к памяти на аппаратном устройстве.
swapFile путь %USERPROFILE%\AppData\Local\Temp\swap.vhdx Абсолютный путь Windows к виртуальному жесткому диску подкачки.
pageReporting boolean true Параметр по умолчанию true позволяет Windows восстановить неиспользуемую память, выделенную виртуальной машине WSL 2.
guiApplications булевый true Логическое значение для включения или отключения поддержки приложений GUI (WSLg) в WSL.
debugConsole* булево false Логическое значение для включения окна вывода консоли, которое отображает содержимое dmesg при запуске экземпляра дистрибутива WSL 2. Доступно только для Windows 11.
nestedVirtualization* boolean true Булево значение для включения или отключения вложенной виртуализации, позволяющее другим вложенным виртуальным машинам работать внутри WSL 2. Доступно только для Windows 11.
vmIdleTimeout* число 60000 Количество миллисекунда, которое виртуальная машина неактивна, прежде чем завершить работу. Доступно только для Windows 11.
dnsProxy булевый true Применимо только к режиму сети = NAT. Логическое значение для информирования WSL о настройке DNS-сервера в Linux для NAT на узле. Параметр false будет зеркально отображать DNS-серверы из Windows в Linux.
networkingMode** строка NAT Если значение mirrored, это включает зеркальный сетевой режим. По умолчанию или нераспознанные строки приводят к использованию сети NAT.
firewall** boolean true Задание этого значения равным true позволяет правилам брандмауэра Windows, а также правилам, специфичным для трафика Hyper-V, фильтровать сетевой трафик WSL.
dnsTunneling** boolean true Изменение того, как dns-запросы проксиируются из WSL в Windows
autoProxy* boolean true Принуждает WSL использовать информацию о прокси-сервере Windows
defaultVhdSize размер 1099511627776 (1TB) Задайте размер виртуального жесткого диска (VHD), в который хранится файловая система дистрибутива Linux (например, Ubuntu). Можно использовать для ограничения максимального размера файловой системы распространения.

Записи со path значением должны быть путями Windows с экранируемыми обратными косыми чертами, например: C:\\Temp\\myCustomKernel

Записи со значением size должны содержать размер, за которым следует единица измерения, например 8GB или 512MB.

Записи с * после типа значения доступны только в Windows 11.

Записи с ** после типа значения требуют Windows 11 версии 22H2 или более поздней.

Экспериментальные параметры

Эти параметры являются предварительными версиями экспериментальных функций, которые мы стремимся сделать по умолчанию в будущем.

Метка раздела .wslconfig: [experimental]

Имя настройки Значение По умолчанию Примечания.
autoMemoryReclaim строка dropCache Автоматически освобождает кэшированную память после обнаружения простоя использования ЦП. Установите gradual для медленного выпуска и dropcache для мгновенного выпуска кэшированной памяти.
sparseVhd bool false Если задано значение true, все вновь созданные виртуальные жесткие диски (VHD) будут автоматически формироваться с разреженным форматом.
bestEffortDnsParsing** bool false Применимо только в том случае, если wsl2.dnsTunneling установлено в true. Если задано значение true, Windows извлекает вопрос из DNS-запроса и пытается устранить его, игнорируя неизвестные записи.
dnsTunnelingIpAddress** строка 10.255.255.254 Применимо только в том случае, если wsl2.dnsTunneling установлено в true. Указывает сервер имен, который будет настроен в файле Linux resolv.conf при включении туннелирования DNS.
initialAutoProxyTimeout* строка 1000 Применимо только в том случае, если wsl2.autoProxy установлено значение true. Указывает, сколько времени (в миллисекундах) WSL ожидает получения сведений о прокси-сервере HTTP при запуске контейнера WSL. Если параметры прокси-сервера определены после этого времени, экземпляр WSL должен быть перезапущен для использования полученных параметров прокси-сервера.
ignoredPorts** строка null Применимо только в том случае, если wsl2.networkingMode установлен в mirrored. Указывает, к каким портам могут привязаться приложения Linux, даже если этот порт используется в Windows. Это позволяет приложениям прослушивать порт только в Linux, поэтому эти приложения не блокируются даже в тех случаях, когда этот порт используется для других целей в Windows. Например, WSL разрешает привязку к порту 53 в Linux для Docker Desktop, так как он прослушивает только запросы из контейнера Linux. Должен быть отформатирован в списке, разделенном запятыми, например: 3000,9000,9090
hostAddressLoopback** bool false Применимо только в том случае, если wsl2.networkingMode задано значение mirrored. Когда установлено значение True, контейнер сможет подключиться к узлу, или узел - к контейнеру, по IP-адресу, назначенному узлу. Этот 127.0.0.1 адрес обратной петли всегда может использоваться, и эта опция позволяет также использовать все дополнительно назначенные локальные IP-адреса. Поддерживаются только адреса IPv4, назначенные узлу.

Записи, у которых тип значения помечен *, доступны только в Windows 11.

Элементы с ** после типа значения требуют Windows версии 22H2 или более поздней.

Пример Wslconfig-файла

Файл-пример .wslconfig ниже демонстрирует некоторые доступные параметры конфигурации. В этом примере путь к файлу — C:\Users\<UserName>\.wslconfig.

# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB 

# Sets the VM to use two virtual processors
processors=2

# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
kernel=C:\\temp\\myCustomKernel

# Specify the modules VHD for the custum Linux kernel to use with your installed distros.
kernelModules=C:\\temp\\modules.vhdx

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB

# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=C:\\temp\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn on default connection to bind WSL 2 localhost to Windows localhost. Setting is ignored when networkingMode=mirrored
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true

# Enable experimental features
[experimental]
sparseVhd=true

Дополнительные ресурсы