fix x11 login screen
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
2ba7be5cdd
commit
3ab73bdf36
2 changed files with 12 additions and 3 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -190,12 +190,15 @@ impl<T: Subscriber + From<ConnInner>> ServiceTmpl<T> {
|
|||
}
|
||||
|
||||
#[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<T: Subscriber + From<ConnInner>> ServiceTmpl<T> {
|
|||
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<T: Subscriber + From<ConnInner>> ServiceTmpl<T> {
|
|||
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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue