diff --git a/src/server.rs b/src/server.rs index e019f18895d0..128fb6d1f930 100644 --- a/src/server.rs +++ b/src/server.rs @@ -97,9 +97,6 @@ pub fn new() -> ServerPtr { server.add_service(Box::new(audio_service::new())); #[cfg(not(target_os = "ios"))] server.add_service(Box::new(display_service::new())); - server.add_service(Box::new(video_service::new( - *display_service::PRIMARY_DISPLAY_IDX, - ))); #[cfg(not(any(target_os = "android", target_os = "ios")))] { server.add_service(Box::new(clipboard_service::new())); @@ -262,6 +259,16 @@ impl Server { name.starts_with(video_service::NAME) } + pub fn try_add_primay_video_service(&mut self) { + let primary_video_service_name = + video_service::get_service_name(*display_service::PRIMARY_DISPLAY_IDX); + if !self.contains(&primary_video_service_name) { + self.add_service(Box::new(video_service::new( + *display_service::PRIMARY_DISPLAY_IDX, + ))); + } + } + pub fn add_connection(&mut self, conn: ConnInner, noperms: &Vec<&'static str>) { let primary_video_service_name = video_service::get_service_name(*display_service::PRIMARY_DISPLAY_IDX); diff --git a/src/server/connection.rs b/src/server/connection.rs index 19b30559da63..844d19150325 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1244,6 +1244,7 @@ impl Connection { #[cfg(not(any(target_os = "android", target_os = "ios")))] let _h = try_start_record_cursor_pos(); self.auto_disconnect_timer = Self::get_auto_disconenct_timer(); + s.try_add_primay_video_service(); s.add_connection(self.inner.clone(), &noperms); } } diff --git a/src/server/display_service.rs b/src/server/display_service.rs index 967dfa878e20..3ff9f4954ba4 100644 --- a/src/server/display_service.rs +++ b/src/server/display_service.rs @@ -24,7 +24,7 @@ lazy_static::lazy_static! { static ref IS_CAPTURER_MAGNIFIER_SUPPORTED: bool = is_capturer_mag_supported(); static ref CHANGED_RESOLUTIONS: Arc>> = Default::default(); // Initial primary display index. - // It should only be updated when the rustdesk server is started, and should not be updated when displays changed. + // It should should not be updated when displays changed. pub static ref PRIMARY_DISPLAY_IDX: usize = get_primary(); static ref SYNC_DISPLAYS: Arc> = Default::default(); }