From d13768607cf80fca2c373ed51f41fb546599cbfc Mon Sep 17 00:00:00 2001 From: Lucy Date: Thu, 21 Jul 2022 14:26:32 -0400 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Use=20session=20proxy=20wh?= =?UTF-8?q?en=20stopping=20systemd=20target?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 4 ++-- src/systemd.rs | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6e51e39..defc208 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,8 +42,8 @@ async fn main() -> Result<()> { .wrap_err("failed to start systemd target")?; // Always stop the target when the process exits or panics. scopeguard::defer! { - if let Ok(manager) = systemd_client::manager::build_blocking_proxy() { - manager.stop_unit("cosmic-session.target", "replace").ok(); + if let Err(error) = systemd::stop_systemd_target() { + error!("failed to stop systemd target: {:?}", error); } } let env_vars = env_rx diff --git a/src/systemd.rs b/src/systemd.rs index 566a19a..c2f643e 100644 --- a/src/systemd.rs +++ b/src/systemd.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only use color_eyre::{eyre::WrapErr, Result}; -use systemd_client::manager::SystemdManagerProxy; +use systemd_client::manager::{SystemdManagerProxy, SystemdManagerProxyBlocking}; pub async fn start_systemd_target() -> Result<()> { let connection = zbus::Connection::session().await?; @@ -14,3 +14,13 @@ pub async fn start_systemd_target() -> Result<()> { .wrap_err("failed to start cosmic-session.target")?; Ok(()) } + +pub fn stop_systemd_target() -> Result<()> { + let connection = zbus::blocking::Connection::session().wrap_err("failed to connect to zbus")?; + let manager = SystemdManagerProxyBlocking::new(&connection) + .wrap_err("failed to connect to org.freedesktop.systemd1.Manager")?; + manager + .stop_unit("cosmic-session.target", "replace") + .wrap_err("failed to stop cosmic-session.target")?; + Ok(()) +}