Глава 5. Настройка дистрибутивов WSL

Раз у вас имеется установленным дистро WSL, имеются некоторые настройки, уникальные для WSL, которые вы не найдёте в стандартом дистрибутиве Linux, а также уникальные способы их продолжения.Эти настройки подразделяются на установки “для дистро”, которые выполняют регулировки в каждой индивидуальной установке дистро и “глобальные” настройки WSL, которые воздействуют на все дистро WSL в отдельном устройстве.

Установка настроек для дистрибутива

Установки для дистрибутива настраиваются в /etc/wsl.conf для каждого соответствующего дистро. Этот файл считывается в “boot” самим WSL. Некоторые издатели дистро публикуют образы для WSL включая некий файл wsl.conf с настройками по умолчанию. Однако если он не присутствует в вашем дистро, тогда вы можете вручную создать или изменить этот файл когда вы желаете перекрыть настройки по умолчанию. Настройки по умолчанию представлены здесь (Рисунок 5-1).

 

Рисунок 5-1


/etc/wsl.conf с общими установками по умолчанию

Настройки автоматического монтирования

Настройки automount содержат возможность монтирования устройств Windows, например, диска C под /mnt/c для предоставления возможности взаимодействия через файловую систему.

Включение

Автоматическое монтирование устанавливается Булевым значением “enabled” равное истине в /etc/wsl.conf:


[automount]
enabled = true
		

Значением по умолчанию является true для автоматического монтирования устройств Windows. Если вы желаете изолировать свой экземпляр WSL от файловой системы Windows, вам следует установить его в значение ложь:


[automount]
enabled = false
		

Корень

Папка root для монтирования устройств Windows устанавливается в /etc/wsl.conf при помощи строкового значения “root”:


[automount]
enabled = true
root = /mnt/
		

Значением по умолчанию является true. Если вы желаете смонтировать свои устройства Windows в другой папке, вы можете здесь определить где именно. Например, для монтирования их в /windrives/, установите


[automount]
enabled = true
root = /windrives/
		

Имейте в виду, что такая корневая папка должна существовать; если это не так, вам придётся создать её:


> sudo mkdir /windrives
		

Закладка файловой системы

/etc/fstab это традиционный файл настроек файловой системы Linux. Вариант загружать его или нет при запуска WSL может быть установлен в /windrives/ при помощи Булева значения “mountFsTab”:


[automount]
enabled = true
mountFsTab = true
		

Значением по умолчанию является true.

Вы можете настраивать /etc/fstab (Рисунок 5-2) для выполнения более расширенных функций монтирования при запуске WSL. Они могут включать виртуальные диски и совместные сетевые файловые ресурсы.

 

Рисунок 5-2


/etc/fstab по умолчанию в Ubuntu

Если вы не желаете чтобы WSL выполнял синтаксический разбор этого файла, например, с целью большей изоляции вашей среды WSL, вы можете установить это значение ложным:


[automount]
enabled = true
mountFsTab = false
		

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

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

DrvFs выступает той файловой системой, которая позволяет WSL монтировать устройства Windows. Это делает для WSL возможным выполнять доступ к файлам в файловой системе Windows и обрабатывать полномочия.

Такие параметры устанавливаются в /etc/wsl.conf при помощи строкового значения “options”, например:


[automount]
enabled = true
mountFsTab = true
options = "metadata,umask=22,fmask=11"
		

Замечание относительно того, как работают в WSL файловые полномочия:

В файловой системе Linux из WSL, установленные файловые полномочия следуют обычным стандартам Linux при настройках на чтение, запись и исполнение для соответствующего пользователя, группы и прочего. При доступе к файловой системе Windows из WSL, существующие файловые полномочия интерпретируются из NTFS в соответствующие общие полномочия Linux. Новые создаваемые в WSL файлы и папки поверх имеющейся файловой системы Windows будут наследовать полномочия своей родительской папки.

Это можно изменить, тем не менее, при помощи параметра метаданных.

Метаданные

