From 3ab73bdf361d4df4621a87f8e87d21704e2c602a Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 1 Apr 2023 10:26:55 +0800 Subject: [PATCH] fix x11 login screen Signed-off-by: fufesou --- libs/hbb_common/src/platform/linux.rs | 6 ++++++ src/server/service.rs | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 89c96799d..4da6d7436 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -40,6 +40,12 @@ pub fn is_desktop_wayland() -> bool { get_display_server() == DISPLAY_SERVER_WAYLAND } +#[inline] +pub fn is_x11_wayland() -> bool { + let ds = get_display_server(); + ds == DISPLAY_SERVER_X11 || ds == DISPLAY_SERVER_WAYLAND +} + #[inline] pub fn is_x11_or_headless() -> bool { !is_desktop_wayland() diff --git a/src/server/service.rs b/src/server/service.rs index 9857889cc..fbe21105d 100644 --- a/src/server/service.rs +++ b/src/server/service.rs @@ -190,12 +190,15 @@ impl> ServiceTmpl { } #[inline] - fn wait_prelogin(&self) { + fn wait_prelogin_or_x11gdm(&self) { #[cfg(target_os = "linux")] while self.active() { if crate::platform::linux::is_prelogin() { break; } + if crate::platform::linux::is_x11_wayland() { + break; + } thread::sleep(time::Duration::from_millis(300)); } } @@ -209,7 +212,7 @@ impl> ServiceTmpl { let mut callback = callback; let sp = self.clone(); let thread = thread::spawn(move || { - sp.wait_prelogin(); + sp.wait_prelogin_or_x11gdm(); let mut state = S::default(); let mut may_reset = false; @@ -245,7 +248,7 @@ impl> ServiceTmpl { let sp = self.clone(); let mut callback = callback; let thread = thread::spawn(move || { - sp.wait_prelogin(); + sp.wait_prelogin_or_x11gdm(); let mut error_timeout = HIBERNATE_TIMEOUT; while sp.active() {