git.delta.rocks / remowt / refs/commits / 11447649e1e7

difftreelog

source

cmds/remowt-agent/src/bus.rs975 Bsourcehistory
1use std::process::Stdio;23use anyhow::Context as _;4use futures::StreamExt as _;5use tokio::process::{Child, Command};6use tokio_util::codec::{FramedRead, LinesCodec};7use zbus::Connection;89pub struct PrivateBus {10	pub address: String,11	pub conn: Connection,12	_child: Child,13}1415pub async fn spawn() -> anyhow::Result<PrivateBus> {16	let mut child = Command::new("dbus-daemon")17		.args(["--session", "--nofork", "--print-address"])18		.stdout(Stdio::piped())19		.kill_on_drop(true)20		.spawn()21		.context("spawning dbus-daemon for the private bus")?;2223	let stdout = child.stdout.take().expect("piped");24	let address = FramedRead::new(stdout, LinesCodec::new())25		.next()26		.await27		.context("dbus-daemon exited before printing its address")?28		.context("reading dbus-daemon address")?;2930	let conn = zbus::connection::Builder::address(address.as_str())?31		.build()32		.await33		.context("connecting to the private bus")?;3435	Ok(PrivateBus {36		address,37		conn,38		_child: child,39	})40}