Определяя параметр метаданных в параметрах монтирования, возможно считывать и сохранять полномочия файловой системы Linux, отличающиеся от полномочий NTFS в расширенных атрибутах файлов в файлах и папках NTFS. Это полезно когда вы желаете ограничить доступ чтобы превратить некие файл или папку доступными только на чтение из WSL без полномочий на изменение в Windows. Новые создаваемые из WSL файлы и папки в файловой системе Windows будут наследовать те полномочия, которые сохранены через umask в WSL.

По умолчанию WSL будет монтировать файловую систему Windows при помощи UID и GID установленного по умолчанию пользователя дистро, обычно 1000 и 1000, соответственно.

Мы можем достичь того же самого результата выполняя такую команду:


> sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=11
		

Если вы знакомы с командой монтирования Linux, вы способны распознать некоторые из этих настроек.

Дополнительно к изменению сведений о том как обрабатываются полномочия систем NTFS и Linux, также имеется возможность того, как обрабатывать чувствительность к регистру между Linux и Windows.

Чувствительность к регистру

Одним из самых больших отличий, которые способны обнаружить пользователи между Linux и Терминалом Windows состоит в обработке чувствительности к регистру файлов.

В файловой системе Linux, FILE.TXT и file.txt рассматривались бы как отдельные файлы, которые способны сосуществовать в одном и том же каталоге. Файловые системы Linux, тем самым, рассматриваются как чувствительные к регистру.

В файловых системах Windows, по умолчанию, Windows не позволил бы вам создать файл с названием file.txt в неком каталоге с уже имеющимся файлом, также именуемым FILE.TXT , потому что они бы рассматривались как один и тот же файл; значение регистра в имени файла отбрасывается. По умолчанию в Windows файловые системы будут, таким образом, рассматриваться как не чувствительные к регистру. Windows 10, как потомок Windows NT, которая имела целью до некоторой степени совместимость с POSIX, обладал естественной способностью трактовать файлы как чувствительные к регистру, как и Linux; это просто отключено в угоду обратной совместимости с приложениями Windows 98 и прочими инструментами, которые исходят из ожидания от Windows нечувствительности к регистру.

Эту настройку можно изменить глобально, для всего Windows через установку в Реестре Windows, однако имейте в виду, что изменение этой настройки может иметь результатом необычное поведение приложений сторонних разработчиков, включая повреждения и утрату данных. Итак, как WSL обрабатывает чувствительность к регистру при монтировании папок Windows? Он применяет иной механизм, который обходит значение ключа Реестра, позволяя дистро WSL получать доступ к файлам, которые отличаются только регистром и, тем самым, вести себя стандартным способом “Linux”.

Однако, при работе с файловым доступом как из WSL, так и из Windws, это всё ещё способно вызывать проблемы, в особенности для программ Windows, выполняющих доступ к чувствительным для регистра файлам в подвергшихся изменениям из WSL файлам. Вместо того, чтобы принуждать пользователей изменять значение упомянутого выше глобального ключа Реестра, потенциально разрушающего сторонние приложения, команда WSL ввела чувствительность к регистру для каталогов в Windows 10 сборки 17107.

В совместно используемой между программами WSL и Windows папке, например, C:\WSLworkspace и /mnt/c/WSLworkspace, где со стороны программ WSL ожидается чувствительность к регистру, но могут быть проблемы для программ Windows, имеется возможность включения чувствительности к регистру только для C:\WSLworkspace. Такая функциональность встроена в fsutil.exe.

Для проверки состояния такой чувствительности к регистру для каталога из Windows, откройте PowerShell и исполните (Рисунок 5-3)


PS C:\> fsutil.exe file queryCaseSensitiveInfo <path>
		

Например, в каталоге нашего примера C:\WSLworkspace


PS C:\> fsutil.exe file queryCaseSensitiveInfo C:\WSLworkspace\
		
 

Рисунок 5-3


Проверка каждого каталога на чувствительность к регистру в Windows при помощи fsutil

Для включения чувствительности к регистру для некого каталога Windows, откройте PowerShell в качестве Администратора и выполните (Рисунок 5-4)


PS C:\> fsutil.exe file setCaseSensitiveInfo <path> enable
		

Например, в каталоге нашего примера C:\WSLworkspace


PS C:\> fsutil.exe file setCaseSensitiveInfo C:\WSLworkspace\ enable
		
 

