Controlando leds em WSL

Controlando leds em WSL

Eu estava seguindo um tutorial de "The Missing Semester"aqui(carimbo de data e hora incluído no link). Era para haver um leddiretório em /sys/class. Estou usando WSL2 e não consegui encontrar nenhum diretório desse tipo. O WSL esconde alguns dos /sys/classlocais? E existe alguma maneira de acessá-los sem precisar inicializar minha máquina?

Responder1

Bem, talvez,seseu teclado é USB, mas parece que mesmo assim será necessário algum esforço. Se for um laptop com teclado conectado internamente por meio de um barramento não USB, então AFAIK, não é possível.

Existem duas versões do WSL, e nenhuma delas permitirá isso “pronto para uso”.

  • Em alto nível, o WSL1 "converte/traduz" syscalls do Linux para o equivalente do Windows. É uma espécie de “WINE reverso” nesse sentido. Do lado positivo, issofazpermitir que ele acesse diretamente algum hardware físico, mas normalmente apenas de maneiras limitadas.

    Por exemplo, ip linkem WSL1 mostrará todas as interfaces de rede disponíveis parajanelas, mas você não pode aumentá-los ou diminuí-los ou realmente ter qualquer outro controle sobre eles.

    No WSL1, eu tenho um /sys/class/backlight(mencionado logo antes do carimbo de data/hora no vídeo), mas não há nenhum brightnesslá. E eu também não tenho um /sys/class/backlight/ledWSL1.

    Na WSL1, a Microsoft se concentrou no85% das chamadas de sistema do Linuxque permitiria aos desenvolvedores realizar99% de suas atividades normais. Isso simplesmente não inclui algumas das coisas mais "esquinas", como configurar os LEDs do teclado, infelizmente.

  • WSL2 usa um kernel Linux real com pequenas alterações (contribuídas pelo upstream, AFAIK) para oferecer suporte à interoperabilidade entre Windows e Linux. Você pode encontrar o repositórioaqui.

    O desafio de fazer isso no WSL2 é que o Ubuntu está essencialmente rodando como um contêiner em um conjunto de namespacesdentroa VM WSL2 (à qual você não tem acesso). Dentro dessa VM, há acesso limitado ao hardware físico, incluindo, é claro, o teclado e os LEDs associados. O próprio Windows fornece a entrada do teclado para o Ubuntu através de [Console/Terminal do Windows/WSLg/servidor X de terceiros/etc.]. O Ubuntu não vê um dispositivo de teclado ou LEDs.

    No entanto, como @muru menciona através de um link nos comentários, o WSL2 tem a capacidade deconectar-se a dispositivos USB através de USB/IP. Essencialmente, você instalausbipd-winno Windows, compartilhe o dispositivo lá e conecte-se a ele via usbipUbuntu. Tudo isso é bastante automatizado, de modo que geralmente você pode fazer isso por meio de um único comando no Windows/PowerShell, que então configuraambosextremidades da conexão para você.

    Infelizmente, mesmo com isso instalado (já tenho USB/IP configurado) e meu teclado USB compartilhado com o Ubuntu, ainda não há arquivo /sys/class/led.

    Eu acredito nissopoderiaser porque o kernel WSL2 não está configurado comCONFIG_NEW_LEDS.

    Você pode configurar e compilar seu próprio kernel WSL2 usando essas fontes, mas não posso dizer com certeza se isso permitirá que você controle os LEDs do seu teclado USB por USB/IP.

Também (importante) observe que, se você compartilhar o teclado por USB/IP, poderá perder o acesso a ele no Windows, o que significa que não terá mais capacidade de digitar. Não percebi isso a princípio, pois estava conectado via Área de Trabalho Remota ao sistema com meu teclado USB, mas quando voltei, me vi "bloqueado" até certo ponto. Apenas certifique-se de ter o teclado na tela do Windows (ative o "Teclado de toque" nas configurações da barra de tarefas) para que você tenha uma entrada alternativa para posteriormentesepararo teclado de USB/IP.

informação relacionada