如何在 Linux 上使用 iwd 管理无线连接如何在 Linux 上使用 iwd 管理无线连接如何在 Linux 上使用 iwd 管理无线连接如何在 Linux 上使用 iwd 管理无线连接
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Linux 上使用 iwd 管理无线连接

发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

数据按列组织。我们有以下信息:

  1. 设备名称

  2. 设备MAC地址

  3. 电源状态

  4. 无线适配器名称

  5. 工作模式

正如您所看到的,网络接口使用的是原始的内核名称,而不是 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 客户端、如何获取已知连接的列表,以及最后如何忘记连接。

©2015-2025 Norria support@norria.com