在 WSL 中控制 LED

在 WSL 中控制 LED

我正在学习“失踪的学期”的教程这里led(链接中包含时间戳)。中应该有一个目录/sys/class。我正在使用 WSL2,但找不到这样的目录。 WSL 是否隐藏了某些/sys/class位置? 有没有办法在不双启动我的机器的情况下访问这些位置?

答案1

也许会,如果你的键盘是 USB 的,但即使这样,看起来也需要一些努力。如果是笔记本电脑,键盘通过非 USB 总线进行内部连接,那么据我所知,这是不可能的。

WSL 有两个版本,但没有一个版本允许这种“开箱即用”的做法。

  • 从高层次来看,WSL1 将 Linux 系统调用“转换/翻译”为 Windows 系统调用。从这个意义上说,它有点像“反向 WINE”。从积极的一面来看,这允许它直接访问某些物理硬件,但通常只能以有限的方式。

    例如,ip link在 WSL1 中将显示所有可用的网络接口视窗,但您无法调高或调低它们,也无法对它们进行任何其他控制。

    在 WSL1 上,我确实有一个/sys/class/backlight(视频中时间戳之前提到),但那里没有。而且我在 WSL1 上也brightness没有。/sys/class/backlight/led

    在 WSL1 中,微软专注于85% 的 Linux 系统调用这将允许开发人员实现99% 的正常活动。遗憾的是,这并不包括一些更“特殊”的事情,例如设置键盘 LED。

  • WSL2 确实使用了真正的 Linux 内核,并进行了微小的更改(据我所知,已回馈上游)以支持 Windows 和 Linux 之间的互操作。您可以找到 repo这里

    在 WSL2 下执行此操作的挑战在于,Ubuntu 本质上是作为一组命名空间中的容器运行的里面WSL2 VM(您无权访问)。在该 VM 内部,对物理硬件的访问受到限制,当然包括您的键盘及其相关的 LED。Windows 本身通过 [控制台/Windows 终端/WSLg/第三方 X 服务器/等] 向 Ubuntu 提供键盘输入。Ubuntu 看不到键盘设备或 LED。

    然而,正如 @muru 在评论中通过链接提到的那样,WSL2 确实有能力通过 USB/IP 连接 USB 设备. 本质上,你安装usbipd-win在 Windows 中,在那里共享设备,然后通过usbipUbuntu 连接到它。这一切都是相当自动化的,因此您通常可以通过 Windows/PowerShell 中的单个命令来完成,然后设置两个都连接结束。

    不幸的是,即使有了这个(我已经配置了 USB/IP),并且我的 USB 键盘共享到 Ubuntu,仍然没有/sys/class/led

    我相信这一点可能是因为 WSL2 内核没有配置CONFIG_NEW_LEDS

    您可以使用这些源配置和编译您自己的 WSL2 内核,但我不能肯定地告诉您这是否允许您通过 USB/IP 控制 USB 键盘上的 LED。

还 (重要的) 附注:如果您通过 USB/IP 共享键盘,您可能会在 Windows 下失去对键盘的访问权限,这意味着您无法再打字。我一开始没有注意到这一点,因为我使用 USB 键盘通过远程桌面连接到系统,但当我返回时,我发现自己在某种程度上被“锁定”了。只需确保您有 Windows 屏幕键盘(在任务栏设置中启用“触摸键盘”),这样您就可以使用后备输入,随后分离通过 USB/IP 连接键盘。

相关内容