mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
keep server device awake if have connection
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
@@ -776,9 +776,9 @@ pub fn resolutions(name: &str) -> Vec<Resolution> {
|
||||
|
||||
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
|
||||
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
|
||||
1920x1080 60.01*+ 60.01 59.97 59.96 59.93
|
||||
1680x1050 59.95 59.88
|
||||
1600x1024 60.17
|
||||
1920x1080 60.01*+ 60.01 59.97 59.96 59.93
|
||||
1680x1050 59.95 59.88
|
||||
1600x1024 60.17
|
||||
|
||||
XWAYLAND0 connected primary 1920x984+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
|
||||
Virtual1 connected primary 1920x984+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
|
||||
@@ -1060,3 +1060,18 @@ mod desktop {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct WakeLock(Option<keepawake::AwakeHandle>);
|
||||
|
||||
impl WakeLock {
|
||||
pub fn new(display: bool, idle: bool, sleep: bool) -> Self {
|
||||
WakeLock(
|
||||
keepawake::Builder::new()
|
||||
.display(display)
|
||||
.idle(idle)
|
||||
.sleep(sleep)
|
||||
.create()
|
||||
.ok(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -701,3 +701,18 @@ pub fn elevate(args: Vec<&str>, prompt: &str) -> ResultType<bool> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct WakeLock(Option<keepawake::AwakeHandle>);
|
||||
|
||||
impl WakeLock {
|
||||
pub fn new(display: bool, idle: bool, sleep: bool) -> Self {
|
||||
WakeLock(
|
||||
keepawake::Builder::new()
|
||||
.display(display)
|
||||
.idle(idle)
|
||||
.sleep(sleep)
|
||||
.create()
|
||||
.ok(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,9 @@ use winapi::{
|
||||
winbase::*,
|
||||
wingdi::*,
|
||||
winnt::{
|
||||
TokenElevation, HANDLE, PROCESS_QUERY_LIMITED_INFORMATION, TOKEN_ELEVATION, TOKEN_QUERY,
|
||||
TokenElevation, ES_AWAYMODE_REQUIRED, ES_CONTINUOUS, ES_DISPLAY_REQUIRED,
|
||||
ES_SYSTEM_REQUIRED, HANDLE, PROCESS_QUERY_LIMITED_INFORMATION, TOKEN_ELEVATION,
|
||||
TOKEN_QUERY,
|
||||
},
|
||||
winreg::HKEY_CURRENT_USER,
|
||||
winuser::*,
|
||||
@@ -2180,6 +2182,30 @@ pub fn is_process_consent_running() -> ResultType<bool> {
|
||||
.output()?;
|
||||
Ok(output.status.success() && !output.stdout.is_empty())
|
||||
}
|
||||
pub struct WakeLock;
|
||||
// Failed to compile keepawake-rs on i686
|
||||
impl WakeLock {
|
||||
pub fn new(display: bool, idle: bool, sleep: bool) -> Self {
|
||||
let mut flag = ES_CONTINUOUS;
|
||||
if display {
|
||||
flag |= ES_DISPLAY_REQUIRED;
|
||||
}
|
||||
if idle {
|
||||
flag |= ES_SYSTEM_REQUIRED;
|
||||
}
|
||||
if sleep {
|
||||
flag |= ES_AWAYMODE_REQUIRED;
|
||||
}
|
||||
unsafe { SetThreadExecutionState(flag) };
|
||||
WakeLock {}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for WakeLock {
|
||||
fn drop(&mut self) {
|
||||
unsafe { SetThreadExecutionState(ES_CONTINUOUS) };
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
@@ -506,6 +506,8 @@ fn check_get_displays_changed_msg() -> Option<Message> {
|
||||
}
|
||||
|
||||
fn run(sp: GenericService) -> ResultType<()> {
|
||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||
let _wake_lock = get_wake_lock();
|
||||
#[cfg(all(windows, feature = "virtual_display_driver"))]
|
||||
ensure_close_virtual_device()?;
|
||||
|
||||
@@ -1058,3 +1060,16 @@ fn start_uac_elevation_check() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||
fn get_wake_lock() -> crate::platform::WakeLock {
|
||||
let (display, idle, sleep) = if cfg!(windows) {
|
||||
(true, false, false)
|
||||
} else if cfg!(linux) {
|
||||
(false, false, true)
|
||||
} else {
|
||||
//macos
|
||||
(true, false, false)
|
||||
};
|
||||
crate::platform::WakeLock::new(display, idle, sleep)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user