main: Only launch xdg-portal on COSMIC
This commit is contained in:
parent
c44946be82
commit
5a0df6afb6
1 changed files with 30 additions and 22 deletions
52
src/main.rs
52
src/main.rs
|
|
@ -9,7 +9,10 @@ mod service;
|
||||||
mod systemd;
|
mod systemd;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
borrow::Cow, env, os::fd::{AsRawFd, OwnedFd}, sync::Arc
|
borrow::Cow,
|
||||||
|
env,
|
||||||
|
os::fd::{AsRawFd, OwnedFd},
|
||||||
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
use async_signals::Signals;
|
use async_signals::Signals;
|
||||||
|
|
@ -115,7 +118,10 @@ async fn start(
|
||||||
info!("Starting cosmic-session");
|
info!("Starting cosmic-session");
|
||||||
|
|
||||||
let mut args = env::args().skip(1);
|
let mut args = env::args().skip(1);
|
||||||
let (executable, args) = (args.next().unwrap_or_else(|| String::from("cosmic-comp")), args.collect::<Vec<_>>());
|
let (executable, args) = (
|
||||||
|
args.next().unwrap_or_else(|| String::from("cosmic-comp")),
|
||||||
|
args.collect::<Vec<_>>(),
|
||||||
|
);
|
||||||
|
|
||||||
let process_manager = ProcessManager::new().await;
|
let process_manager = ProcessManager::new().await;
|
||||||
_ = process_manager.set_max_restarts(usize::MAX).await;
|
_ = process_manager.set_max_restarts(usize::MAX).await;
|
||||||
|
|
@ -336,26 +342,28 @@ async fn start(
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let span = info_span!(parent: None, "xdg-desktop-portal-cosmic");
|
if env::var("XDG_CURRENT_DESKTOP").as_deref() == Ok("COSMIC") {
|
||||||
let mut sockets = Vec::with_capacity(1);
|
let span = info_span!(parent: None, "xdg-desktop-portal-cosmic");
|
||||||
let extra_env = Vec::with_capacity(1);
|
let mut sockets = Vec::with_capacity(1);
|
||||||
let portal_extras =
|
let extra_env = Vec::with_capacity(1);
|
||||||
if let Ok((mut env, fd)) = create_privileged_socket(&mut sockets, &extra_env) {
|
let portal_extras =
|
||||||
let mut env = env.remove(0);
|
if let Ok((mut env, fd)) = create_privileged_socket(&mut sockets, &extra_env) {
|
||||||
env.0 = "PORTAL_WAYLAND_SOCKET".to_string();
|
let mut env = env.remove(0);
|
||||||
vec![(fd, env, sockets.remove(0))]
|
env.0 = "PORTAL_WAYLAND_SOCKET".to_string();
|
||||||
} else {
|
vec![(fd, env, sockets.remove(0))]
|
||||||
Vec::new()
|
} else {
|
||||||
};
|
Vec::new()
|
||||||
start_component(
|
};
|
||||||
XDP_COSMIC.unwrap_or("/usr/libexec/xdg-desktop-portal-cosmic"),
|
start_component(
|
||||||
span,
|
XDP_COSMIC.unwrap_or("/usr/libexec/xdg-desktop-portal-cosmic"),
|
||||||
&process_manager,
|
span,
|
||||||
&env_vars,
|
&process_manager,
|
||||||
&socket_tx,
|
&env_vars,
|
||||||
portal_extras,
|
&socket_tx,
|
||||||
)
|
portal_extras,
|
||||||
.await;
|
)
|
||||||
|
.await;
|
||||||
|
}
|
||||||
|
|
||||||
let mut signals = Signals::new(vec![libc::SIGTERM, libc::SIGINT]).unwrap();
|
let mut signals = Signals::new(vec![libc::SIGTERM, libc::SIGINT]).unwrap();
|
||||||
let mut status = Status::Exited;
|
let mut status = Status::Exited;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue