Merge pull request #3975 from fufesou/fix/disable_headless_on_flatpak_appimage

Fix/disable headless on flatpak appimage
This commit is contained in:
RustDesk 2023-04-09 20:54:43 +08:00 committed by GitHub
commit 8f3e63fdbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 2 deletions

View File

@ -545,7 +545,7 @@ jobs:
arch: x86_64, arch: x86_64,
target: x86_64-unknown-linux-gnu, target: x86_64-unknown-linux-gnu,
os: ubuntu-20.04, os: ubuntu-20.04,
extra-build-features: "", extra-build-features: "linux_headless",
} }
- { - {
arch: x86_64, arch: x86_64,
@ -681,7 +681,7 @@ jobs:
x86_64) x86_64)
# no need mock on x86_64 # no need mock on x86_64
export VCPKG_ROOT=/opt/artifacts/vcpkg export VCPKG_ROOT=/opt/artifacts/vcpkg
cargo build --lib --features hwcodec,flutter,flutter_texture_render,linux_headless,${{ matrix.job.extra-build-features }} --release cargo build --lib --features hwcodec,flutter,flutter_texture_render,${{ matrix.job.extra-build-features }} --release
;; ;;
esac esac

View File

@ -18,6 +18,7 @@ pub mod delegate;
pub mod linux; pub mod linux;
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
pub mod linux_desktop_manager; pub mod linux_desktop_manager;
#[cfg(not(any(target_os = "android", target_os = "ios")))] #[cfg(not(any(target_os = "android", target_os = "ios")))]

View File

