Вопрос или проблема
Я пытаюсь выполнить команду lsusb
в wsl2 с Ubuntu 20.04, но ничего не выводится
lsusb -V
выводит –lsusb (usbutils) 012
lsusb -t
выводит –/sys/bus/usb/devices: Не такой файл или каталог
Теперь вы можете использовать usbipd
, чтобы получить доступ к usb-устройству из WSL, смотрите официальную документацию.
У меня все еще есть проблемы, но мы движемся в правильном направлении.
WSL2 – это по сути “облегченная” виртуальная машина Ubuntu на Hyper-V, так что никаких низкоуровневых действий там не поддерживается.
В настоящее время это не поддерживается, хотя проблема отслеживается в репозитории WSL на GitHub.
@estani предоставил обновленный ответ сегодня, который правильный, но “полный” (надеюсь) ответ – это сочетание всех трех ответов, плюс дополнительная информация. Тем не менее, у нас еще нет полного решения для всех сценариев использования.
В настоящее время WSL2 по-прежнему не имеет прямой поддержки USB-аппаратного обеспечения, подключенного к хост-компьютеру. Он также не предоставляет виртуализированной поддержки “проброса”, как это можно найти в многих других продуктах виртуализации.
Как отметил @estani, теперь существует некоторый обходной путь, поскольку Microsoft добавила поддержку USB/IP в ядро WSL2. На самом деле это было возможно и ранее, но требовало сборки собственного ядра с этой функцией.
После того как вы обновите ядро WSL2 с поддержкой USB/IP, вам также необходимо установить usbipd-win
на хост-компьютере Windows. Это проект с открытым исходным кодом третьих сторон. Он не предоставляется Microsoft, но они явно поддерживают его, включая его в качестве рекомендации в официальной документации Microsoft.
usbipd-win
предоставляет тесную интеграцию с WSL, так что выполнение одной команды на хосте Windows (в учетной записи администратора) свяжет USB на обоих концах – как на Windows, так и на WSL. Однако его также можно использовать в традиционном подходе “клиент/сервер” в два этапа.
Одно большое предупреждение заключается в том, что в ядре WSL2 все еще может не быть поддержки для фактического устройства, которое вы подключаете. Например, USB-камеры потребуют дополнительных драйверов (обычно USB Video Class или UVC). Даже тогда, как упомянул @estani, существуют неразрешенные проблемы. Смотрите следующие вопросы:
- Stack Overflow: WSL – веб-камера USB: Невозможно открыть камеру по индексу
- Ask Ubuntu: Запись видео с веб-камеры с помощью OpenCV в WSL2
- Ask Ubuntu: Камера не работает в Cheese в WSL2
Большая часть моего исследования по этому вопросу находится в первом вопросе на Stack Overflow, но если мы решим это один раз, это надеюсь исправит проблемы с OpenCV, Cheese, ffmpeg и т.д.
Когда я пытаюсь запустить lsusb -t
и lsusb -v
в WSL2 на экземпляре Ubuntu 20.04 LTS, я получаю следующий вывод:
user@PC:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=vhci_hcd/8p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=vhci_hcd/8p, 480M
|__ Port 1: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 1: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
user@PC:~$ lsusb -v
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 3
bMaxPacketSize0 9
idVendor 0x1d6b Linux Foundation
idProduct 0x0003 3.0 root hub
bcdDevice 5.15
iManufacturer 3
iProduct 2
iSerial 1
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
< вывод обрезан >
Я использую пользовательское ядро Linux, которое я собрал с помощью скрипта install.sh по адресу https://github.com/randomwons/WSL2-USB-Camera.git. Это пользовательское ядро 5.15.167.4-microsoft-standard-WSL2
.
Ответ или решение
Поддерживает ли WSL2 команду lsusb?
WSL2 (Windows Subsystem for Linux 2) — это более совершенная версия WSL, предоставляющая более полную виртуализацию Linux в среде Windows. Однако, несмотря на свои преимущества, WSL2 сталкивается с ограничениями, связанными с доступом к USB-устройствам, что напрямую влияет на выполнение команды lsusb
.
Описание работы lsusb в WSL2
Команда lsusb
используется для отображения информации о USB-устройствах, подключенных к системе. На системах Linux она зависит от доступа к системным файлам, связанным с USB-устройствами, находящимися в /sys/bus/usb/devices
. В вашем случае выполнение команды lsusb -t
возвращает ошибку: No such file or directory
. Это указывает на отсутствие доступа к файловой системе USB в WSL2.
Что можно сделать для решения проблемы
На данный момент WSL2 не предоставляет встроенную поддержку для USB-устройств. Однако недавно появилась возможность использовать пакет usbip
, который позволяет пользователям использовать USB-устройства через WSL. Это было встроено в ядро WSL2, что позволяет с некоторыми ограничениями подключать USB-устройства.
Шаги для подключения USB-устройств через usbip:
-
Обновление ядра WSL2: Убедитесь, что вы используете последнюю версию ядра WSL2 с поддержкой USB/IP. Обновление ядра можно выполнить через официальные средства Windows.
-
Установка usbipd-win: Необходимо установить
usbipd-win
на хост-систему Windows. Это сторонний проект с открытым исходным кодом, который обеспечивает интеграцию между Windows и WSL. -
Подключение устройств: После установки
usbipd-win
, вы можете использовать его команды для подключения USB-устройств к WSL. Один из них позволяет привязывать USB-устройства к обеим средам (Windows и WSL), что обеспечит доступ к ним в вашем окружении Ubuntu 20.04.
Ограничения
Стоит отметить, что некоторым устройствам может требоваться дополнительная поддержка драйверов, таких как USB Video Class (UVC) для веб-камер. Это может ограничить функциональность, и могут возникнуть проблемы, такие как невозможность получения доступа к оборудованию, подключенному к WSL2. На данный момент существуют открытые вопросы и проблемы, связанные с использованием USB-устройств, и разработчикам придется решать их постадийно.
Вывод
Таким образом, WSL2 не поддерживает lsusb
в полном объеме, что препятствует возможностям работы с USB-устройствами напрямую в этой среде. Однако за счет использования дополнительных инструментов, таких как usbipd-win
, пользователи могут добиться некоторого уровня функциональности, хотя и с ограничениями. Следите за обновлениями и новыми релизами WSL, так как Microsoft активно развивает эту платформу, и возможно, в будущем мы увидим более полную поддержку USB-устройств и lsusb
.