我有 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
这与那些决定添加内置盲文支持的人的意图完全相反。