如何在Ubuntu Linux中从终端连接到WiFi

在本教程中,你将学习如何从Ubuntu中的终端连接到无线网络,如果你在无法访问常规桌面环境的Ubuntu服务器上使用此功能,这篇文章将特别有用。

在家用计算机上,我主要使用桌面版的Linux,我同时也有多个Linux服务器来托管个人博客和相关网站,以及Nextcloud,Discourse,Ghost,Rocket Chat等开源软件。

我通常使用Linode能在数分钟内在云中快速部署Linux服务器,但是最近,我需要在Raspberry Pi上安装Ubuntu服务器,这是我第一次在物理设备上安装服务器,并且不得不做一些额外的工作才能通过命令行将Ubuntu服务器连接到WiFi。

在本教程中,我们将展示在Ubuntu Linux中使用终端连接到WiFi的步骤,你需要

  • 不害怕使用终端编辑文件
  • 知道wifi接入点名称(SSID)和密码

从Ubuntu中的终端连接到WiFi

使用Ubuntu桌面时很容易,因为您可以使用GUI轻松地做到这一点,当您使用Ubuntu服务器且仅限命令行时,情况会有所不同。

Ubuntu使用Netplan实用程序可以轻松配置网络,在Netplan中,使用网络接口的描述创建YAML文件,并在netplan命令行工具的帮助下生成所有必需的配置。

让我们看看如何使用Netplan从终端连接到无线网络。

步骤1:识别您的无线网络接口名称

有几种方法可以识别您的网络接口名称,你可以使用ip命令,ipconfig命令,或检查此文件:

ls /sys/class/net 

这个命令可以为你提供所有可用的网络接口(以太网,wifi和环回),无线网络接口名称以“w”开头,通常类似于wlanX,wlpxyz。


vxbus@gaitpu:~$ ls /sys/class/net
eth0 lo wlan0

记下该接口名称,你将在下一步中使用它。

步骤2:使用wifi接口详细信息编辑Netplan配置文件

Netplan配置文件位于/etc/netplan目录中,如果检查此目录的内容,应该会看到01-network-manager-all.yml或50-cloud-init.yaml之类的文件。

如果是Ubuntu服务器,则应具有cloud-init文件,对于台式机,它应该是网络管理器文件。

Linux桌面上的网络管理器允许您选择无线网络,你可以在其配置中对WLAN接入点进行硬编码,在某些情况下(例如暂停),这会在连接自动断开的情况下为你提供帮助。

无论是哪个文件,都可以打开后进行编辑,我希望你有点熟悉Nano编辑器,因为Ubuntu已预装了它。

sudo nano /etc/netplan/50-cloud-init.yaml

YAML文件对空格,缩进和对齐非常敏感,不要使用制表符,而是在出现缩进的地方使用4个(或2个,在YAML文件中已经使用过的)空格。

基本上,您必须在引号中添加以下行,并带有接入点名称(SSID)及其密码(通常):


wifis:
    wlan0:
        dhcp4: true
        optional: true
        access-points:
            "SSID_name":
                password: "WiFi_password"

同样,请保持上面显示的对齐方式,否则将无法解析YAML文件,并且会引发错误,你的完整配置文件可能如下所示:


# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            dhcp4: true
            optional: true
            access-points:
                "SSID_name":
                    password: "WiFi_password"

我感到奇怪的是,尽管有消息说更改不会在实例重新启动后持续存在,但它仍然有效。无论如何,请使用以下命令生成配置:

sudo netplan generate 

现在让其生效

sudo netplan apply

如果幸运的话,你应该已经连接了网络,尝试ping网站或运行apt update命令。但是,事情可能不会那么顺利,您可能会看到一些错误信息,如果是这种情况,请尝试一些额外的步骤。

可能的错误检测

使用netplan apply命令时,可能会在输出中看到如下所示的错误:


Failed to start netplan-wpa-wlan0.service: Unit netplan-wpa-wlan0.service not found.
Traceback (most recent call last):
  File "/usr/sbin/netplan", line 23, in 
    netplan.main()
  File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 179, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 46, in run
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 179, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 173, in command_apply
    utils.systemctl_networkd('start', sync=sync, extra_services=netplan_wpa)
  File "/usr/share/netplan/netplan/cli/utils.py", line 86, in systemctl_networkd
    subprocess.check_call(command)
  File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'start', '--no-block', 'systemd-networkd.service', 'netplan-wpa-wlan0.service']' returned non-zero exit status 5.

wpa_supplicant服务可能未运行。 运行以下命令:

sudo systemctl start wpa_supplicant 

再次运行netplan应用,如果能够很好地解决此问题,否则,请使用以下命令关闭Ubuntu系统:

shutdown now 

再次启动Ubuntu系统,登录并再次生成并应用netplan:

sudo netplan generate
sudo netplan apply

现在可能显示警告(而不是错误)。 这是警告,而不是错误。 我检查了正在运行的systemd服务,发现netplan-wpa-wlan0.service已在运行。 可能显示警告是因为它已经在运行,并且“ netplan apply”更新了配置文件(即使没有任何更改)。

Warning: The unit file, source configuration file or drop-ins of netplan-wpa-wlan0.service changed on disk. Run 'systemctl daemon-reload' to reload units.

这并不重要,你可以通过运行apt更新来检查Internet可能已经在工作。