如何从命令行连接WiFi?

其他帖子似乎在处理更复杂的命令行网络连接问题。

Unity面板上的网络指示器/按钮有时反应不太好-即使我点击“断开连接”,它仍然在尝试连接到网络,等等。

所以我想通过命令行进行控制。反正我不喜欢图形界面。

难道没有一些简单的命令行工具可以做类似以下的事情吗?

wifi connect MyNetworkNameA
wifi disconnect
wifi connect MyNetworkNameB

4取决于,是什么无线安全?这里详细介绍了 - https://help.ubuntu.com/community/NetworkConfigurationCommandLine/Automatic#Wireless - Panther
在Ubuntu 16.04和18.04上仍然遇到WiFi断开的问题。重新连接命令将是一个不错的解决方法。 - AlikElzin-kilaka
4个回答

我觉得你想继续使用受NetworkManager管理的接口。nmcli是一个用于控制NetworkManager的命令行工具。
  • 要查看已保存的连接列表,请使用 (<SavedWiFiConn>)

    nmcli c
    
  • 要查看可用的 WiFi 热点列表 (<WiFiSSID>)

    nmcli d wifi list
    

    或者:

    sudo iwlist <WifiInterface> scanning
    
  • 要查看接口列表 (<WifiInterface>)

    ifconfig -a
    
只需更改以下命令中的,,以反映您的设置。如果已保存WiFi信息,则可以使用作为在NetworkManager中保存的连接名称,这样更容易。
Ubuntu 16.04
##disconnect
nmcli d disconnect <WifiInterface>

##connect
nmcli d connect <WifiInterface>

另一种方法:
##disconnect
nmcli c down <SavedWiFiConn>

##connect
nmcli c up <SavedWiFiConn>

Ubuntu 15.10及之前版本

##disconnect
nmcli d disconnect iface <WifiInterface>

##connect
nmcli d wifi connect <WiFiSSID> password <WiFiPassword> iface <WifiInterface>

另一种方法:
##disconnect:
nmcli c down id <SavedWiFiConn>

##connect:
nmcli c up id <SavedWiFiConn>

如果您的密码没有被自动识别,请输入以下内容:
nmcli -a c up <SavedWiFiConn>

参考: man nmcli


1运转得很好!而且正如预料的那样,命令行立即回应,而图形用户界面有时可能会迟钝、不合作和无响应。 - cmo
1当我失去了Unity的启动器和任务栏,而且网络设置对话框在任何网络连接建立时都会崩溃时,这个工具真是救了我的一天。 - Janaka Bandara
有没有一种方法可以自动化它,使其在WiFi可用时连接? - kirill_igum
2@kirill_igum ,抱歉回复晚了,我很忙。你可以使用cron来安排定时的wifi扫描,使用iwlist wlan0 scanning或者nmcli d wifi list来获取wifi列表,然后根据你的需求使用nmcli连接到相应的wifi网络。 - user.dz
1在Ubuntu 14.04上,这个连接命令返回“错误:设备'wlan0'不是一个Wi-Fi设备。”我认为这个答案是不完整的。 - Luís de Sousa
这是无效的语法。未知参数:iface 未知参数:wlan0 - Cerin
我完全不知道这对我来说是如何工作的。我正在使用蓝牙共享网络(blue tooth tether)。bnep0,但我不知道该输入什么或者如何获取SSID(无线网络名称)。我在谷歌上搜索了一下,几乎所有的命令都没有起作用,要么是无效的,要么返回了一个空行。 - Bhikkhu Subhuti
@BhikkhuSubhuti,尝试使用sudo iwlist wlan0 scanningnmcli d wifi list获取可用网络的SSID。 - user.dz
"iwlist wlan0" 提示无效命令,但单独使用 iwlist 是有效的命令,只是会给出一些可用参数的列表。nmcli d wifi list 给出了一个空的标题。我正在使用蓝牙共享网络。 - Bhikkhu Subhuti
1有人能给我一个例子,说明在命令“nmcli c up id <WiFiConn>”中,“ID”参数后面跟着什么? “<WiFiConn>”是什么意思? - L. D. James
@L.D.James,这是用于保存连接设置的名称,在此输出中为“nmcli c”,列出了所有保存的连接设置。 - user.dz
@sneetsher 好的,我明白了。我相信你需要用第一列的信息替换id这个词,否则会出错。刚开始回答的时候可能不太清楚。 - L. D. James
@L.D.James,已经提到过了:<WiFiConn>是连接的名称,就像在NetworkManager中保存的一样(请检查nmcli c)。或者这个解释还不够清楚。 - user.dz
1我输入的命令出现了错误。我输入的命令是:nmcli c up id "Apollo III Connect"。它出现了一个错误。当我去掉id这个单词并输入以下内容时,它可以无错误连接:nmcli c "Apollo III Connect"。我现在明白如何连接了。你说id是参数,并建议用连接名称替换id这个单词,你将其命名为<WiFiConn>。谢谢! - L. D. James
@L.D.James,你在使用16.04版本吗?能告诉我你运行nmcli -v的输出结果吗? - user.dz
1mcli tool, version 1.2.0 - L. D. James
1如何保存连接设置?如果这是我第一次连接到一个WiFi网络! - Cirelli94
6为了保存连接设置: sudo nmcli dev wifi con "SSID_NAME" password PASSWORD "CONFIG_NAME" 要自动查找已保存的连接设置: nmcli c - Cirelli94
@Cirelli94 好的,看起来你已经找到了,只需连接到新的Wifi就可以让nm将其保存为新的条目,不需要额外操作。 - user.dz
在服务器安装中,默认情况下似乎没有安装nmcli。如果我们没有可用的网络连接,我们该如何安装它呢?或者,我们如何使用默认安装的iw来执行这些步骤,尽管它似乎更难使用? - Jules
当密码错误时,nmcli会弹出一个图形用户界面输入框(用于重新输入正确的密码)。这是无法通过脚本来实现的 - 有没有一种方法可以禁用图形用户界面? - Berry Tsakala
@BerryTsakala 在进行之前,你可以先检查一下SSID的Security字段是否具有与none不同的值。 - ignacio

