当我插入外部 USB wifi 适配器时,如何自动禁用内部 wifi 适配器,并在拔下 USB 适配器时自动启用它?

当我插入外部 USB wifi 适配器时,如何自动禁用内部 wifi 适配器,并在拔下 USB 适配器时自动启用它?

当我插入外部 USB wifi 无线电时,我目前通过手动执行以下命令关闭内部无线电:

sudo modprobe -r ath9k

注:“ath9k”是内置wifi适配器的驱动程序

当我拔下外部 USB 时,我通过手动执行以下命令重新打开内部收音机:

sudo modprobe ath9k

它本身就运行完美,但我想学习如何使用计算机来执行这样的重复性任务。

我意识到即使两个无线电都运行,计算机也能正常工作,但我会尽可能减少电磁场暴露和污染。


感谢@terrance 的帮助,以下是我迄今为止所创作的。 “添加”规则效果很好!但是“删除”规则尚未起作用。

  1. 创建并测试了启用内部 wifi 设备的 bash 脚本
  2. 创建并测试了禁用内部 wifi 设备的 bash 脚本
  3. 将两个 bash 脚本文件放入 /usr/bin 中
  4. 插入外部 USB wifi 设备
  5. 跑步:ip link show
  6. 复制设备的 MAC 地址(例如 00:c0:ca:b1:4a:84)
  7. 创建包含以下内容的文本文档:

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"

  1. 将文件保存为 /etc/udev/rules.d/99-wifi.swapper.rules
  2. sudo udevadm control --reload-rules && udevadm trigger
  3. 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 的帮助):

  1. 创建一个启用内部 wifi 设备的 bash 脚本并保存为 usr/bin/enableinternalwifi.sh
  2. 创建一个禁用内部 wifi 设备的 bash 脚本并保存为 usr/bin/disableinternalwifi.sh
  3. 测试两个脚本是否正常运行
  4. 插入外部 USB wifi 设备
  5. udevadm monitor --subsystem-match=usb --environment --udev
  6. 移除 USB 设备
  7. 记下 udevadm 监视器生成的唯一标识符(例如:PRODUCT=e8d/7612/100)
  8. 创建包含以下内容的文本文档:

ACTION=="添加" \ , ENV{PRODUCT}=="e8d/7612/100" \ , RUN+="/usr/bin/disableinternalwifi.sh"

ACTION=="删除" \ , ENV{PRODUCT}=="e8d/7612/100" \ , RUN+="/usr/bin/enableinternalwifi.sh"

  1. 将文本文件保存为 /etc/udev/rules.d/99-wifi.swapper.rules
  2. sudo udevadm control --reload-rules && udevadm trigger
  3. sudo udevadm trigger(现在它应该可以工作了)

相关内容