@ -73,6 +73,7 @@ impl RendezvousMediator {
}); });
} }
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
crate::platform::linux_desktop_manager::start_xdesktop(); crate::platform::linux_desktop_manager::start_xdesktop();
loop { loop {
Config::reset_online(); Config::reset_online();
@ -101,6 +102,7 @@ impl RendezvousMediator {
// It should be better to call stop_xdesktop. // It should be better to call stop_xdesktop.
// But for server, it also is Ok without calling this method. // But for server, it also is Ok without calling this method.
// #[cfg(all(target_os = "linux", feature = "linux_headless"))] // #[cfg(all(target_os = "linux", feature = "linux_headless"))]
// #[cfg(not(any(feature = "flatpak", feature = "appimage")))]
// crate::platform::linux_desktop_manager::stop_xdesktop(); // crate::platform::linux_desktop_manager::stop_xdesktop();
} }

View File

@ -4,6 +4,7 @@ use crate::clipboard_file::*;
#[cfg(not(any(target_os = "android", target_os = "ios")))] #[cfg(not(any(target_os = "android", target_os = "ios")))]
use crate::common::update_clipboard; use crate::common::update_clipboard;
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
use crate::platform::linux_desktop_manager; use crate::platform::linux_desktop_manager;
#[cfg(windows)] #[cfg(windows)]
use crate::portable_service::client as portable_client; use crate::portable_service::client as portable_client;
@ -19,6 +20,7 @@ use crate::{common::DEVICE_NAME, flutter::connection_manager::start_channel};
use crate::{ipc, VERSION}; use crate::{ipc, VERSION};
use cidr_utils::cidr::IpCidr; use cidr_utils::cidr::IpCidr;
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
use hbb_common::platform::linux::run_cmds; use hbb_common::platform::linux::run_cmds;
use hbb_common::{ use hbb_common::{
config::Config, config::Config,
@ -158,8 +160,10 @@ pub struct Connection {
#[cfg(not(any(target_os = "android", target_os = "ios")))] #[cfg(not(any(target_os = "android", target_os = "ios")))]
pressed_modifiers: HashSet<rdev::Key>, pressed_modifiers: HashSet<rdev::Key>,
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
rx_cm_stream_ready: mpsc::Receiver<()>, rx_cm_stream_ready: mpsc::Receiver<()>,
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
tx_desktop_ready: mpsc::Sender<()>, tx_desktop_ready: mpsc::Sender<()>,
} }
@ -279,8 +283,10 @@ impl Connection {
#[cfg(not(any(target_os = "android", target_os = "ios")))] #[cfg(not(any(target_os = "android", target_os = "ios")))]
pressed_modifiers: Default::default(), pressed_modifiers: Default::default(),
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
rx_cm_stream_ready: _rx_cm_stream_ready, rx_cm_stream_ready: _rx_cm_stream_ready,
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
tx_desktop_ready: _tx_desktop_ready, tx_desktop_ready: _tx_desktop_ready,
}; };
#[cfg(not(any(target_os = "android", target_os = "ios")))] #[cfg(not(any(target_os = "android", target_os = "ios")))]
@ -895,6 +901,7 @@ impl Connection {
platform_additions.insert("is_wayland".into(), json!(true)); platform_additions.insert("is_wayland".into(), json!(true));
} }
#[cfg(feature = "linux_headless")] #[cfg(feature = "linux_headless")]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if linux_desktop_manager::is_headless() { if linux_desktop_manager::is_headless() {
platform_additions.insert("headless".into(), json!(true)); platform_additions.insert("headless".into(), json!(true));
} }
@ -1262,6 +1269,7 @@ impl Connection {
} }
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
let desktop_err = match lr.os_login.as_ref() { let desktop_err = match lr.os_login.as_ref() {
Some(os_login) => { Some(os_login) => {
linux_desktop_manager::try_start_desktop(&os_login.username, &os_login.password) linux_desktop_manager::try_start_desktop(&os_login.username, &os_login.password)
@ -1269,12 +1277,15 @@ impl Connection {
None => linux_desktop_manager::try_start_desktop("", ""), None => linux_desktop_manager::try_start_desktop("", ""),
}; };
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
let is_headless = linux_desktop_manager::is_headless(); let is_headless = linux_desktop_manager::is_headless();
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
let wait_ipc_timeout = 10_000; let wait_ipc_timeout = 10_000;
// If err is LOGIN_MSG_DESKTOP_SESSION_NOT_READY, just keep this msg and go on checking password. // If err is LOGIN_MSG_DESKTOP_SESSION_NOT_READY, just keep this msg and go on checking password.
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if !desktop_err.is_empty() && desktop_err != LOGIN_MSG_DESKTOP_SESSION_NOT_READY { if !desktop_err.is_empty() && desktop_err != LOGIN_MSG_DESKTOP_SESSION_NOT_READY {
self.send_login_error(desktop_err).await; self.send_login_error(desktop_err).await;
return true; return true;
@ -1299,6 +1310,7 @@ impl Connection {
return false; return false;
} else if self.is_recent_session() { } else if self.is_recent_session() {
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if desktop_err.is_empty() { if desktop_err.is_empty() {
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
if is_headless { if is_headless {
@ -1323,6 +1335,7 @@ impl Connection {
} }
} else if lr.password.is_empty() { } else if lr.password.is_empty() {
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if desktop_err.is_empty() { if desktop_err.is_empty() {
self.try_start_cm(lr.my_id, lr.my_name, false); self.try_start_cm(lr.my_id, lr.my_name, false);
} else { } else {
@ -1372,6 +1385,7 @@ impl Connection {
.unwrap() .unwrap()
.insert(self.ip.clone(), failure); .insert(self.ip.clone(), failure);
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if desktop_err.is_empty() { if desktop_err.is_empty() {
self.send_login_error(LOGIN_MSG_PASSWORD_WRONG).await; self.send_login_error(LOGIN_MSG_PASSWORD_WRONG).await;
self.try_start_cm(lr.my_id, lr.my_name, false); self.try_start_cm(lr.my_id, lr.my_name, false);
@ -1389,6 +1403,7 @@ impl Connection {
LOGIN_FAILURES.lock().unwrap().remove(&self.ip); LOGIN_FAILURES.lock().unwrap().remove(&self.ip);
} }
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if desktop_err.is_empty() { if desktop_err.is_empty() {
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
if is_headless { if is_headless {
@ -2200,9 +2215,14 @@ async fn start_ipc(
#[cfg(not(feature = "linux_headless"))] #[cfg(not(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(any(feature = "flatpak", feature = "appimage"))]
let user = None;
#[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
let mut user = None; let mut user = None;
// Cm run as user, wait until desktop session is ready. // Cm run as user, wait until desktop session is ready.
#[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(all(target_os = "linux", feature = "linux_headless"))]
#[cfg(not(any(feature = "flatpak", feature = "appimage")))]
if linux_desktop_manager::is_headless() { if linux_desktop_manager::is_headless() {
let mut username = linux_desktop_manager::get_username(); let mut username = linux_desktop_manager::get_username();
loop { loop {