在使用Ubuntu或Raspberry Pi时,你可能会遇到USB串行设备(如CH340或CP2102)无法正常工作的情况。这通常是由于一个名为brltty的后台进程(daemon)错误地识别并占用了这些设备。本文将详细介绍brltty是什么,为什么它会干扰USB串行设备,以及如何解决这个问题。
什么是brltty?
brltty是一个为盲人用户提供控制台访问的后台进程,主要用于驱动可刷新的盲文显示器。它通过USB、串行或蓝牙连接盲文设备,使盲人用户能够通过盲文显示器查看屏幕内容。brltty在Linux/Unix系统(如Ubuntu和Raspberry Pi)上运行,通常作为系统启动时的一部分,以提供即时的无障碍访问。
为什么brltty会影响USB串行设备?
brltty通过udev规则来管理设备权限和连接。这些规则位于/lib/udev/rules.d/85-brltty.rules
文件中,可能会错误地将某些USB串行设备(如CH340或CP2102)识别为盲文显示器。这种情况尤其常见于USB转串行转换器,因为它们可能与某些盲文硬件共享相同的供应商ID和产品ID。当brltty错误地占用了这些设备时,你的USB串行设备(如用于Arduino或3D打印机的设备)将无法正常工作,通常表现为/dev/ttyUSB0
设备不可用。
如何解决这个问题?
根据你是否需要使用brltty,有以下几种解决方案:
1. 禁用或卸载brltty
如果你不需要盲文显示器的支持,最简单的解决方案是直接卸载brltty。你可以通过以下命令完成:
sudo apt remove brltty
这种方法简单直接,但如果你或其他人需要盲文显示器的支持,则不推荐使用。
2. 配置brltty以使用特定设备
如果你确实需要使用盲文显示器,可以通过编辑/etc/brltty.conf
文件来指定brltty应该使用的设备。例如,你可以在配置文件中添加以下内容:
braille-device usb:serialNumber=your_serial
这样可以确保brltty只占用指定的设备,而不会干扰其他USB串行设备。
3. 创建自定义udev规则
如果你希望保留brltty的功能,同时确保你的USB串行设备正常工作,可以创建一个自定义的udev规则来排除这些设备。具体步骤如下:
- 创建一个新的udev规则文件,例如
/etc/udev/rules.d/90-exclude-brltty-devices.rules
。 - 在文件中添加以下内容:
# 排除CH340设备
SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="7523", ENV{BRLTTY_BRAILLE_DRIVER}="none"
# 排除CP2102设备
SUBSYSTEM=="usb", ATTR{idVendor}=="10c4", ATTR{idProduct}=="ea60", ENV{BRLTTY_BRAILLE_DRIVER}="none"
- 保存文件后,重新加载udev规则:
sudo udevadm control --reload
或者直接重启系统。
这种方法可以确保brltty和你的USB串行设备共存,而不会互相干扰。
总结
brltty是一个非常有用的工具,为盲人用户提供了重要的无障碍访问功能。然而,它有时会错误地占用USB串行设备,导致这些设备无法正常工作。通过禁用brltty、配置其使用特定设备或创建自定义udev规则,你可以有效地解决这个问题。
如果你不需要盲文显示器的支持,直接卸载brltty是最简单的解决方案。如果你需要保留brltty的功能,创建自定义udev规则则是最灵活和推荐的方法。
希望这篇文章能帮助你解决Ubuntu和Raspberry Pi上brltty与USB串行设备的冲突问题。如果你有其他问题或需要进一步的帮助,欢迎在评论区留言!