2025-07-29 15:57:38 +02:00
|
|
|
use std::os::fd::OwnedFd;
|
|
|
|
|
|
2025-08-11 16:51:57 +02:00
|
|
|
use anyhow::{Context, Result};
|
2026-03-05 15:56:06 -08:00
|
|
|
use logind_zbus::manager::{InhibitType::HandleLidSwitch, ManagerProxy};
|
2025-07-29 15:57:38 +02:00
|
|
|
|
2026-03-05 15:56:06 -08:00
|
|
|
use crate::state::Common;
|
|
|
|
|
|
|
|
|
|
pub fn inhibit_lid(common: &Common) -> Result<OwnedFd> {
|
|
|
|
|
let fd = futures_executor::block_on(async {
|
|
|
|
|
let conn = common.dbus_state.system_conn().await?;
|
|
|
|
|
let manager = ManagerProxy::new(conn).await?;
|
|
|
|
|
manager
|
|
|
|
|
.inhibit(
|
|
|
|
|
HandleLidSwitch,
|
|
|
|
|
"cosmic-comp",
|
|
|
|
|
"External output connected",
|
|
|
|
|
"block",
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
})?;
|
2025-07-29 15:57:38 +02:00
|
|
|
|
|
|
|
|
Ok(fd.into())
|
|
|
|
|
}
|
2025-08-11 16:51:57 +02:00
|
|
|
|
2026-03-05 15:56:06 -08:00
|
|
|
pub fn lid_closed(common: &Common) -> Result<bool> {
|
|
|
|
|
futures_executor::block_on(async {
|
|
|
|
|
let conn = common.dbus_state.system_conn().await?;
|
|
|
|
|
let manager = ManagerProxy::new(conn).await?;
|
|
|
|
|
manager
|
|
|
|
|
.lid_closed()
|
|
|
|
|
.await
|
|
|
|
|
.context("Failed to talk to logind")
|
|
|
|
|
})
|
2025-08-11 16:51:57 +02:00
|
|
|
}
|