refact, option, allow linux headless

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2023-07-29 14:02:13 +08:00
parent c15e3c306e
commit c0ead118a2
37 changed files with 100 additions and 10 deletions

View File

@ -91,6 +91,8 @@ pub const LOGIN_MSG_PASSWORD_WRONG: &str = "Wrong Password";
pub const LOGIN_MSG_NO_PASSWORD_ACCESS: &str = "No Password Access"; pub const LOGIN_MSG_NO_PASSWORD_ACCESS: &str = "No Password Access";
pub const LOGIN_MSG_OFFLINE: &str = "Offline"; pub const LOGIN_MSG_OFFLINE: &str = "Offline";
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub const LOGIN_SCREEN_WAYLAND: &str = "Wayland login screen";
#[cfg(target_os = "linux")]
pub const SCRAP_UBUNTU_HIGHER_REQUIRED: &str = "Wayland requires Ubuntu 21.04 or higher version."; pub const SCRAP_UBUNTU_HIGHER_REQUIRED: &str = "Wayland requires Ubuntu 21.04 or higher version.";
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub const SCRAP_OTHER_VERSION_OR_X11_REQUIRED: &str = pub const SCRAP_OTHER_VERSION_OR_X11_REQUIRED: &str =
@ -2100,7 +2102,13 @@ struct LoginErrorMsgBox {
lazy_static::lazy_static! { lazy_static::lazy_static! {
static ref LOGIN_ERROR_MAP: Arc<HashMap<&'static str, LoginErrorMsgBox>> = { static ref LOGIN_ERROR_MAP: Arc<HashMap<&'static str, LoginErrorMsgBox>> = {
use hbb_common::config::LINK_HEADLESS_LINUX_SUPPORT; use hbb_common::config::LINK_HEADLESS_LINUX_SUPPORT;
let map = HashMap::from([(LOGIN_MSG_DESKTOP_SESSION_NOT_READY, LoginErrorMsgBox{ let map = HashMap::from([(LOGIN_SCREEN_WAYLAND, LoginErrorMsgBox{
msgtype: "error",
title: "login_wayland_title_tip",
text: "login_wayland_text_tip",
link: "https://rustdesk.com/docs/en/manual/linux/#login-screen",
try_again: true,
}), (LOGIN_MSG_DESKTOP_SESSION_NOT_READY, LoginErrorMsgBox{
msgtype: "session-login", msgtype: "session-login",
title: "", title: "",
text: "", text: "",

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", "管理的设备数已达到最大值"), ("exceed_max_devices", "管理的设备数已达到最大值"),
("Sync with recent sessions", "同步最近会话"), ("Sync with recent sessions", "同步最近会话"),
("Sort tags", "对标签进行排序"), ("Sort tags", "对标签进行排序"),
("login_wayland_title_tip", "无法连接"),
("login_wayland_text_tip", "不支持 Wayland 登录界面。"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."),
("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"),
("Sort tags", "Tags sortieren"), ("Sort tags", "Tags sortieren"),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -73,5 +73,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."),
("logout_tip", "Are you sure you want to log out?"), ("logout_tip", "Are you sure you want to log out?"),
("exceed_max_devices", "You have reached the maximum number of managed devices."), ("exceed_max_devices", "You have reached the maximum number of managed devices."),
("login_wayland_title_tip", "Failed to connect"),
("login_wayland_text_tip", "Login screen of Wayland is not supported."),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."),
("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sync with recent sessions", "Sincronizar con sesiones recientes"),
("Sort tags", "Ordenar etiquetas"), ("Sort tags", "Ordenar etiquetas"),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."),
("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"),
("Sort tags", "Ordina etichette"), ("Sort tags", "Ordina etichette"),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."),
("Sync with recent sessions", "Синхронизация последних сессий"), ("Sync with recent sessions", "Синхронизация последних сессий"),
("Sort tags", "Сортировка меток"), ("Sort tags", "Сортировка меток"),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("exceed_max_devices", ""), ("exceed_max_devices", ""),
("Sync with recent sessions", ""), ("Sync with recent sessions", ""),
("Sort tags", ""), ("Sort tags", ""),
("login_wayland_title_tip", ""),
("login_wayland_text_tip", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -1007,14 +1007,22 @@ impl Connection {
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
if !self.file_transfer.is_some() && !self.port_forward_socket.is_some() { if !self.file_transfer.is_some() && !self.port_forward_socket.is_some() {
let dtype = crate::platform::linux::get_display_server(); let mut msg = "".to_owned();
if dtype != crate::platform::linux::DISPLAY_SERVER_X11 if crate::platform::linux::is_login_wayland() {
&& dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND msg = crate::client::LOGIN_SCREEN_WAYLAND.to_owned();
{ } else {
res.set_error(format!( let dtype = crate::platform::linux::get_display_server();
"Unsupported display server type \"{}\", x11 or wayland expected", if dtype != crate::platform::linux::DISPLAY_SERVER_X11
dtype && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND
)); {
msg = format!(
"Unsupported display server type \"{}\", x11 or wayland expected",
dtype
);
}
}
if !msg.is_empty() {
res.set_error(msg);
let mut msg_out = Message::new(); let mut msg_out = Message::new();
msg_out.set_login_response(res); msg_out.set_login_response(res);
self.send(msg_out).await; self.send(msg_out).await;
@ -2387,7 +2395,11 @@ async fn start_ipc(
args.push("--hide"); args.push("--hide");
}; };
#[cfg(any(feature = "flatpak", feature = "appimage", not(all(target_os = "linux", feature = "linux_headless"))))] #[cfg(any(
feature = "flatpak",
feature = "appimage",
not(all(target_os = "linux", feature = "linux_headless"))
))]
let user = None; let user = None;
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))]