当我插入外部 USB wifi 无线电时,我目前通过手动执行以下命令关闭内部无线电:
sudo modprobe -r ath9k
注:“ath9k”是内置wifi适配器的驱动程序
当我拔下外部 USB 时,我通过手动执行以下命令重新打开内部收音机:
sudo modprobe ath9k
它本身就运行完美,但我想学习如何使用计算机来执行这样的重复性任务。
我意识到即使两个无线电都运行,计算机也能正常工作,但我会尽可能减少电磁场暴露和污染。
感谢@terrance 的帮助,以下是我迄今为止所创作的。 “添加”规则效果很好!但是“删除”规则尚未起作用。
- 创建并测试了启用内部 wifi 设备的 bash 脚本
- 创建并测试了禁用内部 wifi 设备的 bash 脚本
- 将两个 bash 脚本文件放入 /usr/bin 中
- 插入外部 USB wifi 设备
- 跑步:
ip link show
- 复制设备的 MAC 地址(例如 00:c0:ca:b1:4a:84)
- 创建包含以下内容的文本文档:
ACTION=="添加" \ , ATTRS{地址}=="00:c0:ca:b1:4a:84" \ , RUN+="/usr/bin/disableinternalwifi.sh"
ACTION=="删除" \ , ATTRS{地址}=="00:c0:ca:b1:4a:84" \ , RUN+="/usr/bin/enableinternalwifi.sh"
- 将文件保存为 /etc/udev/rules.d/99-wifi.swapper.rules
sudo udevadm control --reload-rules && udevadm trigger
sudo udevadm trigger
“添加”规则有效,但“删除”规则无效。
我运行了udevadm monitor --subsystem-match=usb
,然后插入了外部 USB wifi 设备。显示的 sysfs 路径是:/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0
接下来我跑了udevadm test /devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0
以下是测试的相关结果:
读取规则文件:/etc/udev/rules.d/99-wifi.swapper.rules
DEVPATH=/设备/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0
DEVTYPE=usb_接口
驱动程序=mt76x2u
产品=e8d/7612/100
类型=0/0/0
接口=255/255/255
MODALIAS=usb:v0E8Dp7612d0100dc00dsc00dp00icFFiscFFipFFin00
操作=添加
子系统=usb
ID_VENDOR_FROM_DATABASE=联发科技
ID_PATH=pci-0000:00:14.0-usb-0:4:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_4_1_0
.MM_USBIFNUM=00
USEC_INITIALIZED=4133499389
运行:'kmod load usb:v0E8Dp7612d0100dc00dsc00dp00icFFiscFFipFFin00'
卸载模块索引
已卸载链接配置上下文。
答案1
以下是对我有用的方法(非常感谢@terrance 的帮助):
- 创建一个启用内部 wifi 设备的 bash 脚本并保存为 usr/bin/enableinternalwifi.sh
- 创建一个禁用内部 wifi 设备的 bash 脚本并保存为 usr/bin/disableinternalwifi.sh
- 测试两个脚本是否正常运行
- 插入外部 USB wifi 设备
udevadm monitor --subsystem-match=usb --environment --udev
- 移除 USB 设备
- 记下 udevadm 监视器生成的唯一标识符(例如:PRODUCT=e8d/7612/100)
- 创建包含以下内容的文本文档:
ACTION=="添加" \ , ENV{PRODUCT}=="e8d/7612/100" \ , RUN+="/usr/bin/disableinternalwifi.sh"
ACTION=="删除" \ , ENV{PRODUCT}=="e8d/7612/100" \ , RUN+="/usr/bin/enableinternalwifi.sh"
- 将文本文件保存为 /etc/udev/rules.d/99-wifi.swapper.rules
sudo udevadm control --reload-rules && udevadm trigger
sudo udevadm trigger
(现在它应该可以工作了)