linux wifi使用 wifi开机自动连接

  • 0 引言
  • 1 背景
  • 2 解决办法
  • 3 linux使用wifi模块
  • 3.1 wifi模块的选择
  • 3.2 安装驱动
  • 3.3 wifi连接
  • 3.3.1 安装工具
  • 3.3.2 启用wifi模块
  • 3.3.3 查看可连的wifi
  • 3.3.4 连接wifi
  • 3.3.5 获取ip地址
  • 4 开机自动连接wifi
  • 4.1 文件夹准备
  • 4.2 wifi账号密码配置文件准备
  • 4.3 脚本准备
  • 4.4 修改权限
  • 4.5 开机启动配置
  • 5 后记


0 引言

本博客是关于linux wifi模块的使用(包括设置wifi自动连接),以下都是本人亲身经历和切身感受。此博客秉承以下原则:

  • 没有原理性介绍,我不是这个工具的作者,写了也是抄的。
  • 没有太详细的操作步骤,操作步骤尽量指向官方文档。
  • 没有遇到的或者不值一提的,我都不会写上去。

作者

Daniel.Leung

组织

池鱼 - YiiGaa

邮箱

YiiGaa@126.com

日期

2019-08-27

1 背景

在公司上班时,一般是一个windows的PC作为常用机器,还有一个用于编译和模拟生产环境的ubuntu服务器。决定做自由职业者后,本来可以用docker模拟出一个ubuntu的服务器的,但是奢侈的习惯一旦养成是没法回头的…所以我还是多买了个dell的服务器,然后就悲剧了。

  • 无网线,房间里没有插网口的地方,路由在很远的地方,用的都是wifi。
  • 服务器没有wifi模块,无法联网。

2 解决办法

解决办法倒是有三个:

  • 把机器搬到客厅,网线插到路由里,但是家人说放个电脑在那不好看(塑料亲情)…这个方案就完蛋了。
  • 用一个旧的路由做桥接,就是用另外的路由连wifi,然后网线插到这个路由里。成功了,欢喜。但总感觉路由离我这么近辐射很大,然后我晚上就关了。然后就发现这个傻逼TP-Link居然每次断电后都需要重新设置…(也许是我的旧路由固件有点老了)。然后在我设置了第三次后忍无可忍了,有了第三个方案。
  • 给服务器买个usb网卡。让服务器自己连上wifi。搞完是挺好的,但是弄的过程还是比较痛苦的,而且网上找到的资料都比较零散,所以决定写一个教程。

3 linux使用wifi模块

3.1 wifi模块的选择

首先先买一个wifi模块,usb插入的那种。这里选用的标准大概是:

  • 需要支持linux内核的
  • 是否需要安装驱动,傲娇的我选择了需要安装驱动的,因为不需要安装驱动的需要80多…
  • 是否需要支持5G,我这里选择了支持5G的,因为家里的无线设备比较多,只用2.4G的话肯定会有冲突。不过前提是有5G的wifi网络。
    最后我选择了,COMFAST CF-811AC,一个需要安装驱动,支持linux内核,支持5G的usb网卡。挺小的,跟无线鼠标的接收器一样大,40多块钱。

在大学的时候,当时也做过一个usb的wifi网卡,当时零件都是蹭实验室的,就没怎么花钱,但是那个网个网卡从硬件到驱动做了差不多一个月,其实就是闲的…那时候就是对嵌入式痴迷了,都总感觉自己要无敌了,什么都想做,做了过飞行器,声控遥控车。回忆起来好青葱的岁月。题外话,题外话…

3.2 安装驱动

如果买了不需要安装驱动的,这一个跳过,但是安个驱动真的值40块钱么…
跟网卡一起包装的还有一个光盘,庆幸了一下自己的服务器有光驱,但是插入光盘,脸都绿了,里面居然自由Mac和windows的驱动,为什么么有linux的…
在官网想下载,更悲剧的是,官网上就自由windows的驱动。

本着不给我解决我就退货的态度找了淘宝店家,店家提供了一个适合我机器内核的驱动。然后按照店家说的步骤安装就行。无非就是make一下代码,make install一下,但我记得当时驱动代码在make的时候报了错,好像gcc的版本问题,我是自己把它的代码改了。如果不知道的话,也可以找店家解决,方正不解决就退货,不能退就一万字差评。

3.3 wifi连接

进入正题,wifi模块的使用

3.3.1 安装工具

需要安装以下的包,所以在用无线之前,还是需要先用有线网的,下面的软件也可以在后面的命令中按照错误提示安装。

  • iw
  • wpa_supplicant
  • udhcpc
