system settings
git clone https://git.lucas.co/cce-system-interface.git
Use cce_ui::process::spawn_detached to spawn background processes and prevent zombie processes
src/pages/accounts.rs | 8 ++++++--
src/pages/display.rs | 16 +++++++---------
src/pages/interface.rs | 6 +++---
src/pages/system_info.rs | 16 +++++++++-------
4 files changed, 25 insertions(+), 21 deletions(-)
diff --git a/src/pages/accounts.rs b/src/pages/accounts.rs
index 4aff9a6..3e16e3f 100644
--- a/src/pages/accounts.rs
+++ b/src/pages/accounts.rs
@@ -216,7 +216,9 @@ pub async fn run_google_login(sender: calloop::channel::Sender<AppAction>) {
client_config.client_id,
PKCE_CHALLENGE
);
- let _ = std::process::Command::new("xdg-open").arg(&auth_url).spawn();
+ let mut cmd = std::process::Command::new("xdg-open");
+ cmd.arg(&auth_url);
+ let _ = cce_ui::process::spawn_detached(cmd);
if let Ok((mut stream, _)) = listener.accept().await {
use tokio::io::{AsyncReadExt, AsyncWriteExt};
@@ -751,7 +753,9 @@ pub fn update(state: &mut AccountsState, msg: AccountsMessage) {
state.status_msg = Some("Google account authenticated!".to_string());
}
AccountsMessage::ICloudLoginHelp => {
- let _ = std::process::Command::new("xdg-open").arg("https://appleid.apple.com/").spawn();
+ let mut cmd = std::process::Command::new("xdg-open");
+ cmd.arg("https://appleid.apple.com/");
+ let _ = cce_ui::process::spawn_detached(cmd);
state.status_msg = Some("Generate iCloud App Password...".to_string());
}
AccountsMessage::EditOAuthCredsStart => {
diff --git a/src/pages/display.rs b/src/pages/display.rs
index 57b61e8..847f2e4 100644
--- a/src/pages/display.rs
+++ b/src/pages/display.rs
@@ -463,15 +463,13 @@ pub fn update(state: &mut DisplayState, msg: DisplayMessage) {
};
// Spawn screensaver tool from PATH or local directory
- std::process::Command::new("/home/lsgalante/Dropbox/Clear/cce-screenaver/target/debug/cce-screenaver")
- .arg(style_flag)
- .spawn()
- .or_else(|_| {
- std::process::Command::new("cce-screenaver")
- .arg(style_flag)
- .spawn()
- })
- .ok();
+ let mut cmd = std::process::Command::new("/home/lsgalante/Dropbox/Clear/cce-screenaver/target/debug/cce-screenaver");
+ cmd.arg(style_flag);
+ if cce_ui::process::spawn_detached(cmd).is_err() {
+ let mut cmd_fallback = std::process::Command::new("cce-screenaver");
+ cmd_fallback.arg(style_flag);
+ let _ = cce_ui::process::spawn_detached(cmd_fallback);
+ }
}
}
}
diff --git a/src/pages/interface.rs b/src/pages/interface.rs
index 08f2be7..34dd754 100644
--- a/src/pages/interface.rs
+++ b/src/pages/interface.rs
@@ -2235,9 +2235,9 @@ fn read_status_size() -> Option<u16> {
fn write_status_size(size: u16) {
write_config_value("status_font_size", &size.to_string());
- let _ = std::process::Command::new("pkill")
- .args(["-f", "cce-status-interface"])
- .spawn();
+ let mut cmd = std::process::Command::new("pkill");
+ cmd.args(["-f", "cce-status-interface"]);
+ let _ = cce_ui::process::spawn_detached(cmd);
}
fn read_fuzzel_size() -> Option<u16> {
diff --git a/src/pages/system_info.rs b/src/pages/system_info.rs
index 5743917..ab2427d 100644
--- a/src/pages/system_info.rs
+++ b/src/pages/system_info.rs
@@ -209,16 +209,16 @@ fn format_duration(secs: i64) -> String {
fn spawn_cpu_power(powersave: bool) {
let script = if powersave { "cpu-powersave-on" } else { "cpu-powersave-off" };
- let _ = std::process::Command::new("pkexec")
- .arg(format!("/home/lsgalante/.local/share/cce-system-interface/helpers/{}", script))
- .spawn();
+ let mut cmd = std::process::Command::new("pkexec");
+ cmd.arg(format!("/home/lsgalante/.local/share/cce-system-interface/helpers/{}", script));
+ let _ = cce_ui::process::spawn_detached(cmd);
}
fn spawn_gpu_power(powersave: bool) {
let script = if powersave { "gpu-powersave-on" } else { "gpu-powersave-off" };
- let _ = std::process::Command::new("pkexec")
- .arg(format!("/home/lsgalante/.local/share/cce-system-interface/helpers/{}", script))
- .spawn();
+ let mut cmd = std::process::Command::new("pkexec");
+ cmd.arg(format!("/home/lsgalante/.local/share/cce-system-interface/helpers/{}", script));
+ let _ = cce_ui::process::spawn_detached(cmd);
}
fn current_cpu_governor() -> String {
@@ -325,7 +325,9 @@ async fn read_nvidia_gpu_temp() -> Option<f32> {
}
fn spawn_systemctl(action: &str) {
- let _ = std::process::Command::new("systemctl").arg(action).spawn();
+ let mut cmd = std::process::Command::new("systemctl");
+ cmd.arg(action);
+ let _ = cce_ui::process::spawn_detached(cmd);
}
pub async fn fetch_system_state() -> SystemState {