
Я следовал уроку из книги «Пропущенный семестр».здесь(в ссылке указана временная метка). Предполагалось, что led
в /sys/class
. Я использую WSL2 и не могу найти такой каталог. Скрывает ли WSL некоторые расположения /sys/class
? И есть ли способ получить к ним доступ без необходимости двойной загрузки моей машины?
решение1
Ну, возможно,еслиВаша клавиатура USB, но, похоже, даже в этом случае придется приложить некоторые усилия. Если это ноутбук с клавиатурой, которая подключается внутри через не-USB шину, то, насколько мне известно, это невозможно.
Существует две версии WSL, и ни одна из них не позволяет сделать это «из коробки».
На высоком уровне WSL1 "конвертирует/транслирует" системные вызовы Linux в эквивалент Windows. Это своего рода "обратный WINE" в этом смысле. С положительной стороны, этоделаетпозволяют ему напрямую обращаться к некоторому физическому оборудованию, но, как правило, лишь ограниченным образом.
Например,
ip link
в WSL1 будут показаны все доступные сетевые интерфейсыОкна, но вы не можете их поднять или опустить или как-то иначе их контролировать.На WSL1 у меня есть
/sys/class/backlight
(упоминается прямо перед меткой времени в видео), но там нет . И на WSL1brightness
у меня тоже нет ./sys/class/backlight/led
В WSL1 компания Microsoft сосредоточилась на85% системных вызовов Linuxчто позволило бы разработчикам достичь99% их обычной деятельности. К сожалению, сюда не входят некоторые более «специальные» вещи, такие как настройка светодиодов клавиатуры.
WSL2 использует настоящее ядро Linux с небольшими изменениями (внесенными в апстрим, насколько мне известно) для поддержки взаимодействия между Windows и Linux. Вы можете найти репозиторийздесь.
Проблема с реализацией этого в WSL2 заключается в том, что Ubuntu по сути работает как контейнер в наборе пространств имен.внутриWSL2 VM (к которой у вас нет доступа). Внутри этой VM есть ограниченный доступ к физическому оборудованию, включая, конечно, вашу клавиатуру и связанные с ней светодиоды. Сама Windows предоставляет ввод с клавиатуры в Ubuntu через [Консоль / Терминал Windows / WSLg / сторонний X-сервер / и т. д. ]. Ubuntu не видит клавиатурное устройство или светодиоды.
Однако, как упоминает @muru по ссылке в комментариях, WSL2 имеет возможностьподключайтесь к USB-устройствам через USB/IP. По сути, вы устанавливаетеusbipd-winв Windows, расшарить устройство там, и подключиться к нему через
usbip
в Ubuntu. Это все довольно автоматизировано, так что вы обычно можете сделать это с помощью одной команды в Windows/PowerShell, которая затем настраиваетобазаканчивает соединение для вас.К сожалению, даже при этом (у меня уже настроен USB/IP) и при предоставлении общего доступа к моей USB-клавиатуре в Ubuntu, файла
/sys/class/led
.Я верю в этоможетбыть потому, что ядро WSL2 не настроено с
CONFIG_NEW_LEDS
.Вы можете настроить и скомпилировать собственное ядро WSL2, используя эти исходники, но я не могу сказать наверняка, что это позволит вам управлять светодиодами на вашей USB-клавиатуре через USB/IP.
Также (важный) примечание: если вы делитесь клавиатурой через USB/IP, вы можете потерять к ней доступ в Windows, что означает, что у вас больше не будет возможности печатать. Сначала я этого не заметил, так как был подключен через удаленный рабочий стол к системе с помощью своей USB-клавиатуры, но когда я вернулся, я обнаружил, что в какой-то степени "заблокирован". Просто убедитесь, что у вас есть экранная клавиатура Windows (включите "Touch keyboard" в настройках панели задач), чтобы у вас был запасной ввод, с помощью которого впоследствииотсоединятьклавиатура с USB/IP.