modprobe -n -v可提前验证黑名单配置是否生效:输出含install /bin/false才正确,若为insmod则配置无效;须blacklist与install /bin/false成对出现,并更新initramfs,built-in模块需改GRUB参数。

modprobe -n -v 能提前验证配置是否真生效
别等重启后才发现模块还在加载。改完 /etc/modprobe.d/ 配置后,立刻运行 modprobe -n -v btusb 和 modprobe -n -v irda。输出里必须出现 install /bin/false,而不是 insmod /lib/modules/...。如果看到后者,说明 install 行没被读取——大概率是文件没放对路径、没加 .conf 后缀,或者权限不是 644。
blacklist + install /bin/false 必须成对写,缺一不可
单独写 blacklist btusb 拦不住 udev 插入蓝牙适配器时的自动加载;只写 install btusb /bin/false 又会让其他工具(比如某些硬件检测脚本)误判模块状态。正确写法是同一文件里紧挨着两行:
blacklist btusb install btusb /bin/false blacklist irda install irda /bin/false blacklist ircomm install ircomm /bin/false
注意:模块名不含 .ko 或 .ko.xz;irda 是主模块,但实际热插拔可能触发 ircomm、irtty_sir 等子模块,得一并处理。
initramfs 不更新 = 白配,尤其对蓝牙/红外这类启动早期就可能触发的模块
蓝牙 USB 适配器或红外收发器常在 initramfs 阶段就被识别并预加载,此时 /etc/modprobe.d/ 配置根本还没读。Debian/Ubuntu 执行:sudo update-initramfs -u;RHEL/CentOS/Fedora 执行:sudo dracut --force。不执行这步,重启后 dmesg | grep -i "bt\|irda" 依然能看到 probe 日志。
模块是 built-in 时,/etc/modprobe.d/ 完全无效
运行 grep CONFIG_BT /boot/config-$(uname -r),如果返回 CONFIG_BT=y,说明蓝牙已编译进内核,blacklist 和 install 全部失效。此时只能加内核启动参数:modprobe.blacklist=btusb,irda,ircomm 到 GRUB_CMDLINE_LINUX_DEFAULT,再运行 sudo update-grub(Debian/Ubuntu)或 sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL)。注意:built-in 模块无法卸载,该参数仅阻止其在 initramfs 之后被“重复加载”,底层功能仍存在。