Рисунок 5-4


Включение чувствительности к регистру каждого каталога в Windows при помощи fsutil

Для отключения чувствительности к регистру для некого каталога Windows, откройте PowerShell в качестве Администратора и выполните (Рисунок 5-5)


PS C:\> fsutil.exe file setCaseSensitiveInfo <path> disable
		

Например, в каталоге нашего примера C:\WSLworkspace


PS C:\> fsutil.exe file setCaseSensitiveInfo C:\WSLworkspace\ disable
		
 

Рисунок 5-5


Отключение чувствительности к регистру каждого каталога в Windows при помощи fsutil

Применение чувствительности к регистру для каталога в Windows при помощи fsutil не наследуется, что означает, что чувствительность к регистру всякого нового или имеющегося подкаталога не будет изменяться имеющейся настройкой в их родительском каталоге.

Чувствительностью к регистру также можно управлять в параметрах автоматического монтирования, настраивая её установками “case”, например:


[automount]
enabled = true
mountFsTab = true
options = "metadata,case=off,umask=22,fmask=11"
		

Настройка case=dir установлена по умолчанию (default) и новые каталоги, создаваемые из WSL в файловых системах Windows будут чувствительными к регистру.

Настройка case=off означает, что новый каталог, создаваемые из WSL в файловых системах Windows будут не чувствительными к регистру и следовать традиционному методу Windows.

На практике имеется очень мало обстоятельств, при которых вы будете создавать большое число каталогов из WSL в файловых системах Windows, которым требуется отсутствие чувствительности к регистру для работы с программами Windows, однако такая потребность может возникать.

[Замечание]Замечание

В WSL 1, в Windows сборок 17692+, также имеется возможность изменения из WSL чувствительности к регистру для каталога Windows. При такой реализации чувствительность к регистру наследовалась. Тем не менее, такая функциональная возможность признана устаревшей в WSL2. Проверьте значение состояния чувствительности к регистру для каталога при помощи


> getfattr -n system.wsl_case_sensitive <path>
		

Для включения чувствительности к регистру в каталоге Windows:


> setfattr -n system.wsl_case_sensitive -v 1 <path>
		

Для отключения чувствительности к регистру в каталоге Windows:


> setfattr -n system.wsl_case_sensitive -v 0 <path>
		

Изменение UID и GID монтируемого устройства

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

Вы можете сделать это устанавливая значения для следующих параметров в соответствующей строке параметров:

uid-

уникальный номер пользователя, связанный с каждым пользователем в устройстве Linux. root будет обладать UID 0. UID 1-500 обычно зарезервированы Linux для связанных с системой учётных записей. Дистро будут создавать новых пользователей начиная с UID 1000, однако некоторые создают новых пользователей начиная с UID 500. UID хранятся в файле /etc/passwd.

gid-

уникальный номер группы, связываемый с группами пользователей в неком устройстве Linux. root будет обладать GID 0, а GID 1-100 будут зарезервированы Linux для относящихся к системе групп. Обычные учётные записи пользователей создаются в GID 100 или 1000. GID хранятся в файле /etc/groups. Обратите внимание, что у пользователя будет некий первичный GID, но зачастую и несколько вторичных GID, поскольку нет ничего необычного в том, что пользователь принадлежит множеству групп.

Для проверки UID и первичного вашего пользователя (Рисунок 5-6) воспользуйтесь

 

Рисунок 5-6


Проверка ваших uid и gid при помощи id

Для проверки UID и GID другого пользователя (Рисунок 5-7) примените


> id <username>
		

Например:


> id root
		
 

Рисунок 5-7


Проверка uid и gid root при помощи id

Изменение значений UID и GID в уже смонтированном устройстве окажет воздействие на доступность к имеющимся файлам и папкам.

Также имеется возможность персонализации устанавливаемых полномочий на вновь создаваемые файлы и папки через установку пользовательской маски создания файла. Значение пользовательской маски создания файла это значение шаблона для полномочий в новых файлах и папках. Основная цель такой маски состоит в отсечении прочь избыточных полномочий и установки безопасного набора полномочий новым файлам. Значение маски это сокращённая форма более длинного восьмеричного формата Linux для полномочий, которым вы могли пользоваться ранее.

