systemd-client

[systemd dbus] client lib using [dbus-codegen]

Examples

Blocking

list units ```rust use systemdclient::{ buildblocking_client, manager::blocking::OrgFreedesktopSystemd1Manager, models::{IntoModel, Unit}, Result, SystemdObjectType, };

fn main() -> Result<()> { let client = buildblockingclient(SystemdObjectType::Manager)?; let units = client.listunits()?; for unit in units { let unit: Unit = unit.intomodel()?; println!("{:#?}", unit); } Ok(()) } create and start service rust use systemdclient::{ buildblockingclient, createunitconfigurationfile, manager::blocking::OrgFreedesktopSystemd1Manager, Result, ServiceConfiguration, ServiceUnitConfiguration, SystemdObjectType, UnitConfiguration, };

/* * Run example as superuser since we start a service * sh * cargo build --example start_service_blocking * sudo ./target/debug/examples/start_service_blocking * */ fn main() -> Result<()> { let unitbuilder = UnitConfiguration::builder().description("test service"); let svcbuilder = ServiceConfiguration::builder().execstart(vec!["/bin/sleep", "10"]); let svcunit = ServiceUnitConfiguration::builder() .unit(unitbuilder) .service(svcbuilder) .build(); let svcunitliteral = format!("{}", svcunit); // create /etc/systemd/system/test.service createunitconfigurationfile("test.service", svcunitliteral.asbytes())?; let client = buildblockingclient(SystemdObjectType::Manager)?; let jobpath = client.startunit("test.service", "replace")?; println!("{}", jobpath); let svcunitpath = client.getunit("test.service")?; println!("{}", svcunit_path); Ok(()) } ```

Non Block

list units ```rust use systemdclient::{ buildnonblock_client, manager::nonblock::OrgFreedesktopSystemd1Manager, models::{IntoModel, Unit}, Result, SystemdObjectType, };

[tokio::main]

pub async fn main() -> Result<()> { let (client, jh) = buildnonblockclient(SystemdObjectType::Manager)?; let units = client.listunits().await?; for unit in units { let unit: Unit = unit.intomodel()?; println!("{:#?}", unit); } // close connection jh.abort(); Ok(()) } create and start service rust use systemdclient::{ buildnonblockclient, createunitconfigurationfile, manager::nonblock::OrgFreedesktopSystemd1Manager, Result, ServiceConfiguration, ServiceUnitConfiguration, SystemdObjectType, UnitConfiguration, };

/* * Run example as superuser since we start a service * sh * cargo build --example start_service_nonblock * sudo ./target/debug/examples/start_service_nonblock * */

[tokio::main]

async fn main() -> Result<()> { let unitbuilder = UnitConfiguration::builder().description("test service"); let svcbuilder = ServiceConfiguration::builder().execstart(vec!["/bin/sleep", "10"]); let svcunit = ServiceUnitConfiguration::builder() .unit(unitbuilder) .service(svcbuilder) .build(); let svcunitliteral = format!("{}", svcunit); // create /etc/systemd/system/test.service createunitconfigurationfile("test.service", svcunitliteral.asbytes())?; let (client, jh) = buildnonblockclient(SystemdObjectType::Manager)?; let jobpath = client.startunit("test.service", "replace").await?; println!("{}", jobpath); let svcunitpath = client.getunit("test.service").await?; println!("{}", svcunit_path); // close connection jh.abort(); Ok(()) } ```

Development

Install Tools

sh sudo apt install libdbus-1-dev pkg-config

Codegen

edit build.rs and create module for dbus object