Rebus
Rebus is a D-Bus library for Elixir. It connects to a message bus or peer, makes method calls, sends and receives signals, exports objects that answer method calls, and passes Unix file descriptors over local sockets.
Rebus supports Elixir 1.18 and later on Linux and macOS. Windows is not supported. It has no client-side proxies and does not parse introspection data, so clients build and match D-Bus messages directly.
Installation
Add Rebus to your dependencies:
def deps do
[
{:rebus, "~> 0.3.0"}
]
end
Rebus is pure Elixir by default. Passing Unix file descriptors is opt-in,
because it needs a small native library: enable it in your application's
config/config.exs. Rebus installs the library precompiled on x86_64 and
aarch64 Linux, with glibc or musl, and on macOS; anywhere else the build
needs make and a C++17 compiler such as GCC or Clang. See
Enabling descriptor passing.
config :rebus, unix_fds: true
Examples
Call a method:
{:ok, conn} = Rebus.connect(:session)
message =
Rebus.Message.new!(:method_call,
path: "/org/freedesktop/DBus",
interface: "org.freedesktop.DBus",
destination: "org.freedesktop.DBus",
member: "ListNames"
)
{:ok, %Rebus.Message{type: :method_return, body: [names]}} =
Rebus.call(conn, message)
:ok = Rebus.close(conn)
Export an object and give it a well-known name:
defmodule Calculator do
use Rebus.Object
@calculator Rebus.Interface.new!("org.example.Calculator",
methods: [{"Add", in: [a: "i", b: "i"], out: [sum: "i"]}]
)
@impl true
def interfaces, do: [@calculator]
@impl true
def init(_arg), do: {:ok, %{}}
@impl true
def handle_method(%{member: "Add"}, [a, b], state), do: {:reply, [a + b], state}
end
{:ok, conn} = Rebus.connect(:session)
{:ok, _pid} = Rebus.Object.start_link(Calculator, nil, conn: conn, path: "/org/example/Calculator")
{:ok, :primary_owner} = Rebus.Bus.request_name(conn, "org.example.Calculator")
The HexDocs API reference documents connection options, results, errors, and wire-format modules. The practical guides cover exporting objects, authentication, signal subscriptions, and Unix file descriptors.
License
Rebus is licensed under the MIT License.