-
Notifications
You must be signed in to change notification settings - Fork 790
GUACAMOLE-288: Add support for multi-monitor connections on RDP. #1061
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
base: main
Are you sure you want to change the base?
GUACAMOLE-288: Add support for multi-monitor connections on RDP. #1061
Conversation
wow this is huge! i will test asap |
Exciting. Could you write up the technical implementation here? Here's what I gather from looking at the changes here and in the guacamole-server pull request.
That leads me to understand,
Could you clarify if that is correct? If so, how is each tab specifying which monitor/offset to use? |
@corentin-soriano Rather than build on the For example, we could do something like: /* Hint that some_layer is best represented as a separate monitor/display */
guac_protocol_send_set(socket, some_layer,
GUAC_PROTOCOL_LAYER_PARAMETER_PRESENTATION,
GUAC_PROTOCOL_LAYER_PARAMETER_PRESENTATION_DETACHED);
/* Hint that the default layer will only contain other layers and need not have
* a graphical surface */
guac_protocol_send_set(socket, default_layer,
GUAC_PROTOCOL_LAYER_PARAMETER_PRESENTATION,
GUAC_PROTOCOL_LAYER_PARAMETER_PRESENTATION_VOID); to advise compatible clients that a particular layer should be ideally rendered as a separate display in its own right, with its position within any parent layers to be interpreted as hinting for relative location. That would make the same semantics available in a backward-compatible manner, while also allowing the concept of separating out parts of the display to be more broadly applicable (such as for popping out RemoteApp windows). |
I'd like to test your code but I am not a github expert. I have checked out both guacamole-client and guacamole-server locally. How do I put them in the correct state? I suspect --branch is involved. I'd be grateful if you could note how to get the starting line set up and then I'll run with it. |
Should be something like: (and similarly for guacamole-server, just substituting in the correct pull request number for that repo, then autoreconf, configure, make, etc.) |
Wow! It works perfectly. I'd say it is better than stock mstsc because you can add and remove screens at your whim. So far I have tested with Firefox on Kubuntu 24.04, connecting to a Windows 2022 RDS box. Guac + Tomcat are running on Ubuntu 22.04. I only have two identical screens so haven't looked into what happens with varying sizes. I'll move this to our live box soon and get some more testing done with real users. |
I actually cracked out the compiler and moved it to our live box the same day I made that comment. We are an IT firm so our users generally work around issues ... of which we have found none. One of my office admins uses our Guacamole so she can rock a Mac and still run all the Windows based stuff like Outlook. Bloody millennials! However, that shows that you cannot know exactly how your code will end up being used. Her feedback has been that I will not be allowed to revert this functionality. In the spirit of enquiry, I am currently using a laptop with just the local panel. I started another screen up and it works exactly as I would expect. I have a second floating window with a start menu. I've just passed an app from one screen to the other. Most of my firm use Windows and a Mac or two and I exclusively use Linux and Wayland these days. We use nearly all mainstream browsers. Feedback about multi screen support has been overwhelmingly positive. My only suggestion is to consider changing the word monitor in the option Add an additional monitor to window or perhaps screen. My personal preference is window. |
3e2f0d5
to
0ce2ae8
Compare
…onitors on each RDP connection.
…annot use the clientController.
2681db0
to
00c1551
Compare
00c1551
to
218df8a
Compare
I have done a little testing using docker images built from your two branches. Great work so far! By default the
Another thing I noticed testing a connection from Chrome on Windows 10 to a Windows 11 PC is that dragging a window to the secondary monitor will create visual artifacts as in the screenshot below. It uses a Chrome window as an example but the same happens for other windows, e.g. the file explorer or CMD.
Note how only dragging without releasing to the primary does not generate artifacts. Moving windows around in the monitor they were created in does not create artifacts for either monitor. I have only tested with two monitors (primary + secondary). Otherwise it has been working great so far. I will continue testing it over the next days. |
I haven't had time to research a fix yet, but I've already identified this issue. Regarding the other comments, I will try to improve them. Thanks for taking the time to test and provide feedback! |
Anyone who wishes can test and feedback will be appreciated!
Requires using this branch on guacamole-server: apache/guacamole-server#560
WIP:
Admin settings:




Add new monitor:
Multiple monitors opened:
Different sizes: