主要观点:最近为一个有趣的副业项目,需将 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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。