# D-Bus Executor

Launch arbitrary programs via D-Bus.

## Background

Sometimes one needs to launch a program over a D-Bus channel (e.g., if the
originating context isn't permitted to exec arbitrary software). There is a
good utility for this,
[dbus-app-launcher](https://github.com/DvdGiessen/dbus-app-launcher/), but
using this in certain Linux distros can be a challenge as the package needs to
be manually rebuilt every time there's an update to the Haskell runtime or a
dependency.

This is a statically-compilable reimplementation that is intended to be drop-in
replacement and should not require rebuilding.

## Usage

Put this somewhere on your $PATH and then set up a systemd service that
launches it when a D-Bus message comes through. A sample systemd service is
provided in `./net.arusahni.dbusexecutor.service`, and can be placed in
`~/.local/share/dbus-1/services/`. Be sure to update it with the absolute path
to the `dbus-executor` binary.

## Development

Launch the utility

```shell
DBUS_EXEC_LOG=dbus_executor=trace cargo run
```

Fire a message. `gdbus` is recommended since it exposes a nicer, JSON-like
syntax for complex types such as hashmaps and lists.

```shell
gdbus call --session \
    --dest net.arusahni.DbusExecutor \
    --object-path /net/arusahni/DbusExecutor \
    --method net.arusahni.DbusExecutor.Exec.CmdArgsEnv \
    "/bin/ls" '["-la", "/bin/"]' "{\"KEY1\": \"VALUE1\", \"KEY2\": \"VALUE2\"}"
```