这本来是个普通的故事,公司现在支持使用 WiFi 打卡(互联网公司还强制打卡…),不过还是需要每天刷一下门禁卡 。不过总的来说这对懒人是个利好消息——想想只要有个设备能连接认证一下就算打过卡了,以后迟到早退再也不怕

于是这个重任就交给了工作机—— Gentoo Linux 。

在 Linux 下用过无线的知道这个比较折腾,原因无非是硬件厂商的不配合,尤其又是 USB 无线网卡,更是在硬件厂商调新型低廉芯片的集中地,每几个月新推出的产品就有可能更换芯片型号。所以在购买无线网卡前,务必确认芯片的型号,看清楚 Kernel 到底是否能支持。

某的经验则是

  • 打死也不能买 Broadcom 的,即便是 PCI 接口的无线网卡,这货也够折腾,还记得 bcm43xx 这个系列么,官方的闭源 STA 驱动很早就悲剧了;现在取而代之在 Kernel 中是由 这两个来支持的。 总之一句话,想尽办法也不能用这个(很不幸,某的两个笔电内置无线网卡均是这个系列,还好具体型号还能用orz)
  • USB 无线网卡主要的芯片也就这几家
  • Atheros 的口碑一直都不错,驱动支持相对较好。
  • Ralink 没用过不清楚。
  • Realtek 声卡和有线网卡见多了吧,无线网卡也有方案,驱动则喜忧参半。

具体的硬件以及 Kernel 中的驱动请参考官网上的信息。 虽然列表有些旧,不过在列表里是已知的,比较保险。

最终某挑选了一下,价格适中,驱动又支持的是 TP-LINK 的 WN821N 这款型号。按照列表里的信息,硬件版本 v2.0 的驱动是 ar9170 , v3.0 的驱动是 ath9k_htc,这下总保险了吧!

事实是… 事事无绝对啊,货送来后拆包在网卡背面一看硬件版本,顿时傻眼了… v4.0 ! 不是吧,这么科幻…

赶紧往 USB 上一插, lsusb 看了一下,芯片是 Realtek 的 8192cu ,再去查列表,长呼一口,还好内核里已经有支持。

前一回已经有过一次教训,买了 Mercury 的一款 20 块钱,芯片是 Realtek 的 8118eu ,网上确实能找到驱动,但不在 Kernel 中,并且看起来不支持 3.8 以上的内核, 现在还躺在家里等驱动更新orz

如果最后还是不能搞定,可以想办法试试ndiswrapper,它能让 Linux 使用 Windows 下的驱动,可惜不能保证一定可行。

至于网络的配置则比较简单了, wpa_supplicant 就能搞定,拿某在公司的例子而言,Kernel 加载 8192cu 模块后,多了一个 wlan0 网卡,在 wpa_supplicant 里加入以下配置,注意某这里因为是公司域用户认证,所以是类似802.11x的认证。

network={
  ssid="wireless-ssid"
  bssid=24:de:c6:a2:2f:50
  key_mgmt=WPA-EAP
  eap=TTLS
  identity="username"
  password="password"
  eapol_flags=0
}

wpa_supplicant 带一个图形界面, wpa_gui 可以用来扫描热点与配置,顺利的话都不需要手动写配置。

启动后即可,中间还被 SELinux 坑了一下,以为是硬件问题,显然还是对 SELinux 不熟悉,等研究透了再做补充。

最后总结,想在 Linux 下安心用无线网络,看准芯片型号和硬件最重要,尽量挑选 Kernel 中已有驱动支持的,在这个前提下找功能尽可能多的,比如 AP mode, Master mode ,802.11a/b/g/n/ac 支持,各种加密方式等等。