如何禁用未在lsusb中显示(识别为UART)的Mac Mini内置蓝牙适配器
如何禁用未在lsusb中显示(识别为UART)的Mac Mini内置蓝牙适配器
我太懂你想换掉Mac Mini那拉胯内置蓝牙的心情了!之前我也折腾过一模一样的情况——内置蓝牙既不在lsusb也不在lspci里,查了一堆资料都没头绪,后来终于摸出几个靠谱的永久禁用方法,分享给你:
方法一:用systemd把rfkill禁用做成开机自动执行
你之前用rfkill临时生效但重启失效?那直接把它做成开机服务就搞定了:
- 先找到你的内置蓝牙在rfkill里的标识:
运行rfkill list,找到蓝牙相关的条目,比如会显示类似0: hci0: Bluetooth Soft blocked: no Hard blocked: no,记住它的编号(比如0)或者直接用bluetooth这个类型。 - 创建一个systemd服务文件:
用编辑器打开sudo nano /etc/systemd/system/disable-internal-bluetooth.service,填入以下内容:[Unit] Description=禁用Mac Mini内置蓝牙 After=multi-user.target [Service] Type=oneshot ExecStart=/usr/sbin/rfkill block bluetooth # 如果编号更精准,也可以写成rfkill block 0 RemainAfterExit=yes [Install] WantedBy=multi-user.target - 启用并测试服务:
运行sudo systemctl enable disable-internal-bluetooth.service,然后重启电脑,内置蓝牙就会自动被禁用了。
方法二:用udev规则精准匹配UART蓝牙
Mac的内置蓝牙很多是走UART总线,所以得通过蓝牙控制器的sysfs信息来定位:
- 先获取蓝牙控制器的MAC地址:
运行bluetoothctl show,找到开头的Controller XX:XX:XX:XX:XX:XX,记下这个MAC。 - 追踪UART设备的系统路径:
进入蓝牙设备的sysfs目录:cd /sys/class/bluetooth/XX:XX:XX:XX:XX:XX(把XX换成你的MAC),然后运行ls -l device,会看到一个指向上游UART设备的链接,比如../../devices/platform/apple-bluetooth。 - 提取UART设备的唯一属性:
运行udevadm info -a -p /sys/class/bluetooth/hci0,打印出完整的设备属性链,找最独特的标识——比如ATTRS{name}=="Apple Bluetooth UART"或者SUBSYSTEM=="tty"这类只有内置蓝牙才有的属性。 - 编写udev规则:
创建规则文件sudo nano /etc/udev/rules.d/99-disable-internal-bluetooth.rules,填入匹配规则,比如:
保存后重启,udev就会在设备加载时自动禁用它。# 匹配Mac内置UART蓝牙并禁用 ACTION=="add", SUBSYSTEM=="tty", ATTRS{name}=="Apple Bluetooth UART", RUN+="/usr/sbin/rfkill block bluetooth"
方法三:内核模块黑名单(谨慎使用)
如果你的内置蓝牙依赖特定的内核模块,可以直接拉黑它,但要注意别影响USB蓝牙:
- 查看蓝牙相关模块:
运行lsmod | grep bluetooth,找到可能关联的模块,比如UART蓝牙常用的hci_uart。 - 编辑黑名单文件:
打开sudo nano /etc/modprobe.d/blacklist-bluetooth.conf,添加:
注意:如果你的USB蓝牙也用blacklist hci_uart blacklist bluetoothhci_uart模块,这个方法会把它也禁用,所以一定要先确认内置和USB蓝牙的模块差异,或者用更精准的设备路径来黑名单模块(比如通过udev规则阻止模块加载)。
额外排查小技巧
- 用
dmesg | grep -i bluetooth查看开机日志,能找到内置蓝牙的初始化信息,比如Bluetooth: hci0: Apple Bluetooth UART,帮你快速定位设备标识。 - 用
udevadm monitor实时监听设备事件,当重启蓝牙时能看到设备的加载过程,方便提取属性写规则。
备注:内容来源于stack exchange,提问作者igorsantos07
相关产品推荐
相关产品推荐