nmtui ncurses 解决方案

非常好用的交互式 ncurses 网络管理器选项:

nmtui

如果由于某种原因未安装,Debian软件包为:
sudo apt install network-manager

nm-applet(默认的顶部栏图标)和nm-cli一同打包,因此广泛可用。
截图:

enter image description here

在Ubuntu 17.10中进行了测试。

谢谢!不知为何,我的Ubuntu无法连接WiFi,所以我插入了以太网线,并点击了有线连接上的激活按钮,然后就好了! - asgs
@给那些给我点踩的人,请解释一下,我从不还击;-) - Ciro Santilli OurBigBook.com
3同样适用于Ubuntu 16.01,太棒了!这是个很好的解决方案! - Jan Sila
7这个解决方案在我看来比上面的更直观。除非你想学习Linux/Unix如何连接WiFi,否则这似乎是一个理想的选择并按回车键的解决方案。在Ubuntu 18上运行良好。 - jamzsabb
2这在Ubuntu 18.04上“只是运行正常”。 - Ryre
1Jetson Nano...而且它还很有用地保持了eth0的连接(我是无头运行的,没有丢失ssh会话)。 - P.Windridge
1非常感谢!这些年来,我不止一次地需要救援我的笔记本电脑,每次都得查找连接Wi-Fi所需的命令。nmtui是最好的解决方案,而且简单易用! - Sarke

如果你的Wi-Fi接入点已保存,它将自动连接。使用更简单的命令打开或关闭无线功能:
nmcli nm wifi on
nmcli nm wifi off

在更新的版本上:
nmcli radio wifi on
nmcli radio wifi off

请参考man nmcli

2如何在启动时使NM自动启用wifi?每次重新启动时,网络管理器都会以wifi禁用的状态启动。 - Cerin
@Cerin,你可以尝试将这个命令添加到启动应用程序中,具体方法请参考https://askubuntu.com/questions/243139/how-to-add-application-to-startup-application-menu - user.dz
在Ubuntu 14.04及以上版本中,如何操作呢? - monitor35

如果你想连接到一个名为"PrettyFlyForAWiFi-5G"的网络。
nmcli -a d wifi connect PrettyFlyForAWiFi-5G

-a(或--ask)表示它会要求您输入密码。连接将被保存,并且如果您重新启动计算机,应该会自动连接。
您可以在末尾添加password <your password>(字面意思是password后跟实际密码)。
nmcli d wifi connect PrettyFlyForAWiFi-5G password 12345678

但是在此之前,可能要运行unset HISTFILE,这样你的WiFi密码就不会保存到~/.bash_history文件中了。
查看周围的所有WiFi网络(--rescan yes是可选的,如果没有它,网络列表可能会延迟30秒)
nmcli d wifi list --rescan yes

会输出类似的结果
IN-USE  SSID                         MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
        PrettyFlyForAWiFi-5G         Infra  44    405 Mbit/s  59      ▂▄▆_  WPA2
        PrettyFlyForAWiFi            Infra  6     195 Mbit/s  41      ▂▄__  WPA1 WPA2

忘记一个连接(在运行nmcli -a d wifi connect <name>之后保存的连接)
nmcli c delete PrettyFlyForAWiFi-5G

查看所有已保存的连接列表
nmcli c

你可以使用nmcli connection代替nmcli c <whatever>,以及nmcli device代替nmcli d

nmcliNetworkManager的命令行界面(它是GNOME的一部分,Ubuntu的默认桌面环境),已经安装在Ubuntu上。

别忘了设置你的国家代码以使用完美的规定:

sudo iw reg set <2 letter country code>

sudo nano /etc/default/crda 

1使用 nmcli 时,如果密码输入错误,会弹出一个窗口重新要求输入密码。你是否知道是否有可能禁用这个功能?在非交互式脚本中使用 nmcli 时会很烦人... - borizzzzz