Основа полномочий файла Linux

Каждый файл в Linux обладает тремя классами связанных с ним полномочий; это полномочия для

User-

По умолчанию это тот пользователь, кто создал данный файл, если он не был изменён

Group-

Пользователи в некой группе с назначенным доступом к этому файлу

Other-

Все прочие пользователи, которые не являются владельцем или не в той группе, которая связана с этим файлом

Такие полномочия могут составляться из некой комбинации следующих полномочий для каждого класса:

Read

или r

Write

или w

Execute

или x

No permissions

или -

Эти полномочия могут выражаться в символьном или цифровом виде

Символьный вид

В символьной форме полномочия представляются как строка из девяти символов, составленных из r, w, x или -.

Например:


rwxr-xr--
 	   

rwx-

Эти три символа относятся к полномочиям владельца. Здесь мы наблюдаем rwx. Владелец этого файла обладает полномочиями на его чтение, запись и исполнение.

r-x-

Следующие три символа относятся к полномочиям группы. Здесь мы наблюдаем r-x. Пользователи в его группе обладают полномочиями на его чтение и исполнение.

r---

Последние три символа относятся к полномочиям всех прочих пользователей. Здесь мы наблюдаем r--. Прочие пользователи могут только считывать этот файл.

rwxr-xr-- суммируются из

rwx

полномочия для владельца

r-x

полномочия для участников группы

r--

полномочия для всех прочих пользователей

Проверка полномочий файлов

Вы можете обнаружить полномочия файла в символьном виде при помощи команды ls -l (Рисунок 5-8).

 

Рисунок 5-8


Проверка полномочий файлов

Приведёнными выше полномочиями являются


rwxr-xr--
 	   

rw--

Полномочия для владельца, “user1”

r---

Для участников назначенной ему группы “wslusers”

r---

для всех прочих пользователей

Дополнительные подробности до и после нашей символьной нотации также могут сообщить нам

добавляемый в конец d-

Это каталог

<user>-

Владеющий этим файлом пользователь

<group>-

Группа, которой назначен этот пользователь

4096-

Размер файла или папки. В случае папки это не размер содержимого папки; это содержимое метаданных данной папки, минимум которых составляет для ext4 4096

<date>-

Дата создания файла или папки

<time>-

Время создания файла или папки

Прочие полезные сведения здесь могут содержать

l-

Указывает на символическую ссылку

b-

Указывает на блочное устройство

c-

Указывает на последовательное устройство

Цифровая форма

Полномочия также могут представляться в численном виде, с применением восьмеричной нотации. Чтение, запись и исполнение представляются в одном из восьми вариантов:

0-

Нет полномочий или ---

1-

Только исполнение или --x

2-

Только запись или -w-

3-

Запись и исполнение или -wx

4-

Только чтение или r--

5-

Чтение и исполнение или r-x

6-

Чтение и запись или rw-

-

Чтение, запись и исполнение или rwx

Наши полномочия из предыдущего примера, rwxr-xr--, превращаются в

rwx-

Для владельца = 7

r-x-

Для участников группы владельца = 5

r---

Для прочих пользователей = 4

или просто

= 754

Во многих случаях такое восьмеричное представление будет обладать цифровым префиксом. Вы можете видеть 754, выражаемое как 0754. Этот префикс содержит настройки для битов suid, sgid и “sticky”, которые являются расширенными полномочиями Linux, которые выходят за рамки данной книги, однако предоставляют вам возможность, помимо прочего, препятствовать записи в файл или его удалению даже когда пользователь обладает полномочиями, но не владелец этого файла.

Маска файла

Пользовательская маска создания файла, или umask, способствует определению некого стандарта для полномочий во вновь создаваемых файлах и папках.

По умолчанию, Linux назначает всем новым файлам восьмеричные полномочия 666, а всем новым папкам восьмеричные полномочия 777.

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

umask это побитовая маска; её биты вычитаются из “маскируемых” полномочий Linux.

Пример:

Для Ubuntu umask по умолчанию это 022.

В этом случае новый файл будет вначале создаваться с восьмеричными полномочиями 666 и затем вычитается “маска” 022, что приводит в результате к 644.

