主要观点:最近为一个有趣的副业项目,需将 Linux 电脑的 wifi 卡设置为“接入点”模式,从 Rust 语言出发,虽可调用nmcli命令行工具,但想在二进制文件内完成,NetworkManager 有 D-Bus API 暴露所有配置选项,Rust 有zbus crate,但其文档在某些关键处较模糊,故写下此过程供遇到相同问题的人参考。
关键信息:
- 用
zbus-xmlgen工具通过 D-Bus 的 introspection 能力自动生成与给定 D-Bus 端点接口的代码,运行$ zbus-xmlgen system org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Settings生成settings.rs文件。 - 生成的代码中
add_connection函数的参数是HashMap,需参考 NetworkManager 的文档(https://networkmanager.dev/do...)确定其内容,Python 示例代码可提供参考,需手动组装HashMap。 - 可修改
zbus-xmlgen生成的代码,添加类型以确保传入合规参数,避免运行时错误,目前对于嵌套结构体,需使用HashMap,可将add_connection函数的参数从HashMap<&str, &Value>改为HashMap<&str, Value>。
重要细节: - 生成的代码中
add_connection函数的参数类型及含义在文档中不够清晰。 - 示例代码中展示了如何构建用于设置配置的字典结构。
- 完成设置后需处理
add_connection可能返回的错误,且二进制文件需以root权限运行,否则会出错,还可通过 D-Bus 与systemd交互启动或停止服务,与Notifications守护进程交互显示桌面通知。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。