Home

Awesome

DBus for Lua.

ldbus is a C binding to dbus for Lua.

Compatible with Lua 5.1 and 5.2 (thanks compat-5.2).

Status

Installation

ldbus is on moonrocks: https://rocks.moonscript.org/modules/daurnimator/ldbus

Install via luarocks, you will need to provide paths to dbus/dbus.h and dbus/dbus-arch-deps.h

luarocks install --server=http://rocks.moonscript.org/manifests/daurnimator ldbus DBUS_INCDIR=/usr/include/dbus-1.0/ DBUS_ARCH_INCDIR=/usr/lib/dbus-1.0/include

Usage

example.lua is a lua version of Matthew Johnson's example

Bound from C

CLuaComments
dbus_bus_get()ldbus.bus.get()Takes type as one of "session", "system" or "starter". The connection will not have exit_on_disconnect set.
dbus_bus_register()ldbus.bus.register()
dbus_bus_set_unique_name()ldbus.bus.set_unique_name()
dbus_bus_get_unique_name()ldbus.bus.get_unique_name()
dbus_bus_request_name()ldbus.bus.request_name()Takes flags as a table contain keys "allow_replacement", "do_not_queue" and "replace_existing"; On success returns one of "primary_owner", "in_queue", "exists" or "already_owner"
dbus_bus_release_name()ldbus.bus.release_name()On success, returns one of "released", "non_existant" or "not_owner"
dbus_bus_name_has_owner()ldbus.bus.name_has_owner()
dbus_bus_start_service_by_name()ldbus.bus.start_service_by_name()
dbus_bus_add_match()ldbus.bus.add_match()On success, returns one of "success" or "already_running"
dbus_bus_remove_match()ldbus.bus.remove_match()
dbus_connection_open()ldbus.connection.open()
dbus_connection_get_is_connected()my_conn:get_is_connected()
dbus_connection_get_is_authenticated()my_conn:get_is_authenticated()
dbus_connection_get_is_anonymous()my_conn:get_is_anonymous()
dbus_connection_get_server_id()my_conn:get_server_id()
dbus_connection_send()my_conn:send()
dbus_connection_send_with_reply()pending_call = my_conn:send_with_reply(msg [, timeout])Timeout is in seconds, when not provided there will be no timeout.
dbus_connection_send_with_reply_and_block()response_msg = my_conn:send_with_reply_and_block(msg [, timeout])Timeout is in seconds, when not provided there will be no timeout.
dbus_connection_flush()my_conn:flush()
dbus_connection_read_write_dispatch()my_conn:read_write_dispatch()
dbus_connection_read_write()my_conn:read_write()
dbus_connection_pop_message()my_conn:pop_message()
dbus_connection_get_dispatch_status()my_conn:get_dispatch_status()
dbus_connection_dispatch()my_conn:dispatch()
dbus_connection_set_watch_functions()my_conn:set_watch_functions()
dbus_connection_set_timeout_functions()my_conn:set_timeout_functions()
dbus_connection_set_dispatch_status_function()my_conn:set_dispatch_status_function()
dbus_connection_set_wakeup_main_function()my_conn:set_wakeup_main_function(callback)
dbus_connection_register_object_path()my_conn:register_object_path()
dbus_connection_register_fallback()my_conn:register_fallback()
dbus_connection_unregister_object_path()my_conn:unregister_object_path()
dbus_connection_set_max_message_size()my_conn:set_max_message_size()
dbus_connection_get_max_message_size()my_conn:get_max_message_size()
dbus_connection_set_max_received_size()my_conn:set_max_received_size()
dbus_connection_get_max_received_size()my_conn:get_max_received_size()
dbus_connection_get_outgoing_size()my_conn:get_outgoing_size()
dbus_connection_has_messages_to_send()my_conn:has_messages_to_send()
dbus_message_new()ldbus.message.new(type_str)The type is taken as a string (uses dbus_message_type_from_string())
dbus_message_new_method_call()ldbus.message.new_method_call()
dbus_message_new_signal()ldbus.message.new_signal()
dbus_message_get_serial()my_message:get_serial()
dbus_message_set_reply_serial()my_message:set_reply_serial()
dbus_message_get_reply_serial()my_message:get_reply_serial()
dbus_message_new_method_return()my_message:new_method_return()
dbus_message_new_error()my_message:new_error()
dbus_message_copy()my_message:copy()
dbus_message_get_type()my_message:get_type()
dbus_message_iter_init()my_iter = my_message:iter_init([my_iter])Returns nil if message has no arguments
dbus_message_iter_init_append()my_iter = my_message:iter_init_append([my_iter])
dbus_message_set_no_reply()my_message:set_no_reply()
dbus_message_get_no_reply()my_message:get_no_reply()
dbus_message_set_auto_start()my_message:set_auto_start()
dbus_message_get_auto_start()my_message:get_auto_start()
dbus_message_set_path()my_message:set_path()
dbus_message_get_path()my_message:get_path()
dbus_message_get_path_decomposed()my_message:get_path_decomposed()
dbus_message_set_interface()my_message:set_interface()
dbus_message_get_interface()my_message:get_interface()
dbus_message_set_member()my_message:set_member()
dbus_message_get_member()my_message:get_member()
dbus_message_set_error_name()my_message:set_error_name()
dbus_message_get_error_name()my_message:get_error_name()
dbus_message_set_destination()my_message:set_destination()
dbus_message_get_destination()my_message:get_destination()
dbus_message_set_sender()my_message:set_sender()
dbus_message_get_sender()my_message:get_sender()
dbus_message_get_signature()my_message:get_signature()
dbus_message_iter_has_next()bool = my_message_iter:has_next()
dbus_message_iter_next()bool = my_message_iter:next()
dbus_message_iter_get_element_type()type = my_message_iter:get_element_type()DBUS_TYPE_INVALID is returned as nil
dbus_message_iter_recurse()sub_iter = my_message_iter:recurse([sub_iter])Creates a new DBusMessageIter if one is not passed
dbus_message_iter_get_signature()sig = my_message_iter:get_signature()
dbus_message_iter_get_basic()object = my_message_iter:get_basic()number types are all returned as lua numbers (even 64bit integers at the moment; so watch out); strings, object paths and signatures will be returned as strings
dbus_message_iter_append_basic()my_message_iter:append_basic(object [, type])
dbus_message_iter_open_container()sub_iter = my_message_iter:open_container(type [, sign [, sub_iter]])Creates sub_iter if not passed. Returns the sub_iter or nil on failure
dbus_message_iter_close_container()ok = my_message_iter:close_container(sub_iter)
dbus_pending_call_set_notify()my_pending_call:set_notify(callback)Callback gets no arguments
dbus_pending_call_cancel()my_pending_call:cancel()
dbus_pending_call_get_completed()`completed = my_pending_call:get_completed()
dbus_pending_call_steal_reply()`message = my_pending_call:steal_reply()
dbus_pending_call_block()my_pending_call:block()
dbus_timeout_get_interval()secs = my_timeout:get_interval()Returned number is in seconds (rather than milliseconds)
dbus_timeout_handle()ok = my_timeout:handle()
dbus_timeout_get_enabled()enabled = my_timeout:get_enabled()
DBUS_WATCH_READABLEldbus.watch.READABLE
DBUS_WATCH_WRITABLEldbus.watch.WRITABLE
DBUS_WATCH_HANGUPldbus.watch.HANGUP
DBUS_WATCH_ERRORldbus.watch.ERROR
dbus_watch_get_unix_fd()fd = my_watch:get_unix_fd()Returns nil when no fd is available
dbus_watch_get_socket()fd = my_watch:get_socket()Returns nil when no fd is available
dbus_watch_get_flags()flags = my_watch:get_flags()flags will be the a number
dbus_watch_handle()ok = my_watch:handle(flags)
dbus_watch_get_enabled()enabled = my_watch:get_enabled()

Other

ldbus.types

A table of the dbus types from name to type (as a character)

keyvalue
"boolean""b"
"byte""y"
"double""d"
"int16""n"
"int32""i"
"int64""x"
"uint16""q"
"uint32""u"
"uint64""t"
"string""s"
"signature""g"
"object_path""o"
"array""a"
"dict_entry""e"
"variant""v"
"struct""r"

ldbus.basic_types

A table of the dbus basic types from name to type (as a character)

keyvalue
"boolean""b"
"byte""y"
"double""d"
"int16""n"
"int32""i"
"int64""x"
"uint16""q"
"uint32""u"
"uint64""t"
"string""s"
"signature""g"
"object_path""o"

my_iter = ldbus.message.iter.new()

Creates a new DBusMessageIter object

new_iter = my_iter:clone()

Creates a copy of the given DBusMessageIter