lua lgi 订阅 DBus 信号
2019-3-7 10:48:47
收藏:0
阅读:144
评论:1
这是我第一次使用 L1UA,我正在尝试订阅一个回调函数,以在接收到 DBus 信号时执行。我找到了一些关于如何使用 lgi 发送 DBus 信号的示例,但我没有找到有关如何监听信号的任何内容。 是否有任何要参考的示例呢?在 lgi 文档中我没找到它。
谢谢
[EDIT]
如果有人发现有用,我已经通过 dbus_proxy(https://github.com/stefano-m/lua-dbus_proxy)成功订阅信号。这个示例代码订阅一个信号,然后发射一个来验证回调是否被调用:
local lgi = require('lgi')
local GLib = lgi.GLib
local p = require('dbus_proxy')
local Bus = p.Bus
local Proxy = p.Proxy
local proxy = Proxy:new(
{
bus = Bus.SESSION,
name = "org.freedesktop.DBus",
path= "/org/freedesktop/DBus",
interface = "org.freedesktop.DBus"
}
)
local called = false
local received_proxy
local received_params
local function callback(proxy_obj, ...)
print('Hi!')
called = true
received_proxy = proxy_obj
received_params = {...}
end
local signal_name = "NameOwnerChanged"
local sender_name = nil -- any sender
proxy:connect_signal(callback, signal_name, sender_name)
local bus_name = "com.example.Test2"
local DBUS_NAME_FLAG_REPLACE_EXISTING = 2
proxy:RequestName(bus_name, DBUS_NAME_FLAG_REPLACE_EXISTING)
main_loop = GLib.MainLoop()
main_loop:run()
我将继续寻找
此外,我正在努力弄清如何将此 Python 代码转换为使用 lgi dbus 发射 dbus 信号的 LUA 代码:
class DBUSTestInterface(object):
"""
Server_XML definition.
Emit / Publish a signal that is a random integer every second
type='i' for integer.
"""
dbus = """
<node>
<interface name="com.test.device.aaa">
<signal name="get">
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='i'/>
</signal>
</interface>
</node>
"""
get = signal()
emit = DBUSTestInterface()
bus.publish("com.test.device.get", emit)
如果您能提供一些示例或指出我可以找到它的位置,我将不胜感激!
谢谢!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

以下是代码示例,它订阅系统总线上所有对象路径的 bluez PropertiesChanged 信号。您可以根据需要更改总线类型、信号、接口名称等并尝试它。
local lgi = require 'lgi' local GLib, Gio = lgi.GLib, lgi.Gio local main_loop = GLib.MainLoop() --获取系统总线 local bus = Gio.bus_get_sync(Gio.BusType.SYSTEM) --创建一个用户回调函数,需要在接收信号时执行 function onDBusSignalCallback(conn, sender, object_path, interface_name, signal_name, user_data) local str = string.format("SIGNAL - object_path:%s, interface_name:%s, signal_name:%s", object_path, interface_name, signal_name) print(str) end --订阅任何信号。 local sub_id = bus:signal_subscribe('org.bluez', 'org.freedesktop.DBus.Properties', 'PropertiesChanged', nil, nil, Gio.DBusSignalFlags.NONE, onDBusSignalCallback) if sub_id then print("Subscription id", sub_id) end main_loop:run()