# Windows Subsystem for Linux
WSL позволяет запускать, разрабатывать и отлаживать Linux программы на Windows. Более того обеспечивается удобная прозрачность между файловыми системами и возможность запускать программы друг-друга.
Существует две реализации WSL:
- WSL1 - транслятор API Linux <-> Windows
- WSL2 - виртуальная машина с полноценным ядром Linux.
Мы будем пользоваться WSL2. По скорости работы WSL2 почти не уступает нативной OS Linux. Более подробные отличия можно посмотреть в интеренете.
Находим в поиске: Включение или отключение компонентов Windows
Включаем галочки:
- Подсистема Windows для Linux
- Платформа виртуальной машины

Перезагружаем.
В терминале включаем WSL2 по умолчанию для всех дистрибутивов.
```
wsl --set-default-version 2
```
Далее из Microsoft Store можно устанавливать дистрибутивы Ubuntu, Debian, и др.
## Конфигурация WSL
Установленные дистрибутивы можно запускать из профиля [Windows Terminal](Windows-Terminal) так:
```
wsl.exe -d
```
Например:
```
wsl.exe -d Ubuntu-20.04
```
Если после настройки .bashrc будет ругаться на переменные locale
то надо сгенерировать локаль ru_RU.UTF-8:
```
sudo dpkg-reconfigure locales
```
## Настройка DNS (для работы с VPN)
При включении VPN наблюдается проблема с переключением на новый DNS. Для ее решения необходимо чтобы WSL использовала DNS независимо от хостовой системы.
В файл /etc/wsl.conf добавляем:
```
[network]
generateResolvConf = false
```
Пишем свои DNS сервера в /etc/resolv.conf
```
sudo rm -rf /etc/resolv.conf
sudo nano /etc/resolv.conf
```
```
nameserver 8.8.8.8
nameserver 8.8.4.4
```
Перезапускаем WSL:
```
wsl --shutdown
```
## Проброс USB устройств в WSL
Устанавливаем `usbipd`
```
winget install usbipd
```
Вводим для получения листа ```usbipd list``` и получаем что то вроде такого:
```
Connected:
BUSID VID:PID DEVICE STATE
1-1 1a86:7523 USB-SERIAL CH340 (COM5) Not shared
```
Биндим нужное устройство:
```
usbipd bind --busid 1-1
```
Лист станет таким:
```
Connected:
BUSID VID:PID DEVICE STATE
1-1 1a86:7523 USB-SERIAL CH340 (COM5) Shared
```
Пробрасываем нужное нам устройство:
```
usbipd attach --wsl --busid 1-1
```
Всё, после этого отваливется COM от винды и он теперь доступен в WSL.
## Работа
Чтобы получить доступ к файловой системе виртуальной машины
надо при запущенной машине зайти в сетевую папку:
```
\\wsl$
```
Либо запустить внутри виртуальной машины:
```
explorer.exe .
```
Если используете VS Code то его можно открыть в нужной папке виртуальной машины:
```
code .
```