plugin-dbus
| Placement | runtime (out-of-process over gRPC) |
| Source | github.com/opencharly/charly/candy/plugin-dbus |
| Version | 2026.187.1200 |
| Candy | plugin-dbus |
This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).
Providers
Section titled “Providers”The reserved words this plugin serves:
dbus— verb class
What it does
Section titled “What it does”OUT-OF-TREE charly plugin serving the dbus live-container check verb — a
standalone Go module (go.mod + main.go) that interacts with D-Bus services inside
a running deployment (list, call, introspect, notify) over go-plugin gRPC via the
charly plugin SDK (github.com/opencharly/sdk). charly’s loader fetches this candy’s repo,
go-builds the provider binary on the HOST, and serves it OUT-OF-PROCESS via
LocalTransport — so the D-Bus driver lives HERE, out of charly’s core check
surface. STRUCTURAL externalization, NOT a dep-shed: godbus stays in charly’s core
for the Secret Service / GPG secrets — the verb drives the venue’s session bus
with gdbus, never godbus. The dbus-exclusive fields live in the plugin’s OWN
#DbusInput (schema/dbus.cue): the verb method enum (the former core #DbusMethod)
plus dest/path/member/arg/text — member is the D-Bus interface.Method a call
invokes (renamed from the former shared method #Op modifier); the plugin decodes
them from the step’s desugared plugin_input, and only the genuinely shared step
modifiers (matchers, description) still ride core #Op. It dispatches through the
provider registry exactly like a built-in (ResolveVerb → grpcProvider →
invokeVerbProvider hands it the full #Op). EXEC-based (the second, after record):
the host attaches its live DeployExecutor over the E3b reverse channel and this
plugin dials back through the SDK (sdk.ExecutorFromInvoke) to RunCapture gdbus
against the venue’s session bus — it owns no podman / SSH machinery and no godbus.
The R10 consumer is a desktop pod bed whose check composes this plugin (the
sway-browser-vnc bed’s dbus list probe).
Parameter schema
Section titled “Parameter schema”The CUE schema below is the authoritative grammar for this plugin’s input. It is the same single source that generates the plugin’s Go parameter types and answers the runtime Describe RPC, so this page cannot disagree with either.
schema/dbus.cue
Section titled “schema/dbus.cue”// This plugin's OWN CUE schema — the typed plugin_input for the `dbus`// live-container check verb, served over the Describe channel. It is the SINGLE// SOURCE for this plugin's params, used two ways (the same contract core `spec`// and the reference plugin-http use)://// 1. GENERATE the Go param struct — `cue exp gengotypes` (driven by task cue:gen,// which wraps this with `package params` + `@go(params)`) emits// ../params/cue_types_gen.go, so the provider decodes plugin_input into a TYPED// struct, never a hand-parsed map.// 2. VALIDATE authored input AT RUNTIME — the host splices this source onto the// base (base ++ plugin) and validates every authored `dbus` step's// plugin_input against #DbusInput.//// Every dbus-EXCLUSIVE field lives here (they left core #Op in the// schema-compaction cutover): the verb `method` enum (the former core #DbusMethod)// plus dest/path/member/arg/text. `member` is the D-Bus MEMBER (the fully-qualified// interface.Method name a `call` invokes) — RENAMED from the former shared `method`// #Op modifier, so it cannot collide with the input's verb-method key. The step's// shared modifiers stay on #Op, read off the marshalled step Op: the// exit_status/stdout/stderr matchers (sdk.VerbVerdict) and `description` (the// step's report label, doubling as the notify body).//// SELF-CONTAINED: it references NO base def, so it compiles standalone (gengotypes +// the SDK's serve-side check) AND splices onto the base (base ++ plugin is a// def-name collision check, not a base-reference resolver).#DbusInput: { // method — the dbus verb method (the former core #DbusMethod enum). method: "list" | "call" | "introspect" | "notify" // dest — the D-Bus destination (bus name), e.g. org.freedesktop.Notifications. dest?: string // path — the D-Bus object path, e.g. /org/freedesktop/Notifications. path?: string // member — the D-Bus member: the fully-qualified interface.Method a `call` // invokes (e.g. org.freedesktop.Notifications.GetCapabilities). Formerly the // shared `method` #Op modifier; renamed to proper D-Bus terminology. member?: string // arg — typed `type:value` call arguments (string/uint32/int32/int64/uint64/ // boolean/double), converted to GVariant text for gdbus. arg?: [...string] @go(Args) // text — the notification summary (title) for `notify`. text?: string}See also the candy reference for this candy’s install surface.