119 Commits

Author SHA1 Message Date
Mariano Abad
3f207e91f6 fix(linux): a session logout should hand the peer to the login screen (#15905)
* fix(linux): a session logout should hand the peer to the login screen

Logging out closes every window in the session, the connection manager's
included, and its close handler kicks every peer with the reason a person
gets when they disconnect one by hand. That reason is the one thing the
client never retries on, so the remote session dies on a frozen frame
instead of reconnecting to the greeter that is already there.

The close carries nothing to tell the two apart: measured on KDE, the CM
receives no signal and logind still reports the session active at that
instant, and the server is killed within a few hundred ms either way, so
neither a state check nor a grace period can decide it. What is
distinguishable is the ACTION: disconnecting a peer is not the same event
as this window going away. So the window-close path now says so, and the
server ends the session without poisoning the retry; the Disconnect
button and the app's own close control keep kicking exactly as before.
Linux only, since that is where a logout closes the window.

Verified on plasma/sddm with a client attached: a logout now reconnects
to the greeter with no dialog, while closing the manager window still
shows Closed manually by the peer.

* fix(linux): close the tunnel too, and keep the web build compiling

Three seams the first pass missed. The web bridge is hand written, not
generated, so the new call needs its stub there or flutter build web
stops compiling - and that job is disabled in CI, so it would have gone
green. try_port_forward_loop is a second consumer of the same channel
and only knew Close, so a forwarded tunnel outlived the window it was
supposed to die with. And the variant had landed inside the DRM section,
whose comment says everything below it is drm-gated.
2026-08-26 18:26:26 +08:00
rustdesk
94a2a2bb4a fix https://github.com/rustdesk/rustdesk/issues/15566 2026-07-11 21:43:04 +08:00
fufesou
383a5c3478 feat: option, enable-privacy-mode & enable-perm-change-in-accept-window (#14875)
* feat: option, privacy mode

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(privacy mode): update libs/hbb_common

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(privacy mode): turn off on disable privacy mode

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(privacy mode): better check if supported

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(option): enable perm change in accept window

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
2026-05-02 00:44:22 +08:00
21pages
1abc897c45 fix avatar fallback (#14458)
* fix avatar fallback

Signed-off-by: 21pages <sunboeasy@gmail.com>

* fix(ui): improve avatar fallback handling and layout consistency

  - Always show spacing in account section regardless of avatar presence
  - Handle null return from buildAvatarWidget with proper fallback
  - Adjust mobile settings avatar size to 28

Signed-off-by: 21pages <sunboeasy@gmail.com>

---------

Signed-off-by: 21pages <sunboeasy@gmail.com>
2026-03-05 12:30:40 +08:00
RustDesk
ab64a32f30 avatar (#14440)
* avatar

* refactor avatar display: unify rendering and resolve at use time

  - Extract buildAvatarWidget() in common.dart to share avatar rendering
    logic across desktop settings, desktop CM and mobile CM
  - Add resolve_avatar_url() in Rust, exposed via FFI (SyncReturn),
    to resolve relative avatar paths (e.g. "/avatar/xxx") to absolute URLs
  - Store avatar as-is in local config, only resolve when displaying
    (settings page) or sending (LoginRequest)
  - Resolve avatar in LoginRequest before sending to remote peer
  - Add error handling for network image load failures
  - Guard against empty client.name[0] crash
  - Show avatar in mobile settings page account tile

Signed-off-by: 21pages <sunboeasy@gmail.com>

* web: implement mainResolveAvatarUrl via js getByName

Signed-off-by: 21pages <sunboeasy@gmail.com>

* increase ipc Data enum size limit to 120 bytes

Signed-off-by: 21pages <sunboeasy@gmail.com>

---------

Signed-off-by: 21pages <sunboeasy@gmail.com>
Co-authored-by: 21pages <sunboeasy@gmail.com>
2026-03-04 21:43:19 +08:00
RustDesk
5faf0ad3cf terminal works basically. (#12189)
* terminal works basically.
todo:
- persistent
- sessions restore
- web
- mobile

* missed terminal persistent option change

* android sdk 34 -> 35

* +#![cfg_attr(lt_1_77, feature(c_str_literals))]

* fixing ci

* fix ci

* fix ci for android

* try "Fix Android SDK Platform 35"

* fix android 34

* revert flutter_plugin_android_lifecycle to 2.0.17 which used in rustdesk 1.4.0

* refactor, but break something of desktop terminal (new tab showing loading)

* fix connecting...
2025-07-01 13:12:55 +08:00
21pages
f0f999dc27 view camera (#11040)
* view camera

Signed-off-by: 21pages <sunboeasy@gmail.com>

* `No cameras` prompt if no cameras available,  `peerGetSessionsCount` use
connType as parameter

Signed-off-by: 21pages <sunboeasy@gmail.com>

* fix, use video_service_name rather than display_idx as key in qos,etc

Signed-off-by: 21pages <sunboeasy@gmail.com>

---------

Signed-off-by: 21pages <sunboeasy@gmail.com>
Co-authored-by: Adwin White <adwinw01@gmail.com>
Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
2025-03-10 21:06:53 +08:00
fufesou
a039741e5a fix: win10, border (#10753)
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2025-02-10 13:50:28 +08:00
21pages
d4a712bb32 always block desktop settings page if video connection exists (#10224)
1. Always block desktop settings page if video connection exists, both mouse event and key event are blocked..
2. Server control page always block key event.

Signed-off-by: 21pages <sunboeasy@gmail.com>
2024-12-08 18:26:55 +08:00
21pages
ed18e3c786 file rename (#9089)
Signed-off-by: 21pages <sunboeasy@gmail.com>
2024-08-16 12:55:58 +08:00
21pages
bb1b9858d5 only main window show tabbar border, change cm tabbar color (#9073)
Signed-off-by: 21pages <sunboeasy@gmail.com>
2024-08-15 13:25:59 +08:00
dignow
b967d496cc refact: init values from initState to Constractor (#8817)
* refact: init values from initState to Constractor

Signed-off-by: dignow <linlong1265@gmail.com>

* fix: move RxBool init into Constructor

Signed-off-by: dignow <linlong1265@gmail.com>

* peer sort option

Signed-off-by: dignow <linlong1265@gmail.com>

* Remove empty initState()

Signed-off-by: dignow <linlong1265@gmail.com>

---------

Signed-off-by: dignow <linlong1265@gmail.com>
2024-07-25 10:45:51 +08:00
dignow
79a1f888d6 fix: flutter remove setState in initState (#8807)
Signed-off-by: dignow <linlong1265@gmail.com>
2024-07-24 14:00:49 +08:00
fufesou
30afe4f779 refact: seperate audio device for voice call (#8703)
Signed-off-by: fufesou <linlong1266@gmail.com>
2024-07-14 04:07:02 +08:00
21pages
0bb4d43e9e add custom client option to allow remote cm modification (#8660)
Signed-off-by: 21pages <sunboeasy@gmail.com>
2024-07-09 15:19:16 +08:00
21pages
af66d2a73b main window add block mask, cm add keyboard block (#8640)
* block window body only so user can still click minisize button.
* cm doesn't show mask
* Remove focusable Offstage in tabbar_widget.dart

Signed-off-by: 21pages <sunboeasy@gmail.com>
2024-07-08 20:08:05 +08:00
21pages
763174657b add type to all Getx put/get/delete/isRegistered (#8550)
Signed-off-by: 21pages <sunboeasy@gmail.com>
2024-06-30 21:24:18 +08:00
fufesou
3c502c6fc2 refact: replace some option keys (#8090)
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2024-05-19 14:07:42 +08:00
fufesou
01322146c0 refact: window frame border (#7946)
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2024-05-08 09:59:05 +08:00
fufesou
2c1595d0d5 fix: voice call, select audio input device (#7922)
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2024-05-07 16:18:48 +08:00
21pages
f6223a6f71 dropdown menu for tabs that cannot be displayed (#7918)
* The visibility threshold is 75%
* Used in remote, file transfer, port forward and cm

Signed-off-by: 21pages <pages21@163.com>
2024-05-06 17:10:02 +08:00
fufesou
85cafda168 Refact. Flutter web, mid commit (#7494)
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2024-03-24 11:23:06 +08:00
fufesou
5253d67e04 Fix/custom client styles (#7373)
* Fix. qs styles

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* custom client, options

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Move logo.svg to icon.svg

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Refact. Custom client, connection status ui.

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Custom client ui. Disable settings, hide "Change password"

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Custom client, logo align center

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Custom client, refact, outgoing ui

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Custom client, outgoing, settings icon

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Custom client, powered by RustDesk

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Custom client, remove unused SizeBox

Signed-off-by: fufesou <shuanglongchen@yeah.net>

* Update config.rs

* Update flutter_ffi.rs

---------

Signed-off-by: fufesou <shuanglongchen@yeah.net>
Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
2024-03-14 11:36:14 +08:00
rustdesk
749a1d2da2 support logo.png 2024-02-26 17:49:12 +08:00
21pages
1f557888f5 update pubspec.lock, remove some deprecated (#7110)
* fix some warnings and some deprecated reported by `flutter analyze`

Signed-off-by: 21pages <pages21@163.com>

* pubspec.lock changes from flutter 3.16.9

Signed-off-by: 21pages <pages21@163.com>

* pubspec.lock changes from `flutter pub upgrade`

Signed-off-by: 21pages <pages21@163.com>

---------

Signed-off-by: 21pages <pages21@163.com>
2024-02-12 21:39:19 +08:00
rustdesk
d7e8d4d5c3 fix #6198 2023-11-06 20:12:01 +08:00
21pages
af132aa62e permission allow->enable, block->blocking
Signed-off-by: 21pages <pages21@163.com>
2023-11-06 18:08:53 +08:00
21pages
d528fd3762 permisson block input
Signed-off-by: 21pages <pages21@163.com>
2023-11-06 15:07:03 +08:00
21pages
663d355a48 cm file delete/create log
Signed-off-by: 21pages <pages21@163.com>
2023-11-06 14:24:50 +08:00
21pages
d8e51c6b14 render cm side page after window size change, calculate real window
width

Signed-off-by: 21pages <pages21@163.com>
2023-10-01 08:50:24 +08:00
21pages
2afce3f1f4 add file log page to cm
* Only send and receive logs are shown
* For older version, client send to server doesn't have size information, because server side doesn't know the total_size
* Not switch tabs automatically when new files are transferred
* If cm side page is open, not pop up automatically when new files are transferred
* Show unread message count
* The cm tab remains open when closed if a file transfer has previously occurred

Signed-off-by: 21pages <pages21@163.com>
2023-09-07 19:51:25 +08:00
rustdesk
26ba25d2ae Move restart to tab right menu, and remove some items 2023-08-06 16:42:13 +08:00
rustdesk
dd4f52b63d move closing-tabs to local config, and add glgetstring to stack check 2023-07-30 12:16:00 +08:00
21pages
3db0f90af9 revert cm fixed width
Signed-off-by: 21pages <pages21@163.com>
2023-07-11 10:05:31 +08:00
21pages
d7ef3df2b3 Revert "try fix linux cm abnormal show"
This reverts commit 193426a3c1.
2023-07-11 10:01:56 +08:00
21pages
745f33a8c1 opt mobile unread and autoSizeTextField
Signed-off-by: 21pages <pages21@163.com>
2023-07-10 22:21:01 +08:00
21pages
193426a3c1 try fix linux cm abnormal show
Signed-off-by: 21pages <pages21@163.com>
2023-07-10 22:20:38 +08:00
21pages
22994ee8f2 opt chatModel, linux same startup height as dart
Signed-off-by: 21pages <pages21@163.com>
2023-07-10 16:02:47 +08:00
21pages
65529b10b6 opt mobile chat message store
Signed-off-by: 21pages <pages21@163.com>
2023-07-09 21:45:35 +08:00
RustDesk
84d7115e36 Merge pull request #4920 from 21pages/fix_cm
fixed cm control page width
2023-07-08 22:34:25 +08:00
21pages
9f1d4e8ba6 fixed cm control page width and not resizable
Signed-off-by: 21pages <pages21@163.com>
2023-07-08 19:30:50 +08:00
rustdesk
8c186edd18 new cm tab style 2023-07-08 17:55:55 +08:00
21pages
b0f22d8693 fix cm unread and add vertical divider
Signed-off-by: 21pages <pages21@163.com>
2023-07-08 14:52:12 +08:00
21pages
a5675c06e7 when remote page receive chat message: if minimized, top page and switch tab, otherwise add unread message count
Signed-off-by: 21pages <pages21@163.com>
2023-07-06 14:14:19 +08:00
21pages
87e06e974e desktop block remote click chat page
Signed-off-by: 21pages <pages21@163.com>
2023-07-05 20:20:51 +08:00
21pages
7c4c69aa75 cm unread message count
Signed-off-by: 21pages <pages21@163.com>
2023-07-05 20:20:51 +08:00
RustDesk
b41c6be341 Revert "remove cm use peer info as title" 2023-07-05 10:56:54 +08:00
21pages
31a7d817da remove cm use peer info as title
Signed-off-by: 21pages <pages21@163.com>
2023-07-05 08:15:09 +08:00
rustdesk
5f4a1960fa rename to "accept and elevate" button 2023-06-14 21:30:05 +08:00
21pages
60b87e554b call tab onSelected at the end of tab's initState, needed by session
uuid

Signed-off-by: 21pages <pages21@163.com>
2023-06-08 10:09:56 +08:00