unblock wifi in rfkill

rfkill block问题

之前在部署arch linux时比较偷懒,没有采用正规的网络设置方法,而是使用脚本来启动有线和无线网络。

  • start_lan

sudo wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-my_wifi.conf -D wired -i enp0s25 &
sleep 5
sudo dhcpcd enp0s25
  • start_wifi

sudo ifconfig wlp3s0 down
sleep 1
sudo ifconfig wlp3s0 up
sudo wpa_supplicant -B -c /etc/wpa_supplicant/wpa_supplicant-my_wifi.conf -i wlp3s0
sleep 5
sudo dhcpcd wlp3s0

但是我发现发现无线脚本运行时候报错

SIOCSIFFLAGS: Operation not possible due to RF-kill
Successfully initialized wpa_supplicant
rfkill: WLAN soft blocked
dhcpcd-9.2.0 starting
DUID 00:04:62:91:a1:81:51:17:11:cb:b7:60:eb:9e:7a:2e:cc:7b
dhcpcd_prestartinterface: Operation not possible due to RF-kill
wlp3s0: waiting for carrier
timed out
dhcpcd exited

为何会出现 rfkill: WLAN soft blocked 报错?

参考 How to unblock something listed in rfkill?

  • 检查 rfkill

显示无线接口存在 Soft blocked

"Hard blocked" 不能通过软件修改,需要检查是否是硬件开关关闭,例如ThinkPad笔记本的侧边有一个硬件拨动开关可以关闭无线设备

"Soft blocked" 是软件关闭,例如失败的驱动或者内核模块导致连接断开

  • 解除block: 这里可以看到无线接口是 2: phy0: Wireless LAN ,所以使用这个标号就是 2

  • 然后再次 rfkill list all 检查就可以看到软件阻断已经关闭

  • 再次执行

但是提示无法从驱动读取 SSID

我发现可能是我在 /etc/wpa_supplicant/wpa_supplicant-my_wifi.conf 有一个配置影响了SSID获取

将这个配置修改成 ap_scan=1 ,即

然后再执行

则正常连接成功,此时使用 iwconfig 可以看到

完整配置

确保无线网卡已经激活

  • 首先使用 rfkill 确保无线网卡已经激活

  • 检查无线网卡状态

如果wifi被软件block,需要unblock

  • 停止NetworkManager(如果是Ubuntu桌面版本,通常需要停止NetworkManager)

检查无线网卡接口

  • 使用iwconfig命令检查

显示输出

这里可以看到 Access Point: Not-Associated

如果无线接口没有显示,可能需要激活:

  • 然后扫描无线网络:

此时可以看到周围可用的无线热点名字列表

使用wpa_supplicant连接无线网络

  • 安装wpa_supplicant

  • wapsupplicant提供了一个 wpa_passphrase 工具可以创建配置:

  • 然后我们通过命令行就可以连接

如果终端显示的输出没有报错,就可以在命令行上添加 -B 参数以便在后台运行 wpa_supplicant 进程

  • 连接正常,则使用 iwconfig 可以看到已经连接到无线Access Point

  • 最后执行dhcp

连接隐藏的无线网络

如果无线网络是隐藏SSID,则需要在 wpa_supplicant.conf 配置中加上

启动时自动连接

参考

Last updated

Was this helpful?