我有一台戴尔 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