如何在 Linux 上使用 iwd 管理无线连接
Iwd 是“iNet wireless daemon”的缩写。顾名思义,它是 Intel 为 Linux 编写的免费开源无线管理守护程序。它旨在避免使用外部库,它只依赖于集成到内核中的功能。它可以与 NetworkManager 一起使用作为 wpa_supplicant 的替代品,或者以独立模式使用。在本教程中,我们将探讨后一个选项。
在本教程中您将学习:
如何在一些最常用的 Linux 发行版上安装 iwd
如何启动并启用 iwd 守护进程
如何获取可用无线网络的列表
如何连接到受保护的网络
如何启用集成到 iwd 中的 dhcp 客户端
如何获取已知连接的列表
如何忘记连接
使用的软件要求和约定
安装
Iwd 可在所有最常用的 Linux 发行版及其衍生版本的存储库中找到。这里我们将看到如何在 Debian、Fedora 和 ArchLinux 上执行安装。
如果您是 Debian 用户,您已经知道我们可以使用许多命令在发行版上安装软件包。这里我们将使用用户友好的 apt 包装器。我们跑:
$ sudo apt install iwd
在 Fedora(Red Hat 系列的上游/社区发行版)上,我们可以使用 dnf (Dandified Yum) 安装软件包。要执行安装,我们运行以下命令:
$ sudo dnf install iwd
如果 Archlinux 是我们最喜欢的发行版,我们可以使用 pacman 包管理器来执行相同的任务。使用的语法也同样简单。我们启动终端模拟器并发出以下命令:
$ sudo pacman -Sy iwd
在命令中我们使用了选项:-S
和 -y
。第一个是 --sync
的简短版本:这将安装请求的包。第二个是 -y
(--refresh
),以便下载新的包数据库。
iwd
包提供:
iwd
守护进程iwctl
命令行实用程序iwmon
监控工具
启动并启用 iwd 守护进程
我们需要做的第一件事是启动 iwd 守护进程并可选择启用它,这样它将在启动时自动启动。我们怎样才能做到呢?现在几乎所有主要的 Linux 发行版都使用 systemd 初始化系统,因此要执行该任务,我们必须使用 systemctl 实用程序。要启动守护进程,我们运行:
$ sudo systemctl start iwd
如果我们还希望守护进程在启动时自动启动,我们必须发出以下命令:
$ sudo systemctl enable iwd
实际上,我们只需一个命令即可执行这两项任务:
$ sudo systemctl enable --now iwd
一旦 iwd 服务运行,我们就可以开始扫描无线连接。
获取可用无线网络的列表
在连接到无线网络之前,我们可能需要扫描可用的接入点,并在终端上获取它们的列表。为了执行此类任务,我们需要知道的第一件事是我们计算机上可用的无线网络接口的名称,因此我们运行:
$ iwctl device list
这是我当前使用的机器上上述命令的输出:
Devices
--------------------------------------------------------------------------------
Name Address Powered Adapter Mode
--------------------------------------------------------------------------------
wlan0 xx:xx:xx:xx:xx:xx on phy0 station
数据按列组织。我们有以下信息:
设备名称
设备MAC地址
电源状态
无线适配器名称
工作模式
正如您所看到的,网络接口使用的是原始的内核名称,而不是 udev 可预测的名称。在这种情况下,设备工作在“客户端”模式,因此表的最后一列中报告“站”。
一旦我们知道了无线网络接口的名称,我们就可以开始扫描可用的连接。为了执行这样的任务,我们运行:
$ iwctl station wlan0 scan
上面的命令只会扫描可用的网络,但不会产生任何输出。要获取可用连接的列表,我们应该在其后使用附加命令:
$ iwctl station wlan0 get-networks
该命令的输出如下所示:
Available networks
--------------------------------------------------------------------------------
Network name Security Signal
--------------------------------------------------------------------------------
valinor psk ****
arda psk ****
通过查看它,我们可以看到每个网络名称、所使用的安全类型(“open”、“wep”、“psk”或“8021x”之一)以及信号强度。在下一节中,我们将尝试连接到其中一个网络。
连接到无线网络
在前面的示例中,我们了解了如何获取可用网络连接的列表,现在让我们尝试连接到一个。正如我们在上一示例中返回的输出中看到的,两个可用网络均受 psk(预共享密钥)保护,因此,要连接到其中一个网络,我们应该使用以下命令运行 iwctl
--passphrase
选项,并提供密码作为参数。让我们看一个例子。假设我想连接到“arda”网络;这就是我要运行的命令:
$ iwctl station wlan0 connect arda --passphrase mysupersecretpassphrase
要验证连接现在是否处于活动状态,我们可以运行以下命令:
$ iwctl station wlan0 show
在这种情况下,我们将收到以下输出:
Station: wlan0
--------------------------------------------------------------------------------
Settable Property Value
--------------------------------------------------------------------------------
Scanning no
State connected
Connected network arda
ConnectedBss 10:13:31:53:26:11
Frequency 2462
Security WPA2-Personal
RSSI -77 dBm
AverageRSSI -76 dBm
TxMode 802.11n
TxMCS 5
TxBitrate 52000 Kbit/s
RxBitrate 1000 Kbit/s
ExpectedThroughput 27375 Kbit/s
我们可以看到连接现在处于活动状态;但是,如果我们尝试导航到某个位置,或者只是 ping 外部地址,我们就会失败。为什么?这是因为虽然我们连接到了接入点,但我们没有为接口分配 IP 地址,也没有为其设置网关,也没有设置 dns 服务器地址。我们可以静态设置这些参数,也可以从路由器中集成的 dhcp 服务器获取它。在这种情况下,我们将使用后一个选项。
要在Linux上获取dhcp配置,我们通常使用像dhcpcd
这样的客户端;然而,Iwd 集成了 dhcp 客户端,默认情况下禁用。要激活它,我们需要在 iwd
配置文件中输入以下几行:/etc/iwd/main.conf
(默认情况下该文件可能不存在):
[General]
EnableNetworkConfiguration=true
保存配置文件后,我们只需要重新启动守护进程,就会自动为我们配置连接:
$ sudo systemctl restart iwd
断开网络连接
如果我们想结束当前活动的连接怎么办?我们用来执行此类任务的命令非常简单。在前面的示例中,我们连接到“arda”网络;要断开连接,我们将运行:
$ iwctl station wlan0 disconnect
获取已知连接的列表
iwd
服务可以方便地跟踪已知的连接。要获取它们的列表,我们可以启动以下命令:
$ iwctl known-networks list
在这种情况下,我们只连接到一个网络,正如预期的那样,该网络在命令的输出中报告:
Known Networks
--------------------------------------------------------------------------------
Name Security Hidden Last connected
--------------------------------------------------------------------------------
arda psk Oct 16, 1:15 PM
下次我们连接到网络时,我们将不需要再次提供密码等信息。 Iwd 将连接信息存储在 /var/lib/iwd
目录中。每个网络数据都存储在一个专用文件中,使用 name.security_type 模板命名。在这种情况下,“arda”网络的配置文件将是:/var/lib/iwd/arda.psk
。
如果由于某种原因我们希望 iwd 服务忘记特定网络,我们所要做的就是再次启动 iwctlknown-networks 命令,这次使用 <代码>忘记动作。例如,为了使服务忘记“arda”网络,我们将运行:
$ iwctl known-networks arda forget
结论
在本教程中,我们讨论了 iwd,它是 Intel 为 Linux 开发的 iNet 无线守护进程。我们学习了如何在一些最常用的 Linux 发行版上安装它、如何使用 systemctl 启动和启用 iwd 守护进程、如何使用 iwctl 实用程序扫描可用的无线网络以及如何连接到受保护的网络。我们还了解了如何启用集成的 dhcp 客户端、如何获取已知连接的列表,以及最后如何忘记连接。