如何在 Linux 終端中連接 WiFi?
我的家用電腦主要使用桌面 Linux。我也有多臺(tái) Linux 服務(wù)器用于托管網(wǎng)站以及開源軟件,如 Nextcloud、Discourse、Ghost、Rocket Chat 等。
我可以使用 linode 在云端幾分鐘內(nèi)快速部署 Linux 服務(wù)器。但最近,我在我的樹莓派上安裝了 Ubuntu 服務(wù)器。這是我第一次在物理設(shè)備上安裝服務(wù)器,我不得不做一些額外的事情來通過命令行將 Ubuntu 服務(wù)器連接到 WiFi。
在本教程中,我將展示在 Ubuntu Linux 中使用終端連接到 WiFi 的步驟。你應(yīng)該:
不要害怕使用終端編輯文件。
知道 wifi 接入點(diǎn)名稱 (SSID) 和密碼。
在 Ubuntu 中從終端連接到 WiFi
當(dāng)你使用 Ubuntu 桌面時(shí),連接到 WiFi 是很容易的,因?yàn)槟阌袌D形用戶界面,可以很容易地做到這一點(diǎn)。但當(dāng)你使用 Ubuntu 服務(wù)器時(shí)就不一樣了,因?yàn)槟阒荒苁褂妹钚小?/p>
Ubuntu 使用 Netplan 工具來輕松配置網(wǎng)絡(luò)。在 Netplan 中,你可以創(chuàng)建一個(gè)包含網(wǎng)絡(luò)接口描述的 YAML 文件,然后在 netplan 命令行工具的幫助下,生成所有需要的配置。
讓我們看看如何使用 Netplan 從終端連接到無線網(wǎng)絡(luò)。
步驟 1:確定你的無線網(wǎng)絡(luò)接口名稱
有幾種方法可以識別你的網(wǎng)絡(luò)接口名稱。你可以使用 ip 命令、過時(shí)的 ipconfig 命令或查看這個(gè)文件:
- ls /sys/class/net
這應(yīng)該會(huì)展示所有可用的網(wǎng)絡(luò)接口(以太網(wǎng)、WiFi 和環(huán)回)。無線網(wǎng)絡(luò)接口名稱以 w 開頭,通常命名類似 wlanX、wlpxyz。
- [email protected]:~$ ls /sys/class/net
- eth0 lo wlan0
記下這個(gè)接口名。你將在下一步使用它。
步驟 2:編輯 Netplan 配置文件中的 wifi 接口詳細(xì)信息
Netplan 配置文件在 /etc/netplan 目錄下。如果你查看這個(gè)目錄的內(nèi)容,你應(yīng)該看到類似 01-network-manager-all.yml 或 50-cloud-init.yaml 等文件。
如果是 Ubuntu 服務(wù)器,你應(yīng)該有 50-cloud-init.yaml 文件。如果是桌面計(jì)算機(jī),應(yīng)該是 01-network-manager-all.yml 文件。
Linux 桌面計(jì)算機(jī)的 Network Manager 允許你選擇一個(gè)無線網(wǎng)絡(luò)。你可以在它的配置中硬編碼寫入 WiFi 接入點(diǎn)。這可以在自動(dòng)掉線的情況下(比如掛起)時(shí)幫助到你。
不管是哪個(gè)文件,都可以打開編輯。我希望你對 Nano 編輯器有一點(diǎn)熟悉,因?yàn)?Ubuntu 預(yù)裝了它。
- sudo nano /etc/netplan/50-cloud-init.yaml
YAML 文件對空格、縮進(jìn)和對齊方式非常敏感。不要使用制表符,在看到縮進(jìn)的地方使用 4 個(gè)空格(或 2 個(gè),以 YAML 文件中已經(jīng)使用的為準(zhǔn))代替。
基本上,你需要添加以下幾行,引號中是接入點(diǎn)名稱(SSID) 和密碼(通常):
- wifis:
- wlan0:
- dhcp4: true
- optional: true
- access-points:
- "SSID_name":
- password: "WiFi_password"
再說一次,保持我所展示的對齊方式,否則 YAML 文件不能被解析,它會(huì)拋出一個(gè)錯(cuò)誤。
你的完整配置文件可能是這樣的:
- # 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"
我覺得很奇怪,盡管有消息說更改不會(huì)在實(shí)例重啟后保留,但它仍然可以工作。
不管怎樣,用這個(gè)命令生成配置:
- sudo netplan generate
如果你幸運(yùn)的話,你應(yīng)該連上網(wǎng)絡(luò)。嘗試 ping 一個(gè)網(wǎng)站或運(yùn)行 apt 更新命令。
然而,事情可能不會(huì)那么順利,你可能會(huì)看到一些錯(cuò)誤。如果是這種情況,請嘗試一些額外的步驟。
可能的故障排除
當(dāng)你使用 netplan apply 命令時(shí),你有可能在輸出中看到類似這樣的錯(cuò)誤。
- 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 <module>
- 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 服務(wù)沒有運(yùn)行。運(yùn)行這個(gè)命令:
- sudo systemctl start wpa_supplicant
再次運(yùn)行 netplan apply。如果它能解決這個(gè)問題,那就太好了。否則,使用下面的命令關(guān)閉 Ubuntu 系統(tǒng):
- shutdown now
重新啟動(dòng) Ubuntu 系統(tǒng),登錄并再次生成和運(yùn)行 netplan apply:
- sudo netplan generate
- sudo netplan apply
現(xiàn)在可能會(huì)顯示警告(而不是錯(cuò)誤)。這是警告而不是錯(cuò)誤。我檢查了正在運(yùn)行的 systemd 服務(wù),發(fā)現(xiàn) netplan-wpa-wlan0.service 已經(jīng)在運(yùn)行了??赡苁且?yàn)樗呀?jīng)在運(yùn)行了,而且 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.
這并不重要,你可以通過運(yùn)行 apt update 來檢查網(wǎng)絡(luò)是否已經(jīng)正常工作。
我希望你能夠在本教程的幫助下,在 Ubuntu 中使用命令行連接到 WiFi。