我有一个 USB WiFi 适配器以及内置适配器。运行时rfkill list
我得到以下输出:
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
9: nfc0: NFC
Soft blocked: no
Hard blocked: no
是否应该为内置适配器和 USB 适配器单独列出列表?我希望能够仅阻止内置适配器,现在当我运行时,rfkill block 0
它会禁用两个适配器。
更新:我找到了另一个旧的 USB 适配器,将其插入并运行rfkill list
。这次,输出是
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: nfc0: NFC
Soft blocked: no
Hard blocked: no
4: phy2: Wireless LAN
Soft blocked: no
Hard blocked: no
我猜 4 是第二个适配器。我正在使用这个rtl8812au驱动程序的存储库。 是否存在导致适配器未显示在 中的问题rfkill list
? 插入第二个适配器后,我运行rfkill block 4
,发现所有 wifi 都被阻止了。 内置 wifi 和两个适配器。 应该这样rfkill
工作吗?
答案1
对我来说,这显然也是 rfkill 目前的工作方式。不仅仅是 rfkill 命令本身表现出这种行为。当您直接写入 sysfs 文件时也会发生同样的情况。例如(以 root 身份):
禁用 WiFi 设备 #0 上的 RF:
$ echo 1 > /sys/class/rfkill/rfkill0/soft
在 WiFi 设备 #2 上启用 RF:
$ echo 0 > /sys/class/rfkill/rfkill2/soft
我假设它是所有不支持其驱动程序中的 RF kill API 的设备的默认设置。引用 cfg80211.h 头文件:
cfg80211 中的 RFkill 集成对于驱动程序来说几乎是不可见的,因为 cfg80211 会自动为其所知道的每个无线设备注册一个 rfkill 实例。软终止也意味着断开连接并关闭所有接口,驱动程序应该在所有接口关闭时关闭设备。
我也在使用 rtl8812au 驱动程序以及 rtl8192ce,它们似乎都不在其驱动程序中直接支持 RF kill API。
对于 rtl8812au 驱动程序本身,我使用的是https://github.com/zebulon2/rtl8812au,因为格纳布导致它被识别为以太网适配器而不是 WiFi 适配器。如果您遇到完全相同的问题,那么这可能解释了为什么它没有被 rfkill 列出。