Все новые файлы будут создаваться как 644 или

6-

rw- для его владельца

4-

r-- для участников группы владельца

4-

r-- для прочих пользователей

umask-

Стандартная umask, например, 022, как для новых файлов, так и для новых папок

fmask-

Значение umask только для новых файлов

dmask-

Значение umask только для новых папок

Fmask и dmask существуют для установки различных настроек umask под файлы и папки по отдельности.

Как уже обсуждалось ранее, файлы начинают с 666 и должны вычитать umask. Папки начинают с 777 и должны вычитать umask.

Umask допускает для вас вычитать один и тот же уровень из обоих, например 022. Однако применяя fmask или dmask вы можете устанавливать маски по отдельности, отличая дельту от значений стандартных уровней полномочий 777/666, причём как для файлов, так и для папок.

Изменение umask и fmask монтируемого устройства

В нашем приведённом выше примере


[automount]
enabled = true
mountFsTab = true
options = "metadata,umask=22,fmask=11"
		

новые файлы и папки создавались бы с полномочиями, начиная с 666 и 777 соответственно.

Далее применение umask 022 приводило бы в результате к 644 для файлов и 755 для папок.

Однако, применяя fmask 011, которое перекрыло бы umask для новых файлов, вы бы получали для новых файлов полномочия 666 минус 011 или 655.

Новые папки создавались бы с системной umask 022, приводящей в результате 777 минус 022 или 755 для новых каталогов.

Вы также можете переопределить и это при помощи dmask по своему выбору.

Вы можете пожелать регулировать различные макси для файлов и папок, когда вы желаете яростно ограничивать доступ на чтение в прочие каталоги (высокое значение dmask), однако предоставлять широкий доступ в собственные каталоги пользователя (низкое значение fmask).

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

Обратите внимание на то, что прочие настройки монтирования которые могли бы обычно настраиваться дополнительными флагами при помощи mount здесь не могут вставляться. Для дополнительной тонкой настройки вам следует редактировать /etc/fstab. Ознакомьтесь с разделом Закладка файловой системы относительно установок, обеспечивающих чтение /etc/fstab.

Монтирование из прочих дистрибутивов


[automount]
crossDistro = true
		

Монтирование между дистро включает некое пространство, /mnt/wsl, в котором любая монтируемая папка всяким дистро видна всем прочим дистро.

Значение по умолчанию (default) равно true.

Это поезно для совместного использования файлов между дистро.

Например, при включённом crossDistro в обоих дистро, вы можете монтировать некий файл из своего дистро WSL Ubuntu для доступа к нему из вашего дистро Fedora Remix (Рисунок 5-9).

 

Рисунок 5-9


Создание папки, вставка файла и его монтирование в /mnt/wsl для совместного применения в дистро

В Ubuntu WSL:


> mkdir ~/ubuntufolder
> touch ~/ubuntufolder/helloworld
> mkdir /mnt/wsl/sharedfolder
> sudo mount --bind ${HOME}/sharedfolder /mnt/wsl/sharedfolder
		

Затем в Fedora Remix для WSL вы можете просматривать такой файл (Рисунок 5-10)


> ls /mnt/wsl/sharedfolder/
		
 

Рисунок 5-10


Просмотр файла в совместной папке из кросс- монтирования дистро

И наоборот, в некой корпоративной среде вы можете пожелать отключит монтирование между дистр для изолирования ваших дистро WSL с целью безопасности.

ldconfig

Библиотеки, которые являются коллекциями общих задач и подпрограмм, на которые полагаются приложения, являются “помещёнными” в некий кэш из какого- то набора путей, предписанного установками ldconfig.

Первичный файл настроек ldconfig располагается в /etc/ld.so.conf, однако в большинстве дистро этот файл напрямую отсылается ldconfig для загрузки дополнительных путей из множества файлов настроек, расположенных в /etc/ld.so.conf.d/.

