Dell XT2 上的无线开关 - rfkill 的奇怪行为

Dell XT2 上的无线开关 - rfkill 的奇怪行为

我有一台戴尔 Latitude XT2,使用英特尔 WLAN 卡(lspci列为“英特尔公司 Ultimate N WiFi Link 5300”),运行 Lubuntu 12.04 并进行了最新更新。这台笔记本电脑有一个硬件 WLAN 交换机。

当我将硬件开关设置为“关闭”时,我无法激活 WLAN。不幸的是,情况有点混乱。

rfkill列出了两个 WLAN 设备(但lspci只显示了 Intel 设备)。这是在将硬件开关设置为“关闭”的情况下启动的情况:

0: dell-wifi: Wireless LAN
    Soft blocked: yes
    Hard blocked: yes
1: dell-bluetooth: Bluetooth
    Soft blocked: yes
    Hard blocked: yes
2: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: yes

dell-wifi通过一些测试,我得出结论,只有当和 都被软件和硬件解锁时,WLAN 才会激活phy0。但我只能解锁dell-wifi 硬件开关设置为“开”。

从启动开始将硬件开关设置为“关闭”的程序:

  • 软解锁phy0按预期工作。可以通过启动脚本完成。
  • sudo rfkill unblock 0:什么都没发生。软块dell-wifi 不是已删除。
  • 将硬件开关设置为“开”:phy0删除其硬块。仍然没有 WLAN。
  • sudo rfkill unblock 0两个都的软锁和硬锁dell-wifi已解除。WLAN 现已启用并正常工作。
  • sudo rfkill block 0:仅按预期添加软阻止。WLAN 再次关闭。

因此,为了激活 WLAN,我必须使用硬件开关和然后(手动)运行脚本 - 这有点不方便。

有人知道更好的解决方案吗?也许守护进程可以帮助监听事件以在我将硬件开关设置为“开”后rfkill解除阻塞?(听起来像是另一种解决方法)dell-wifi

当将硬件开关设置为“开”以进行启动时,不会有任何硬件或软件被阻止。

答案1

已经有一个守护进程可以用于此目的:udevd

您可以为其创建一个规则文件来监听 rfkill 事件,请参阅这个 unix.stackexchange.com 答案。只需根据您的目的调整脚本,见下文。请注意,我的 bash 不是最好的 - 它有效,但可能不能被视为一个很好的例子。

#!/bin/bash
#/usr/local/bin/unblock-dell-wifi

DEV_CHANGED_BY_HW_SWITCH=phy0
DEV_TO_UNBLOCK=dell-wifi


if [ ${RFKILL_NAME} != ${DEV_CHANGED_BY_HW_SWITCH} ]
then
        exit
fi


# get $DEV_TO_UNBLOCK rfkill id
DEV_TO_UNBLOCK_ID=`rfkill list wlan | grep $DEV_TO_UNBLOCK | grep -o -e "^[0-9]*"`

# maybe add error handling if $DEV_TO_UNBLOCK couldn't be found
if [ -z $DEV_TO_UNBLOCK_ID ]
then
        echo "$DEV_TO_UNBLOCK not found in rfkill list" 1>2&
        exit
fi  


if [ ${RFKILL_STATE} = 0 ]
then
        sudo rfkill block $DEV_TO_UNBLOCK_ID
else
        sudo rfkill unblock $DEV_TO_UNBLOCK_ID
fi

相关内容