WSL:如何设置 tty 设备的组

WSL:如何设置 tty 设备的组

我在 Windows 11 上运行 usbipd 以使 USB 设备能够连接到 WSL。这有效。我可以以 root 身份运行我的串行应用程序,它运行良好。我宁愿不以 root 身份运行我的应用程序。我的用户在组 dialout(和 tty)中。

我无法从根目录更改 FTDI 串行端口的组:

:~$ ls /dev/ttyUS* -Al
crw------- 1 root root 188, 0 May 13 08:07 /dev/ttyUSB0

注意组是root,权限是188。lsusb:

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 001 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

我在 /etc/udev/rules.d/99-usb-serial.rules 中设置了一条 udev 规则:

ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", GROUP:="dialout", MODE:="0666"

我感觉我的 udev 规则不正确,但我四处查看却无法找出问题所在。我测试更改的方法是:

  1. 更改 udev 规则
  2. 关闭 ubuntu 终端,在 windows 中输入 wsl --shutdown
  3. 打开 Ubuntu 终端
  4. 在 Windows 中,输入 usbipd wsl attachment --busid 10-3
    • (设备连接后,窗户发出噪音)
  5. ls /dev 并检查用户和权限
~$ sudo journalctl -b 0 /dev/ttyUSB1
No journal files were found.
-- No entries --

答案1

这是我启用通过 WSL 连接的 USB 设备(通过 RP2040 pico 开发板/dev/ttyACM0或 Wemos D1 mini /dev/ttyUSB0)权限修改的秘诀usbipd(至少适用于 Ubuntu/Debian 发行版)。

默认情况下,Systemd 似乎不会在 WSL 启动时启动。按照以下步骤操作此链接,我修改了一下,/etc/wsl.conf添加了:

[boot]
systemd=true

然后停止 WSL(wsl --shutdown)并重新启动。

通过 usbipd ( ) 连接设备后usbipd wsl attach --busid XXX,相应设备 ( /dev/ttyUSB0) 即可获得group="dialout"+rw权限。

答案2

我能够通过创建文件 /etc/udev/rules.d/99-usb.devices.rules 来获取更新权限的规则

ACTION!="add|change", GOTO="usb_device_rules_end"
SUBSYSTEM!="usb|tty|hidraw", GOTO="usb_device_rules_end"

#ESP32 WOOT Dev Board (Silicon Labs CP210x USB to UART Bridge)
ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="660", GROUP="plugdev", TAG+="uaccess"

LABEL="usb_device_rules_end"

然后我跑了sudo udevadm control --reload

可能是缺少产品 ID?

相关内容