/etc/ld.so.conf будет указывать на /etc/ld.so.conf.d/*, который, к примеру, будет содержать /etc/ld.so.conf.d/libc.conf, который содержит значение пути для пути /usr/local/lib библиотеки GNU C (Рисунок 5-11). Файлы настроек из /etc/ld.so.conf.d/* загружаются в алфавитном порядке.

 

Рисунок 5-11


Изучение того как etc/ld/so.conf загружает все файлы *.conf в /etc/ld.so.conf.d/, которые указывают на пути библиотек, такие как /usr/local/lib

Начиная со сборки 20150 Windows 10 WSL вставляет некий дополнительный файл в /etc/ld.so.conf.d/ с названием ld.wsl.conf, который добавляет для ldconfig соответствующий путь к библиотекам в /usr/lib/wsl/lib (Рисунок 5-12).

Это делает возможным доступ к особенным для WSL библиотекам под CUDA, DirectML и прочие вычислительные функции GPU (которые располагаются в %SystemRoot%\system32\lxss\lib).

 

Рисунок 5-12


ld.wsl.conf в /etc/ld.so.conf.d/ добавляет /usr/lib/wsl/lib в список каталогов для кэширования ldconfig

Обычно вы будете желать чтобы WSL загружала эти каталоги для включения вычислений GPU. Настройки их загрузки устанавливаются в качестве установок автоматического монтирования:


[automount]
ldconfig = true
		

Значением по умолчанию является true.

Тем не менее, могут встречаться ситуации, при которых вы пожелаете отключать вычислительные функциональные возможности GPU, возможно, для сопоставления эталонного тестирования производительности с включённым GPU и без него, либо вы пожелаете подключать прочие драйверы. В таком случае вы можете предписать


[automount]
ldconfig = false
		

для отключения вставки ld.wsl.conf. Обратите внимание, что после отключения ld.wsl.conf вы пожелаете переработать свой кэш ldconfig при помощи


> sudo ldconfig
		

Сетевая среда

Выработка файла Hosts

Файл hosts, и в Windows, и в Linux, это файл, который позволяет вам вручную настраивать разрешение доменных имён в вашем устройстве.

Когда ваш компьютер выполняет разрешение доменных имён, таких как ubuntu.com, он вначале проверяет именно это файл hosts, затем локальный кэш последних разрешённых доменов и потом, наконец, испускает запрос в ваш сетевой сервер DNS.

Если вы желаете по- простому достигать прочие устройства в своей сетевой среде по их названиям хостов, но не желаете настраивать свой собственный сервер DNS, вы можете вручную настраивать имена хостов в своём файле hosts.

Когда вы собираете и тестирует некий вебсайт локально, вы можете изменить свой файл hosts с тем, чтобы он привязывал ваш тестируемый файл обратно к вашему сайту проверки в вашем устройстве, а не к живому вебсайту в Интернете.

По умолчанию, WSL скопирует ваш файл hosts Windows из C:\Windows\System32\drivers\etc\hosts через файл hosts дистро WSL в /etc/hosts при каждом запуске. Да, файлы hosts Windows и Linux совместимы.

Тот параметр, который указывает необходимость копирования файла hosts Windows (Рисунок 5-13) в ваш дистро WSL (Рисунок 5-14). устанавливается в /etc/wsl.conf при помощи Булева значения “generateHosts”:


[automount]
generateHosts = true
		

Значением по умолчанию является true.

Вы можете пожелать установку выработки hosts в значение ложь когда вы намерены сопровождать отдельный файл hosts для своего собственного дистро WSL. Обратите внимание, что хотя добавления в файл hosts вашего дистро WSL (Рисунок 5-14) будет копироваться в WSL, дополнения к файлу hosts вашего дистро WSL не будут синхронизироваться обратно в Windows. Такой файл hosts дистро WSL будет перезаписываться из файла hosts Windows при каждом новом запуске.

 

Рисунок 5-13


Просмотр содержимого hosts Windows

 

Рисунок 5-14


Просмотр содержимого /etc/hosts в Ubuntu

Выработка файла DNS

resolv.conf, располагающийся в /etc/resolv.conf, это файл, который позволяет вам вручную настраивать где ваше устройство будет искать доменные имена для их разрешения, которые не расположены в файле hosts или в локальном кэше DNS:


[automount]
generateHosts = true
generateResolvConf = true
		

Значением по умолчанию является true.

Как и ваш файл hosts, resolv.conf автоматически вырабатывается для вашего дистро из WSL из ваших сетевых настроек Windows.

Сама сетевая среда WSL управляется Сетевой службой хоста (Host Networking Service), службой Windows, причём в неком виртуальном адаптере Ethernet, подобно прочим сетевым адаптерам Hyper-V.

Значение IP адреса сервера имён будет тем же самым, что и IP адрес самого виртуального сетевого адаптера. Например, сопоставьте значение IP адреса в /etc/resolv.conf (Рисунок 5-15). с IPv4 адресом самого адаптера (Рисунок 5-16).

 

Рисунок 5-15


Просмотр содержимого /etc/resolv.conf в Ubuntu

 

Рисунок 5-16


Просмотр IP адреса виртуального сетевого адаптера WSL

При ограниченных обстоятельствах вы можете пожелать перекрыть его; одним из примеров может быть ситуация, при которой вы могли бы быть подключены к Windows через некий VPN и вам требовалось бы вручную настраивать сервер DNS.

Hostname

Традиционно ваш экземпляр WSL наследует название устройства своего устройства Windows. WSL переписывает /etc/hostname в вашем дистро именем хоста вашего Windows при “запуске” , как переписывается и /etc/host.

В Windows 10 сборки 20180 и старше, также имеется возможность настройки этого поведения и установки для вашего экземпляра WSL имени хоста вручную:


[network]
generateHosts = true
generateResolvConf = true
hostname = Biswa96
		

Значением по умолчанию является наследование имени устройства из вашего устройства Windows Тем не менее, для определённых современных сетевых функций персонализация имени хоста вашего экземпляра WSL может оказаться полезной. Изменяя имя хоста вашего дистроWSL (или множества дистро), вы можете получать обособленные имена хостов для каждого из дистро в Windows.

Возможность взаимодействия

Включение

Возможность взаимодействия WSL включает в свой состав способность запуска программ Windows из Linux (Рисунок 5-17), программ Linux из Windows и совместного использования переменных среды. Такие настройки возможности взаимодействия из wsl.conf позволяют вам включать и отключать способность запуска программ Windows из Linux. Начиная со сборки 20190 Windows также можно запускать из WSL прикладные приложения Windows по псевдонимам исполнения, так как это имеет место в прикладных приложения UWP. Обратитесь к Главе 9, Максимизируем возможность взаимодействия Windows за дополнительными советами относительно того как получать максимум из этой уникальной функциональной возможности WSL.


[interop]
enabled = true
		

Значением по умолчанию является true.

 

Рисунок 5-17


Запуск Notepad из WSL

Вы можете пожелать отключать это для ограничения своего дистро WSL, кога у вас имеются установленными в Windows git и python, это порой может вызывать проблемы, когда у вас также установлены git и python в WSL.

Существует возможность включения и отключения этой функциональной возможности в единственном сеансе без изменения wsl.conf. Для временного отключения программ Windows в Linux выполните


> echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop
		

Для повторного включения Windows в Linux исполните


> echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
		

Обратите внимание что эта настройка не сохраняется между сеансами. Для непрерывного отключения возможности взаимодействия WSL вам потребуется внести изменения в ваш файл wsl.conf.

Добавление в конец путей Windows

Другой функциональной возможностью взаимодействия WSL является добавление в конец переменной пути вашего дистро WSL переменной пути Windows. Это добавляет все каталоги из переменной пути вашего Windows в имеющиеся переменные пути вашего дистро Linux, превращая все исполняемые файлы из обеих платформ доступными из WSL (Рисунок 5-18).


[interop]
enabled = true
appendWindowsPath = true
		
 

Рисунок 5-18


Просмотр переменной $PATH variable в WSL при помощи appendWindowsPath

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

WSLENV

Хотя это и не относится к данному конфигурационному файлу, сейчас уместно упомянуть WSLENV. WSLENV это особая метапеременная среды, которая имеется и в Windows, и в WSL. WSLENV определяет какие переменные среды совместно используются между Windows и WSL. WSLENV содержит список этих прочих переменных, разделяемых двоеточием в WSL или точкой с запятой в Windows с флагами для того каждая из этих переменных среды должна интерпретироваться.

Переменные среды Windows можно отыскать в “Edit the system environment variables” (Изменение системных переменных среды) из меню Windows Start (Пуск) (Рисунок 5-19).

 

Рисунок 5-19


Переменные среды Windows

Переменные среды Linux можно просмотреть при помощи команды printenv (Рисунок 5-20).

 

Рисунок 5-20


Вывод printenv WSL, отображающий переменные среды Linux

Почему совместное использование переменных среды между Windows и WSL полезно? Та же самая причина, по которой в целом полезна WSL, вы получает всё самое лучшее от Linux и Windows. Вы можете в конце концов прийти к обладанию проектом, в котором вы желаете работать и с Linux, и с Windows. Допустим, мы хотели бы совместно применять путь, установим PATHTOPROJECT из WSL в Windows.

Мы определяем PATHTOPROJECT в WSL:


> export PATHTOPROJECT=~/project
		

Затем добавляем PATHTOPROJECT в WSLENV:


> export WSLENV=PATHTOPROJECT/p
		

Теперь переключаемся в Windows и считываем это обратно:


> cmd.exe
> set PATHTOPROJECT
		

Windows будет обладать PATHTOPROJECT в качестве переменной среды (Рисунок 5-21).

[Совет]Совет

Когда вы настраиваете DYSPLAY для указания WSL на X сервер Windows, вы можете затем экспортировать эту переменную DYSPLAY во все прочие дистро WSL при помощи


> export WSLENV=DISPLAY
		
 

Рисунок 5-21


Применение WSLENV для совместного использования переменных между Windows и WSL

Флаги WSLENV

Что такое /p? Это четыре флага для обработки переменных между Windows и WSL:

/p-

Транслирует путь между путями Windows и WSL, как это было продемонстрировано ранее

/l-

Указывает список путей

Допустим, у вас есть различные пути, хранимые как список в WSL:


> PROJECTLIST=/opt/project1:/opt/project2/
		

Чтобы сделать это доступным в Windows мы бы


> export WSLENV=PROJECTLIST/l
		
/u-

Разделяет значение переменной только из Windows в WSL

/w-

Разделяет значение переменной только из WSL в Windows

[Совет]Совет

Переменные WSL распространяются только при исполнении команд Windows из сеанса WSL при взаимодействии. Аналогичным образом, обратное происходит лишь при пересечении границы в обратном направлении - будь то открытие нового терминала или выполнение команды при помощи wsl.exe.

Что если у вас уже имеется нечто, определённое в WSLENV и вы не желаете переписывать это, а вместо того просто хотите добавить это в конец? В WSL вы бы экспортировали такую переменную, добавляя один из сетевых флагов, упомянутых ранее, по мере необходимости, а затем добавляя в конец имеющуюся $WSLENV следующим образом:


> export WSLENV=PROJECTLIST/l:$WSLENV
		

Пользователь по умолчанию

Когда WSL “запускается”, вы будете работать в качестве пользователя по умолчанию.

Вот как можно настроить пользователя по умолчанию:


[user]
default = root
		

Значением по умолчанию является root, однако большинство дистро, включая Ubuntu, создадут нового пользователя с полномочиями sudo при установке из Microsoft Store и установят его пользователем по умолчанию.

Запуск

Говоря о запуске, начиная со сборки 21286 в Windows 10 в WSL была добавлена возможность запуска команд начального запуска:


[boot]
command = <string>
		

Например:


[boot]
command = apt update &apmp;&apmp; apt upgrade -y
		

Это совершенно новая функциональная возможность, что касается момента написания книги, раскрывает новый потенциал для запуска задач во время “запуска” WSL. Она способна заменить неуклюжие сценарии, первоначально хранившиеся в ~/.bashrc или /etc/profile. Эти команды исполняются от имени root, допуская изменения верхнего уровня в вашей среде. Эти команды запускаются только при запуске WSL вручную или из Терминала Windows, поэтому они не заменяют возможность применения службы Windows для запуска задач WSL в фоновом режиме или автоматизации задач в WSL при помощи Планировщика задач Windows, но она дополняет их.