3.3.2 启用wifi模块

默认情况下,wifi模块是不启用的,即执行ifconfig时没有wifi网卡

android 代码打开手机热点_linux


这时候,输入命令ifconfig -a即会显示没启用的无线网卡,如果还是没有,就是驱动没安好,或者安装好了没重启。

android 代码打开手机热点_android 代码打开手机热点_02


上面截图中的wlx200db033b7fa就是这个无线网卡。

启动无线网卡命令:

sudo ip link set 网卡 up

上面的命令中网卡为上面ifconfig -a中查到的无线网卡标识,我这里是ip link set wlx200db033b7fa up,下面一样,后面不做重复
启动后,再看用ifconfig,无线网卡就能查到了,说明现在网卡就是启动的

3.3.3 查看可连的wifi
sudo iw 网卡 scan | grep SSID

android 代码打开手机热点_android 代码打开手机热点_03


SSID:后面的就是wifi名字

3.3.4 连接wifi

先建立一个conf文件,放在哪里都行,能访问就可以,我习惯把配置文件都放在/home/user(这里是你的用户)/init/下

我这里起名是account_setting.conf,文件内容是

ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="lalala"
        psk="00005419"

}

这里ctrl_interface后面的值不需要动。反正我机器上这个路径也不存在,但是好使…
ssid的值替换成你的wifi名,尽量不要有中文和奇奇怪怪的符号,不知道到时候解析有没有问题,psk是密码。这里的配置是普通的wifi密码配置,如果是其他奇怪的加密方式,那就要看查一下wpa_supplicant配置的相关规则了。

配置好了之后,输入命令

sudo wpa_supplicant -B -c 配置文件位置 -i 网卡

配置文件位置是上面account_setting.conf的绝对路径。

android 代码打开手机热点_wifi_04

3.3.5 获取ip地址

连接上wifi后还不能上网,需要获取ip地址

sudo udhcpc -b -i 网卡

android 代码打开手机热点_linux_05


获取成功后,ifconfig查看以下网卡是否有ip了,或者日常的ping一下百度,ping成功了就是能上网了。

android 代码打开手机热点_android 代码打开手机热点_06


这里的获取ip方法,每次获取都是一样的,只要路由的ip个数足够。也有每次不一样的方式,用dhclient 网卡这个命令就行。这里可能有些网络是需要固定ip才能上网的,这里我没用到,所以如果需要的话,靠你自己了…

4 开机自动连接wifi

上面的内容,已经可以连接wifi了,但是比较扯的是,需要每次开机都手动连接(可能有图形界面的不用,但是有图形界面的话上面的连接也不用一顿操作了)。所以需要做一个脚本驱动开机自动启动。

4.1 文件夹准备

准备一个文件夹,4.2和4.3文件需要放在同一个文件夹里,如果不在一起,那你需要自己改4.3的脚本了。

4.2 wifi账号密码配置文件准备

上面3.3.4 连接wifi提到过,上面做了这里跳过
创建account_setting.conf文件,内容

ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="lalala"
        psk="00005419"

}

这里ctrl_interface后面的值不需要动。反正我机器上这个路径也不存在,但是好使…
ssid的值替换成你的wifi名,尽量不要有中文和奇奇怪怪的符号,不知道到时候解析有没有问题,psk是密码。这里的配置是普通的wifi密码配置,如果是其他奇怪的加密方式,那就要看查一下wpa_supplicant配置的相关规则了。

4.3 脚本准备

创建bootstrapping.sh文件,内容

#!/bin/bash
wifiname='网卡'
accountsetting='account_setting.conf'

ip link set $wifiname up&&
wpa_supplicant -B -c $(dirname $0)/$accountsetting -i $wifiname &&
udhcpc -b -i $wifiname

上面的网卡需要替换成你的网卡标识,account_setting.conf为wifi配置文件名。

4.4 修改权限

chmod 755 这两个文件

这里防止开机启动时由于权限不足而无法启动脚本。

4.5 开机启动配置

以下以ubuntu为例子

在/etc/rc.local文件(其他系统都有这个开机启动的配置文件)追加我们的脚本

android 代码打开手机热点_linux_07


/home/daniel-leung/init/wificonf/bootstrapping.sh4.3 脚本准备的脚本路径,一定要写在exit 0之前。

5 后记

这个我wifi连接居然弄了半天,不过估计用的机会很少,一是一般都喜欢用有图形的系统,二是一般无图形的服务器系统都是有网线的。
站在巨人肩膀上还是有必要的,所以以后能安图形界面还是要安一个。