我在 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 规则不正确,但我四处查看却无法找出问题所在。我测试更改的方法是:
- 更改 udev 规则
- 关闭 ubuntu 终端,在 windows 中输入 wsl --shutdown
- 打开 Ubuntu 终端
- 在 Windows 中,输入 usbipd wsl attachment --busid 10-3
- (设备连接后,窗户发出噪音)
- 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?