DBus Lua API 文档目录
本目录包含了 libmcpp DBus Lua 绑定的完整 API 文档。
快速导航
入门文档
从 ../dbus.md 开始,了解 DBus Lua 绑定的概述、模块结构和快速开始。
文档列表
核心模块
blocking.md
阻塞模式 DBus 接口,包括:
blocking.new()- 创建连接blocking.open_user()- 打开用户会话blocking.shutdown()- 关闭库- 连接对象方法(start, request_name, close, flush, dispatch, run_once)
nonblock.md
非阻塞模式 DBus 接口,包括:
nonblock.new()- 创建连接nonblock.open_user()- 打开用户会话nonblock.shutdown()- 关闭库- 连接对象方法(start, request_name, close, flush, dispatch)
- 共享内存相关方法(notify_signal, add_match)
message.md
消息创建工具,包括:
message.new_method_call()- 创建方法调用消息- 消息对象的生命周期管理
connection.md
内部连接对象 API,包括:
send_with_reply_and_block()- 发送并等待回复- 连接管理方法(close, flush, dispatch)
- 名称管理(request_name, unique_name)
- 底层访问(to_raw)
error.md
错误对象,包括:
is_set()- 检查错误ensure_ok()- 确保无错误- 错误属性(name, message)
- 错误处理模式
interface.md
D-Bus接口模块,包括:
new()- 创建接口add_property()- 添加属性add_method()- 添加方法add_signal()- 添加信号set_property()/get_property()- 属性访问get_name()- 获取接口名称
object.md
D-Bus对象模块,包括:
new()- 创建对象register_interface()- 注册接口get_interface()- 获取接口set_property()/get_property()- 属性访问(返回错误码)
sd_bus.md
sd_bus 高级客户端模块,包括:
open_user()- 创建用户会话总线连接request_name()- 请求服务名称add_match()/remove_match()- 信号匹配规则管理register_object()/unregister_object()- 动态对象注册call_shm_get_property()- 共享内存属性访问bus属性 - 访问底层连接对象
文档结构
lua_api/dbus/
├── README.md # 本文件
├── blocking.md # 阻塞模式 (~8KB)
├── nonblock.md # 非阻塞模式 (~7KB)
├── message.md # 消息对象 (~6KB)
├── connection.md # 连接对象 (~8KB)
├── error.md # 错误对象 (~7KB)
├── interface.md # 接口模块 (~5KB)
├── object.md # 对象模块 (~5KB)
└── sd_bus.md # sd_bus 模块 (~8KB)
学习路径
初学者(脚本开发)
- 阅读 ../dbus.md 了解基本概念
- 学习 blocking.md 阻塞模式
- 学习 message.md 创建消息
- 参考 error.md 处理错误
- 查看测试示例:
tests/lua/dbus/test_blocking.lua
进阶用户(服务开发)
- 学习 nonblock.md 非阻塞模式
- 学习 connection.md 连接详细API
- 实现事件循环和消息处理
- 查看测试示例:
tests/lua/dbus/test_nonblock.lua
快速参考
创建连接
-- 阻塞模式
local dbus = ldbus.blocking.open_user()
-- 非阻塞模式
local dbus = ldbus.nonblock.open_user()
请求服务名称
local ok, err = dbus:request_name("com.example.MyService")
if not ok then
print("失败: " .. tostring(err))
end
发送消息
local msg = ldbus.message.new_method_call(
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus",
"GetId"
)
local conn = dbus.conn
local reply = conn:send_with_reply_and_block(msg, 5000)
事件循环
-- 阻塞模式
dbus:start()
while running do
dbus:run_once(100)
end
-- 非阻塞模式
dbus:start()
while running do
dbus:dispatch()
dbus:flush()
-- 处理其他事件...
end
测试示例
完整的测试示例位于:
tests/lua/dbus/test_blocking.lua- 阻塞模式测试tests/lua/dbus/test_nonblock.lua- 非阻塞模式测试tests/lua/dbus/test_message.lua- 消息测试tests/lua/dbus/test_error.lua- 错误测试
使用限制
当前 Lua 绑定的限制:
- 参数传递:不支持在 Lua 层添加消息参数
- 回复解析:不支持在 Lua 层解析回复消息
- 信号创建:不支持创建信号消息
- 回调注册:不支持注册消息回调(C++ 层可以)
这些限制可以通过以下方式解决:
- 在 C++ 层封装完整的方法调用
- 扩展 Lua 绑定添加缺失功能
- 使用 FFI 直接调用 C API
相关资源
内部文档
- C++ DBus API - C++ DBus API 文档
- DBus 详细设计 - 设计文档
外部资源
贡献
如果发现文档错误或需要补充,请提交 Issue 或 Pull Request。
版权
Copyright (c) 2024-2026 Huawei Technologies Co., Ltd.