-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[v0.10] Fixes some problems with monitor hotplug #2951
Merged
metalefty
merged 12 commits into
neutrinolabs:v0.10
from
metalefty:v0.10-monitor-hotplug
Feb 20, 2024
Merged
[v0.10] Fixes some problems with monitor hotplug #2951
metalefty
merged 12 commits into
neutrinolabs:v0.10
from
metalefty:v0.10-monitor-hotplug
Feb 20, 2024
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
metalefty
force-pushed
the
v0.10-monitor-hotplug
branch
from
February 20, 2024 15:13
42d9308
to
d536228
Compare
This fixes some monitor hotplug issues with non-GFX codepaths. 1) The server_version_message() was working on an out-of-date copy of the client_info. As a result, the X server and the window manager did not agree on the number of windows 2) As a result of 1), a memory leak was found in the VNC module.
From [MS-RCPBCGR] 3.3.5.12.1:- > ...The contents of this PDU SHOULD NOT be compressed. > > This PDU MUST NOT be sent to a client that has not indicated support for > it by setting the RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU flag (0x0040) > in the earlyCapabilityFlags field of the Client Core Data (section > 2.2.1.3.2). Also, 2.2.12.1 specifies the source channel must be zero. In testing, a compressed monitor layout PDU causes mstsc.exe to exit with a protocol error.
This stores what kind of resizing (if any) can be achieved with a Deactivation-Reactivation sequence.
This commit DOES NOT compile. This change alters these module interface calls:- 1) mod_server_monitor_resize() (Call from xrdp to module). Updated. 2) server_reset() (Call from module to xrdp). Replaced. The mod_server_monitor_resize() call is updated :- 1) to allow a monitor list to be passed in for a multimon resize 2) with an 'in_progress' return value which tells the caller whether or not to expect a callback. The server_reset() call served two purposes up until now:- 1) To allow a module to resize a single monitor session. There is no way to request a multi-monitor resize from the module 2) (with bpp == 0) To signal to the mm resize state machine that a server screen resize hsa finished. This is split into two calls:- 1) client_monitor_resize() to allow a mdule to request a multimon resize. 2) server_monitor_resize_done(). This is called by a module when a resize is completed.
Neutrinordp module now compiles with updated monitor resize interface
Significant updates for the VNC module:- 1) Support for the new API calls allowing both server and client multi-monitor resizes. 2) The s member variable of the vnc_screen_layout structure is no longer dynamically allocated. 3) The module server_width and server_height member variables are removed as these are just duplicating server_layout.total_width and server_layout.total_height. 4) When the server screens are resized, there is no need to restart the entire resize state machine as we already know at this point that the server supports resizing.
Input message 300 to xorgxrdp which communicated a screen size has been replaced with message 302 which sends a list of monitors to xorgxrdp. This simplifies the initialisation and resize logic somewhat, but a compatible version of xorgxrdp must be used
This commit compiles.
Clear egfx_up as soon as the channel starts to close so that xrdp_mm_draw_dirty() doesn't send data to a closed channel.
This prevents valgrind errors when resizing the screen to a larger size on GFX systems.
In GFX mode, if we're using xorgxrdp, frame updates are send directly from the client, bypassing the screen buffer in xrdp_mm. This commit only allows the xrdp_mm screen buffer to be invalidated if the painter has drawn into it since the module was loaded. This prevents the unused (and invalid) frame buffer being pushed to the client in GFX mode with xorgxrdp.
metalefty
force-pushed
the
v0.10-monitor-hotplug
branch
from
February 20, 2024 15:14
d536228
to
d769b40
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Merge #2942 into v0.10.