D-Bus session service, currently only used to exit.

This commit is contained in:
Lucy 2022-07-22 11:48:03 -04:00
parent d13768607c
commit 2bda93e030
No known key found for this signature in database
GPG key ID: EBC517FAD666BBF1
4 changed files with 61 additions and 21 deletions

View file

@ -5,6 +5,7 @@ extern crate tracing;
mod comp;
mod generic;
mod process;
mod service;
mod systemd;
use async_signals::Signals;
@ -14,6 +15,7 @@ use tokio::sync::{mpsc, oneshot};
use tokio_util::sync::CancellationToken;
use tracing::metadata::LevelFilter;
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
use zbus::ConnectionBuilder;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<()> {
@ -77,6 +79,15 @@ async fn main() -> Result<()> {
);
socket_tx.send(sockets).unwrap();
let (exit_tx, exit_rx) = oneshot::channel();
let _ = ConnectionBuilder::session()?
.name("com.system76.CosmicSession")?
.serve_at("/com/system76/CosmicSession", service::SessionService {
exit_tx: Some(exit_tx),
})?
.build()
.await?;
let mut signals = Signals::new(vec![libc::SIGTERM, libc::SIGINT]).unwrap();
loop {
tokio::select! {
@ -84,6 +95,10 @@ async fn main() -> Result<()> {
info!("compositor exited");
break;
},
_ = exit_rx => {
info!("session exited by request");
break;
},
signal = signals.next() => match signal {
Some(libc::SIGTERM | libc::SIGINT) => {
info!("received request to terminate");