From 6149c7f4777fe1f5a83188fd38a41487b5a90354 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 29 Mar 2023 12:08:24 +0800 Subject: [PATCH] refact linux desktop env Signed-off-by: fufesou --- src/platform/linux.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index dda4b115b..28c4d9252 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -769,6 +769,7 @@ mod desktop { pub protocal: String, pub display: String, pub xauth: String, + pub is_rustdesk_subprocess: bool, } impl Desktop { @@ -787,6 +788,11 @@ mod desktop { self.sid.is_empty() } + #[inline] + pub fn is_headless(&self) -> bool { + self.sid.is_empty() || self.is_rustdesk_subprocess + } + fn get_display(&mut self) { self.display = get_env_tries("DISPLAY", &self.uid, GNOME_SESSION_BINARY, 10); if self.display.is_empty() { @@ -901,6 +907,16 @@ mod desktop { last } + fn set_is_subprocess(&mut self) { + self.is_rustdesk_subprocess = false; + let cmd = "ps -ef | grep 'rustdesk/xorg.conf' | grep -v grep | wc -l"; + if let Ok(res) = run_cmds(cmd) { + if res.trim() != "0" { + self.is_rustdesk_subprocess = true; + } + } + } + pub fn refresh(&mut self) { if !self.sid.is_empty() && is_active(&self.sid) { return; @@ -909,6 +925,7 @@ mod desktop { let seat0_values = get_values_of_seat0(&[0, 1, 2]); if seat0_values[0].is_empty() { *self = Self::default(); + self.is_rustdesk_subprocess = false; return; } @@ -924,6 +941,9 @@ mod desktop { self.get_display(); self.get_xauth(); + self.set_is_subprocess(); + + println!("REMOVE ME ======================================= desktop: {:?}", self); } } }