fix: linux, login wayland, server (#8111)
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
e192f10c56
commit
534fc9c40c
@ -142,9 +142,17 @@ pub fn get_values_of_seat0_with_gdm_wayland(indices: &[usize]) -> Vec<String> {
|
|||||||
_get_values_of_seat0(indices, false)
|
_get_values_of_seat0(indices, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ignore "3 sessions listed."
|
||||||
|
fn ignore_loginctl_line(line: &str) -> bool {
|
||||||
|
line.contains("sessions") || line.split(" ").count() < 4
|
||||||
|
}
|
||||||
|
|
||||||
fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec<String> {
|
fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec<String> {
|
||||||
if let Ok(output) = run_loginctl(None) {
|
if let Ok(output) = run_loginctl(None) {
|
||||||
for line in String::from_utf8_lossy(&output.stdout).lines() {
|
for line in String::from_utf8_lossy(&output.stdout).lines() {
|
||||||
|
if ignore_loginctl_line(line) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if line.contains("seat0") {
|
if line.contains("seat0") {
|
||||||
if let Some(sid) = line.split_whitespace().next() {
|
if let Some(sid) = line.split_whitespace().next() {
|
||||||
if is_active(sid) {
|
if is_active(sid) {
|
||||||
@ -163,6 +171,9 @@ fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec<Stri
|
|||||||
|
|
||||||
// some case, there is no seat0 https://github.com/rustdesk/rustdesk/issues/73
|
// some case, there is no seat0 https://github.com/rustdesk/rustdesk/issues/73
|
||||||
for line in String::from_utf8_lossy(&output.stdout).lines() {
|
for line in String::from_utf8_lossy(&output.stdout).lines() {
|
||||||
|
if ignore_loginctl_line(line) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if let Some(sid) = line.split_whitespace().next() {
|
if let Some(sid) = line.split_whitespace().next() {
|
||||||
if is_active(sid) {
|
if is_active(sid) {
|
||||||
let d = get_display_server_of_session(sid);
|
let d = get_display_server_of_session(sid);
|
||||||
|
@ -1241,7 +1241,7 @@ mod desktop {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let seat0_values = get_values_of_seat0(&[0, 1, 2]);
|
let seat0_values = get_values_of_seat0_with_gdm_wayland(&[0, 1, 2]);
|
||||||
if seat0_values[0].is_empty() {
|
if seat0_values[0].is_empty() {
|
||||||
*self = Self::default();
|
*self = Self::default();
|
||||||
self.is_rustdesk_subprocess = false;
|
self.is_rustdesk_subprocess = false;
|
||||||
|
@ -1168,18 +1168,21 @@ 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 mut msg = "".to_string();
|
||||||
|
if crate::platform::linux::is_login_screen_wayland() {
|
||||||
|
msg = crate::client::LOGIN_SCREEN_WAYLAND.to_owned()
|
||||||
|
} else {
|
||||||
let dtype = crate::platform::linux::get_display_server();
|
let dtype = crate::platform::linux::get_display_server();
|
||||||
if dtype != crate::platform::linux::DISPLAY_SERVER_X11
|
if dtype != crate::platform::linux::DISPLAY_SERVER_X11
|
||||||
&& dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND
|
&& dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND
|
||||||
{
|
{
|
||||||
let msg = if crate::platform::linux::is_login_screen_wayland() {
|
msg = format!(
|
||||||
crate::client::LOGIN_SCREEN_WAYLAND.to_owned()
|
|
||||||
} else {
|
|
||||||
format!(
|
|
||||||
"Unsupported display server type \"{}\", x11 or wayland expected",
|
"Unsupported display server type \"{}\", x11 or wayland expected",
|
||||||
dtype
|
dtype
|
||||||
)
|
);
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
if !msg.is_empty() {
|
||||||
res.set_error(msg);
|
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user