zoukankan      html  css  js  c++  java
  • Ubuntu18.04.5 server wifi的连接

    背景

    由于在安装Ubuntu18.04.5 server操作系统时,没有联网,故安装完成后,需要连接wifi。但是发现安装的系统无法连接wifi,所以通过下面的方式连上wifi。
    主要是通过wpa_supplicant进行连接。

    1. 安装wpa_supplicant

    由于Ubuntu18.04.5 server中没有wpa_supplicant安装包,但是在Ubuntu16.04.7 server镜像包下的 pool/main中可以找到如下的安装包
    也可以在http://mirrors.163.com/ubuntu/pool/main/下下载

    ## libreadline6_6.3-8ubuntu2_amd64.deb
    ## libpcsclite1_1.8.14-1ubuntu1.16.04.1_amd64.deb
    # wpasupplicant_2.4-0ubuntu6.6_amd64.deb  依赖上面两个包
    # busybox-static_1.22.0-15ubuntu1.4_amd64.deb 主要udhcpc是集成在busybox里面的
    
    ## 因为wpa_supplicant依赖这两个包
    $ sudo dpkg -i libreadline6_6.3-8ubuntu2_amd64.deb libpcsclite1_1.8.14-1ubuntu1.16.04.1_amd64.deb wpasupplicant_2.4-0ubuntu6.6_amd64.deb
    $ sudo dpkg -i busybox-static_1.22.0-15ubuntu1.4_amd64.deb
    

    2. udhcpc使用

    因为udhcpc是集成在busybox里面的,如果没有找到udhcpc可执行文件,可以通过软连接 ln -s /bin/busybox /sbin/udhcpc
    直接使用udhcpc只能分配ip地址,但是没有写入到设备中,即这个ip地址并没有生效。因为udhcpc需要一个默认的配置文件default.script,它实际的作用就是将分配到的ip地址通过ifconfig命令写入设备中。
    在/usr/share/udhcpc下创建了default.script,脚本内容如下:

    #!/bin/sh
     
    # udhcpc script edited by Tim Riker <Tim@Rikers.org>
     
    [ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
     
    RESOLV_CONF="/etc/resolv.conf"
    [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
    [ -n "$subnet" ] && NETMASK="netmask $subnet"
     
    case "$1" in
    	deconfig)
    		/sbin/ifconfig $interface 0.0.0.0
    		;;
     
    	renew|bound)
    		/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
     
    		if [ -n "$router" ] ; then
    			echo "Deleting routers"
    			while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
    				:
    			done
     
    			for i in $router ; do
    				route add default gw $i dev $interface
    			done
    		fi
     
    		echo -n > $RESOLV_CONF
    		[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
    		for i in $dns ; do
    			echo adding dns $i
    			echo nameserver $i >> $RESOLV_CONF # 写入DNS服务器地址
    		done
    		;;
    esac
     
    exit 0
    

    3.使用wpa_supplicant连接wifi

    wpa_supplicant是一个连接,配置wifi的工具,主要包含wpa_supplicant与wpa_cli两个程序。

    3.1 启动wpa_supplicant应用

    $ sudo wpa_supplicant -D nl802ll -i wlp3s0 -c /etc/wpa_supplicant.conf -B
    ## 注意:-D后是驱动,-i后的wifi的接口有的是wlan0
    ## 如果没有wpa_supplicant.conf可以自己新建一个该文件并在该配置文件中写入以下内容:
    ctrl_interface=/var/run/wpa_supplicant
    update_config=1
    

    3.2 启动wpa_cli应用

    $ sudo wpa_cli -i wlp3s0 scan        # 搜索附近的wifi网络
    $ sudo wpa_cli -i wlp3s0 scan_result # 打印搜索wifi网络结果
    $ sudo wpa_cli -i wlp3s0 add_network # 添加一个网络连接,会返回网络序号。第一个返回0
    
    # 如果wifi扫描的结果,要连接加密方式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS](wpa加密),wifi名称是name,wifi密码是:psk,如下所示
    $ sudo wpa_cli -i wlp3s0 set_network 0 ssid '"name"'  # 0 是上面添加一个网络连接返回的序号,'"name"':单引号双引号都要,name是连接的wifi名
    $ sudo wpa_cli -i wlp3s0 set_network 0 psk '"psk"' # '"psk"': psk是连接wifi的密码
    $ sudo wpa_cli -i wlp3s0 enable_network 0 # 启用网络
    
    # 如果连接的加密方式是[WEP][ESS] (wep加密),wifi名称是name, wifi密码是psk
    $ sudo wpa_cli -i wlp3s0 set_network 0 ssid '"name"'
    $ sudo wpa_cli -i wlp3s0 set_network 0 key_mgmt NONE
    $ sudo wpa_cli -i wlp3s0 set_network 0 wep_key0 '"psk"'
    $ sudo wpa_cli -i wlp3s0 enable_network 0
    
    # 如果连接加密方式是[ESS] (无加密),wifi名称是name
    $ sudo wpa_cli -i wlp3s0 set_network 0 ssid '"name"'
    $ sudo wpa_cli -i wlp3s0 set_network 0 key_mgmt NONE
    $ sudo wpa_cli -i wlp3s0 enable_network 0
    

    3.3 为无线网卡分配 ip netmask gateway dns

    $ sudo udhcpc -i wlp3s0 -s /usr/share/udhcpc/default.script -q # /usr/share/udhcpc/default.script 就是安装busybox时写的脚本
    

    3.4 至此已经可以连接网络

    # 保存连接
    $ sudo wpa_cli -i wlp3s0 save_config
    
    # 断开连接
    $ sudo wpa_cli -i wlp3s0 disable_network 0
    
    # 连接已有的连接
    $ sudo wpa_cli -i wlp3s0 list_network     # 列举所有保存的连接
    $ sudo wpa_cli -i wlp3s0 select_network 0 # 连接第一个保存的连接
    $ sudo wpa_cli -i wlp3s0 enable_network 0 # 使用第一个保存的连接
    
    # 断开wifi
    $ sudo ifconfig wlp3s0 down
    $ sudo killall udhcpc
    $ sudo killall wpa_supplicant
    

    参考

    https://segmentfault.com/a/1190000011579147
    https://blog.csdn.net/sddsighhz/article/details/46005629

  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/kayj/p/13648556.html
Copyright © 2011-2022 走看看