无法使用基于USB转串口芯片的USB dongle

无法使用基于USB转串口芯片的USB dongle

我有 USB Zigbee 加密狗,但无法连接到它。它短暂地出现在 中/dev/ttyUSB0,但很快就消失了。我在控制台中看到以下输出:

$ dmesg --follow
...
[  738.365561] usb 1-10: new full-speed USB device number 8 using xhci_hcd
[  738.607730] usb 1-10: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
[  738.607737] usb 1-10: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[  738.607739] usb 1-10: Product: USB Serial
[  738.619446] ch341 1-10:1.0: ch341-uart converter detected
[  738.633501] usb 1-10: ch341-uart converter now attached to ttyUSB0
[  738.732348] audit: type=1130 audit(1632606446.974:2212): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=brltty-device@sys-devices-pci0000:00-0000:00:01.3-0000:03:00.0-usb1-1\x2d10 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  738.768081] audit: type=1130 audit(1632606447.007:2213): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=brltty@-sys-devices-pci0000:00-0000:00:01.3-0000:03:00.0-usb1-1\x2d10 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  738.776433] usb 1-10: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
[  738.783508] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[  738.783521] ch341 1-10:1.0: device disconnected
[  739.955783] input: BRLTTY 6.4 Linux Screen Driver Keyboard as /devices/virtual/input/input35
...

答案1

这里的问题是 BRLTTY,一个“使用可刷新盲文显示器为盲人提供对 Linux/Unix 控制台(在文本模式下)的访问”的程序。

如果您没瞎,您可以通过两种不同的方式禁用 BRLTTY:

删除 udev 规则

BRLTTY 使用 udev 规则来获取在不成为 root 的情况下干扰 TTY 的权限。您可以通过使用以下命令覆盖发行版附带的规则来禁用这些规则/dev/null

for f in /usr/lib/udev/rules.d/*brltty*.rules; do
    sudo ln -s /dev/null "/etc/udev/rules.d/$(basename "$f")"
done
sudo udevadm control --reload-rules

禁用服务

BRLTTY服务是由该brltty.path服务启动的。通过执行以下操作,可以完全阻止该服务运行:

$ sudo systemctl mask brltty.path
Created symlink /etc/systemd/system/brltty.path → /dev/null.

答案2

那里射击有点太多了。 A侵入性更小的解决方案由用户贡献布莱克岛这个帖子 (“Arduino 无法brltty更新更新”在 ArchLinux 论坛上。

brltty有 的规则idVendor=1a86, idProduct=7523,与我的 Mega 克隆上的 CH340 串行转换器相同。

您可以通过使用lsusb获取设备列表来查看您的设备 ID(拔下您的 Arduino,运行lsusb然后插入您的 Arduino,然后lsusb再次运行以查看出现的设备)。

就我而言:

Bus 003 Device 005: ID 1a86:7523 QinHeng Electronics CH340 serial converter

记下 ID,然后打开 brltty 规则文件:

sudo nano /usr/lib/udev/rules.d/90-brltty-device.rules

搜索文件,直到找到您的 ID 条目:

# Device: 1A86:7523
# Baum [NLS eReader Zoomax (20 cells)]
ENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run"

现在注释掉这一行:

# Device: 1A86:7523
# Baum [NLS eReader Zoomax (20 cells)]
# ENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run"

保存并关闭文件,然后重新启动。

重新启动后,该/dev/ttyUSB0端口在 Arduino IDE 中再次可用。

答案3

这只是为了突出@EvgEnZh 的精彩评论并添加一些内容。 Manjaro 上需要禁用的服务不止一项。对我来说是这样的:

列出服务:

 $ systemctl list-units | grep brltty
  brltty.path                             loaded active running   Default BRLTTY Instance
  [email protected]         loaded active running   BRLTTY Instance: /etc/brltty.conf
  system-brltty.slice                     loaded active active    Slice /system/brltty
  system-brltty\x2ddevice.slice           loaded active active    Slice /system/brltty-device

然后禁用它们:

$ sudo systemctl mask brltty.path
$ sudo systemctl stop brltty.path
$ sudo systemctl mask system-brltty\x2ddevice.slice
$ sudo systemctl stop system-brltty\x2ddevice.slice
$ sudo systemctl mask system-brltty.slice
$ sudo systemctl stop system-brltty.slice
$ sudo systemctl mask [email protected]
$ sudo systemctl stop [email protected]

我不确定是否所有这些都需要被屏蔽,但仅仅屏蔽和停止 brltty.path 对我来说不起作用。

答案4

注释掉 brltty 中的违规行也对我有用

我有相当多的 usbuarts,发现它们全部消失了但仍然可以在以前的 Ubuntu 和 Windows 下工作,真是令人沮丧!

来自 lsmod

Bus 001 Device 019: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Bus 001 Device 021: ID f055:9800 MicroPython Pyboard Virtual Comm Port in FS Mode

为了安全起见,我注释掉了 10c4:ea60 和 10c4:ea80

但老实说我很生气。支持我们的盲人(或聋人,或坐轮椅的)朋友是令人钦佩的。

他们怎么会犯这样的错误。从 3 个不同的制造商那里拿下 usbuarts。 CP210x 显然是一款流行的芯片。

我很想删除 85-brltty.rules

这与那些决定添加内置盲文支持的人的意图完全相反。

相关内容