Иной раз возникает задача быстро запустить какую-нибудь утилиту Linux, а под рукой лишь компьютер с Windows. Захламлять контроллер Wirenboard лишними пакетами и зависимостями не хочется, а ставить Linux второй системой или отдельной виртуальной машиной - слишком накладно.
На выручку приходит подсистема Windows для Linux, известная как WSL. Она позволяет устанавливать и запускать различные дистрибутивы Linux, не покидая сеанс привычной большинству пользователей операционной системы от Microsoft.
Данная статья является вспомогательной по отношению к основной - Wirenboard по SSH: защита соединения с помощью Рутокен ЭЦП, где возможности WSL используются для генерации SSH-ключа на активном ключевом носителе.
Предполагается, что все нижеследующие действия выполняются в среде Windows 11 (в «десятке» тоже должно работать, но проверить не на чем).
Установка подсистемы Windows для Linux
Чтобы принципы работы с консолью не отличались от Wirenboard, в качестве гостевой подсистемы Windows установим родной контроллеру дистрибутив Debian.
Откроем PowerShell или Терминал Windows и выполним команду
wsl --install Debian
Начнётся скачивание и установка дистрибутива, после чего появится надпись «Распространение успешно установлено». Проверить список установленных дистрибутивов можно командой
wsl --list
При этом, единственный дистрибутив будет выведен с отметкой «по умолчанию», что позволяет запускать его короткой командой
wsl
При первом запуске Debian предложит задать имя пользователя и пароль, после чего предоставит доступ к командной строке Linux. Обратите внимание, по умолчанию текущим расположением считается корневой каталог пользователя Windows - любые файлы, создаваемые в процессе исполнения команд Linux, окажутся именно там. Можно перебраться в директорию ниже, выполнив в WSL команду "cd Downloads" - попадём в папку Windows "Загрузки".
Если в системе установлено несколько дистрибутивов, для запуска следует использовать ключ "-d" с указанием названия:
wsl -d Debian
Если установленный дистрибутив Linux больше никогда не понадобится или там что-то сломалось и нужно начать всё с чистого листа, то удалить его можно простой командой
wsl --unregister Debian
Работа с USB-устройствами
Изначально поддержка USB-устройств недоступна в WSL, поэтому нужно установить в Windows специальный проект с открытым исходным кодом, USBIPD-WIN, перейдя на страницу с его релизами и выбрав файл .msi для своей платформы.
Проект позволяет транслировать локально подключенные USB-устройства на другие машины, включая Hyper-V и WSL2.
В нашем случае не требуется настройка файервола для внешних подключений, все операции выполняются в пределах компьютера. Узнать больше о возможностях проекта можно по ссылке (англоязычный текст).
Список подключенных устройств
Откроем рядом окно PowerShell в режиме администратора и введём команду. Будут перечислены все устройства, подключенные к Windows:
usbipd list
Здесь нас интересует идентификатор BUSID, состоящий из двух цифровых значений, разделённых дефисом. По нему мы обращаемся к USB-устройству, производя дальнейшие манипуляции.
Например, в моём случае два одновременно подключенных Рутокен ЭЦП отображаются как "Устройство чтения смарт-карт Microsoft Usbccid (WUDF)" с идентификаторами BUSID "1-7" и "1-9" соответственно. Понять, что есть что, на первый взгляд совершенно невозможно. Остаётся извлечь один из токенов и проверить, какой идентификатор остался.
Значение колонки State, отображаемое как "Not shared", соответствует изначальному состоянию устройства.
Подготовка к подключению устройства в WSL
Чтобы подготовить устройство к подключению в WSL, потребуется перевести его в режим совместного использования. Откроем общий доступ к устройству с BUSID "1-7":
usbipd bind --busid 1-7
Повторно запросив список устройств, мы обнаружим, что в графе State значение поменялось на Shared.
Подключение устройства в WSL
Выполняя следующую команду, мы подключаем устройство к WSL. Перед этим откроем командную строку WSL в отдельном окне, чтобы упрощённая виртуальная машина WSL2 была активна.
Важное замечание: не пытайтесь прокинуть в WSL токен, который используете для входа в Windows, если на вашем компьютере прописано поведение выхода из системы при его извлечении - на время проведения работ эту опцию нужно предусмотрительно отключить, иначе сеанс Windows резко завершится при выполнении следующей команды.
usbipd attach --wsl --busid 1-7
Примечание: пока USB-устройство остаётся подключенным к WSL, Windows не может его использовать.
Работа с устройством в WSL
Сразу после установки дистрибутив не содержит утилит для работы с USB. Чтобы их добавить, в режиме WSL выполним команду
sudo apt-get install usbutils
После чего появится возможность смотреть список подключенных устройств путём выполнения команды
lsusb
Всё готово к работе
Отключение устройства от WSL
После завершения работы с устройством выполнить команду в PowerShell:
usbipd detach --busid 1-7
Чтобы после всех манипуляций закрыть общий доступ к токену и вернуть всё как было, потребуется выполнить следующую команду с правами администратора:
usbipd unbind --busid 1-7