main: Only launch xdg-portal on COSMIC

This commit is contained in:
Victoria Brekenfeld 2024-10-25 15:45:48 +02:00 committed by Ian Douglas Scott
parent c44946be82
commit 5a0df6afb6

View file

@ -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;