
wlctl v0.1.10
🛜 用于在 Linux 上通过 Network Manager 管理 WiFi/以太网/VPN 的 TUI

为什么
impala 是一款优秀的 WiFi TUI 工具,但它只与 iwd 通信。如果你的发行版已经运行着 NetworkManager(大部分发行版都是如此——GNOME、KDE、Ubuntu、Fedora、Pop 等),那么要想使用 impala,就必须把现有网络栈整个换掉。wlctl 保留了 impala 的用户体验,并将其指向 NetworkManager,因此它可以与你桌面环境已有的网络管理协同工作,无需任何改动。
特性
- 工作站(Station)和接入点(Access Point)模式
- WPA 企业版(802.1X)
- 多适配器——选择使用哪个适配器,可随时切换
- VPN 连接——像 nmtui 一样开关连接、管理自动连接、删除已保存的 VPN / WireGuard 配置文件;活动隧道会在右上角显示一个徽章
wlctl doctor—— 逐一检查 rfkill、驱动程序、关联、IP、DHCP、网关、DNS、互联网连接- 分享二维码、隐藏网络、速度测试
- Vim 按键,所有快捷键均可自定义
安装
# crates.io
cargo install wlctl
# Arch(AUR)
yay -S wlctl-bin
# Nix(无需安装,直接运行)
nix run github:aashish-thapa/wlctl
# 从源码安装
git clone https://github.com/aashish-thapa/wlctl && cd wlctl
cargo build --release
在 NixOS 上,将 flake 作为输入添加到配置中,然后使用 wlctl.packages.${system}.default,或者通过 nix shell github:aashish-thapa/wlctl 将其放入一个 shell 中。
需要 NetworkManager 正在运行。Nerd Fonts 可选,用于显示图标。
使用方法
运行 wlctl 启动 TUI。当出现问题,想确定是哪一层出了问题时,运行 wlctl doctor。
全局
| 操作 | 按键 |
|---|---|
| 切换面板 | Tab / Shift+Tab |
| 移动 | j k / 方向键 |
| 切换适配器模式(工作站 ↔ 接入点) | Ctrl+R |
| VPN 连接 | v |
| 退出 | q / Ctrl+C |
| 关闭弹出窗口 | Esc |
已知网络
| 操作 | 按键 |
|---|---|
| 连接 / 断开 | Space 或 Enter |
| 切换自动连接 | t |
| 忘记网络 | d |
| 设为互联网路径 | u |
| 显示全部 | a |
| 分享二维码 | p |
速度测试(需要 speedtest-cli) | Shift+S |
当 WiFi 和以太网都处于连接状态时,NetworkManager 实际用于路由互联网的链接会以绿色高亮显示,并且面板底部会明确说明( 互联网: WiFi · <ssid>)。在以太网行或已连接的 WiFi 上按下 u 可以切换默认路由(另一个链接继续保持连接状态)。
设备面板底部会显示当前活动适配器的 LAN IP(例如 wlan0 · 192.168.1.20),这样你就可以直接 SSH 连接,而无需运行 ip addr。
新网络
| 操作 | 按键 |
|---|---|
| 连接 / 断开 | Space 或 Enter |
| 连接隐藏网络 | h |
| 按名称过滤 | / |
| 显示全部 | a |
按下 / 可以在扫描列表中按 SSID 实时过滤;按 Enter 保留过滤条件,按 Esc 清除。
VPN 连接(按 v 打开)
| 操作 | 按键 |
|---|---|
| 开关 | Space 或 Enter |
| 切换自动连接 | a |
删除配置文件(确认 y/n) | d |
| 导入 WireGuard 配置 | i |
| 关闭 | Esc |
选中的隧道在连接时,其分配的 IP 和运行时间会显示在列表下方。
导入 WireGuard 配置:按下 i,然后粘贴整个配置(大多数提供商——Proton、Mullvad——会直接提供文本)或输入一个 .conf 文件的路径,然后按 Enter。wlctl 会解析该配置并创建一个 NetworkManager 配置文件——无需 nmcli。粘贴的配置按照服务器端点命名;文件导入则按照文件名命名。路径中的 ~ 会被展开。配置文件添加后不会自动连接;按 Enter 开启连接。这里不支持 OpenVPN .ovpn 文件——请使用 nmcli connection import type openvpn file <路径> 导入(需要 NetworkManager-openvpn 插件)。
设备面板
| 操作 | 按键 |
|---|---|
| 适配器信息 | i |
| 开关电源 | o |
| 诊断 | ? |
工作站模式
| 操作 | 按键 |
|---|---|
| 扫描 | s |
接入点模式
| 操作 | 按键 |
|---|---|
| 启动接入点 | n |
| 停止接入点 | x |
配置
~/.config/wlctl/config.toml。所有按键均可重新绑定。
switch = "r"
mode = "station"
esc_quit = false
vpn = "v"
[device]
infos = "i"
toggle_power = "o"
doctor = "?"
[station]
toggle_scanning = "s"
[station.known_network]
toggle_autoconnect = "t"
remove = "d"
show_all = "a"
share = "p"
speed_test = "S"
prefer = "u"
[station.new_network]
show_all = "a"
connect_hidden = "h"
filter = "/"
[access_point]
start = "n"
stop = "x"
与 impala 对比
| 特性 | impala | wlctl |
|---|---|---|
| 后端 | iwd | NetworkManager |
| 与默认桌面网络栈共存 | 否 | 是 |
| 多适配器选择器 | — | 是 |
| VPN 连接开关 | — | 是 |
doctor 子命令 | — | 是 |
致谢
派生自 pythops/impala。UI 和架构归原作者所有。
许可证
GPLv3