Подключаем USB-устройства в подсистеме Windows для Linux (WSL 2) в Windows 11

2021-11-11 11784 комментарии
Рассмотрим инструкцию по подключению USB-устройства в подсистеме Windows для Linux (WSL 2) операционной системы Windows 11

Подсистема Windows для Linux представляет собой сложный слой совместимости и у подсистемы есть некоторые ограничения. Первоначальная реализация даже не использовала полноценное ядро Linux, поэтому некоторые приложения столкнулись с проблемами совместимости. Версия WSL 2 внесла множество улучшений, но кое-чего по-прежнему не хватало: поддержки подключения физических USB-устройств.

Если вы являетесь активным пользователем подсистемы Windows для Linux и хотите получить доступ к USB-устройствам прямо из операционной системы Linux, работающей под WSL, то вам будет приятно узнать, что в этом направлении достигнут значительный прогресс. Благодаря вкладу Microsoft в открытый исходный код проекта usbipd-win, был разработан сквозной доступ к USB-устройствам в WSL.

Пример использования USB-устройств в подсистеме WSL 2 в Windows 11

Теперь пользователи могут выполнять такие задачи, как перепрошивка Android-устройств в подсистеме Windows для Linux.

Пример использования инструмента ADB / Fastboot

Что такое usbipd-win?

Проект usbipd-win направлен на создание решения для совместного использования подключенных локально USB-устройств к другим машинам, включая гостевые системы Hyper-V и WSL2. Однако официальное ядро WSL 2 Linux раньше не поддерживало протокол USB/IP, что требовало от пользователей самостоятельной сборки ядра.

Начиная с версии ядра Linux 5.10.60.1, необходимые параметры настраиваются «из коробки», поэтому ручная перекомпиляция не требуется. Microsoft также внесла в проект интерфейс командной строки, чтобы обеспечить совместное использование USB-устройств в Windows и легко подключить его из WSL.

Установка WSL 2 в Windows 11

Установим подсистему Windows для Linux в Windows 11. В качестве операционной системы будем использовать Ubuntu 20.04 LTS, которая предлагается по умолчанию,  а также установим графическое приложение - файловый менеджер Nautilus.

Установка WSL 2 в Windows 11:

  • Откройте Командную строку от имени Администратора (cmd.exe) или Терминал Windows (Администратор), нажав правой кнопкой мыши по меню Пуск и выбрав соответствующее приложение.

  • Выполните команду для установки дистрибутива Ubuntu 20.04 LTS:
wsl --install -d Ubuntu

  • Перезагрузите систему.
  • После перезагрузки откроется командная строка для продолжения установки и настройки системы. Укажите имя пользователя и пароль. В случае возникновения ошибки закройте командную строку и откройте приложение Ubuntu из меню Пуск.
  • Вы можете перейти в командную строку для работы с Ubuntu, открыв приложение Ubuntu из меню Пуск, либо открыв Терминал Windows и введя туда команду.
ubuntu

Установка графических приложений в WSL 2 в Windows 11

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

  • Обновим систему следующими двумя командами:
sudo apt update && sudo apt dist-upgrade -y
  • Установим файловый менеджер Nautilus:
sudo apt install nautilus -y

Установленный Nautilus доступен в списке установленных программ меню Пуск Windows 11. Файловый менеджер отображается в виде названия Files.

Подключаем USB-устройства в подсистеме Windows для Linux

Перед тем как мы начнем процедуру подключения USB-устройств в WSL 2 в Windows 11, нужно убедится, что у вас установлены все обновления WSL 2.

Для обновления подсистемы WSL выполните следующие команды:

wsl --shutdown

wsl --update

  • Перейдите в командную строку Ubuntu. Мне удобнее работать в Терминале Windows, введя команду для перехода к управлению системой Ubuntu).
ubuntu

Версия ядра Linux должна быть не ниже версии 5.10.60.1, в нашем случае подходящая версия – 5.10.60.1. Версию ядра можно узнать при обновлении подсистемы WSL, как показано выше, либо следующей командой из командной строки Ubuntu:

uname -a
  • Перейдите в репозиторий проекта usbipd-win на GitHub. Скачайте и установите последнюю версию приложения. Последняя версия usbipd-win поддерживает автоматическую установку драйверов благодаря сертифицированным драйверам Windows Hardware Compatibility Program. Программа также поддерживает сборки инсайдерской программы тестирования Windows 11, канала Dev.
  • Помимо страницы релизов программы usbipd-win на GitHub, вы можете установить и обновить приложение с помощью интерфейса командной строки Windows Package Manager (также известного как winget):
winget install --interactive --exact dorssel.usbipd-win
  • После установки программы usbipd-win перейдите в командную строку Ubuntu и выполните следующую команду:
sudo apt install linux-tools-5.4.0-77-generic hwdata
  • Теперь нам нужно изменить параметры sudo, чтобы пользователь root мог найти команды usbip. Для этого нам нужно отредактировать файл /etc/sudoers. Выполняем следующие команды:
sudo visudo  /etc/sudoers

В строке, в которой присутствует secure_path добавляем в начало запись

/usr/lib/linux-tools/5.4.0-77-generic:

Отредактированная строка будет выглядеть следующим образом:

Defaults        secure_path="/usr/lib/linux-tools/5.4.0-77-generic:/usr/local/sbin:..."

  • Комбинацией клавиш CTRL+O сохраните изменения и комбинацией CTRL+X заройте редактор.
  • Откройте командную строку от Администратора (cmd.exe) и введите следующую команду, чтобы вывести список всех USB-устройств, подключенных к Windows:
usbipd wsl list

  • Запишите значение BUSID USB-устройства, которое вы хотите подключить к WSL. Затем выполните следующую команду, чтобы начать процесс подключения. WSL предложит вам ввести пароль для запуска команды sudo:
usbipd wsl attach --busid <busid>

Например, в данном случае мы подключаем USB-флешку. Её значение BUSID 2-3.

  • Теперь откройте новый экземпляр WSL 2 (из меню Пуск или с помощью Терминала Windows) и запустите команду , для отображения подключенных USB-устройств:
lsusb

  • Флешка подключена к подсистеме WSL 2.
  • Отсоединить USB-устройство можно следующей командой:
usbipd wsl detach --busid <busid>

Где <busid> равно значению BUSID подключенного устройства.

© . Анатолий Гусляков. По материалам xda-developers
Комментарии и отзывы

Нашли ошибку?

Новое на сайте