mirror of
https://gitlab.steamos.cloud/holo/steamos-manager.git
synced 2025-07-13 09:52:00 -04:00
user: Add user-running manager prototype
This commit is contained in:
parent
ac823a845b
commit
24d740d178
3 changed files with 60 additions and 2 deletions
|
@ -5,7 +5,7 @@
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, ensure, Result};
|
||||||
use tokio::signal::unix::{signal, Signal, SignalKind};
|
use tokio::signal::unix::{signal, Signal, SignalKind};
|
||||||
use tokio::task::JoinSet;
|
use tokio::task::JoinSet;
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
|
@ -58,6 +58,11 @@ impl Daemon {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(&mut self) -> Result<()> {
|
pub async fn run(&mut self) -> Result<()> {
|
||||||
|
ensure!(
|
||||||
|
!self.services.is_empty(),
|
||||||
|
"Can't run a daemon with no services attached."
|
||||||
|
);
|
||||||
|
|
||||||
let mut res = tokio::select! {
|
let mut res = tokio::select! {
|
||||||
e = self.services.join_next() => match e.unwrap() {
|
e = self.services.join_next() => match e.unwrap() {
|
||||||
Ok(Ok(())) => Ok(()),
|
Ok(Ok(())) => Ok(()),
|
||||||
|
|
|
@ -24,6 +24,7 @@ mod process;
|
||||||
mod root;
|
mod root;
|
||||||
mod sls;
|
mod sls;
|
||||||
mod systemd;
|
mod systemd;
|
||||||
|
mod user;
|
||||||
mod wifi;
|
mod wifi;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -157,7 +158,7 @@ pub async fn main() -> Result<()> {
|
||||||
if args.root {
|
if args.root {
|
||||||
root::daemon().await
|
root::daemon().await
|
||||||
} else {
|
} else {
|
||||||
todo!();
|
user::daemon().await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
52
src/user.rs
Normal file
52
src/user.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2023 Collabora Ltd.
|
||||||
|
* Copyright © 2024 Valve Software
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
use anyhow::{bail, Result};
|
||||||
|
use tracing::error;
|
||||||
|
use tracing_subscriber::prelude::*;
|
||||||
|
use tracing_subscriber::{fmt, Registry};
|
||||||
|
use zbus::connection::Connection;
|
||||||
|
use zbus::ConnectionBuilder;
|
||||||
|
|
||||||
|
use crate::daemon::Daemon;
|
||||||
|
|
||||||
|
async fn create_connection() -> Result<Connection> {
|
||||||
|
let connection = ConnectionBuilder::session()?
|
||||||
|
.name("com.steampowered.SteamOSManager1")?
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
Ok(connection)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn daemon() -> Result<()> {
|
||||||
|
// This daemon is responsible for creating a dbus api that steam client can use to do various OS
|
||||||
|
// level things. It implements com.steampowered.SteamOSManager1.Manager interface
|
||||||
|
|
||||||
|
let stdout_log = fmt::layer();
|
||||||
|
let subscriber = Registry::default().with(stdout_log);
|
||||||
|
|
||||||
|
let system = match Connection::system().await {
|
||||||
|
Ok(c) => c,
|
||||||
|
Err(e) => {
|
||||||
|
let _guard = tracing::subscriber::set_default(subscriber);
|
||||||
|
error!("Error connecting to DBus: {}", e);
|
||||||
|
bail!(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let session = match create_connection().await {
|
||||||
|
Ok(c) => c,
|
||||||
|
Err(e) => {
|
||||||
|
let _guard = tracing::subscriber::set_default(subscriber);
|
||||||
|
error!("Error connecting to DBus: {}", e);
|
||||||
|
bail!(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut daemon = Daemon::new(subscriber, system.clone()).await?;
|
||||||
|
|
||||||
|
daemon.run().await
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue