casualsnek / cassowary

Run Windows Applications on Linux as if they are native, Use linux applications to launch files files located in windows vm without needing to install applications on vm. With easy to use configuration GUI
GNU General Public License v2.0
2.87k stars 75 forks source link

Display bug when full screen in dual monitor setup #126

Open powerbling opened 1 year ago

powerbling commented 1 year ago

Describe the bug My setup is dual monitor and I noticed:

To Reproduce Launch any app on multiple monitor setup and make it fullscreen or launch full rdp session.

Expected behavior The app should fill only one display, same for the rdp session (at least until multi-monitor is supported)

Screenshots Screenshot_20230720_124441 Screenshot_20230720_124441 This is opening an app, I'm not able to show the full session screenshot as I can't open the hosts screenshot utility when running.

System information:

Additional context Great work on the app!! Thanks a lot for sharing.

pedicino commented 2 months ago

Hi,

I ran into the same issue, but managed to find a workaround.

Context

Using the CLI, launching a guest app with Cassowary looks like this: python3 -m cassowary -c guest-run -- 'C:\Windows\System32\mspaint.exe'

(A shortcut, of course, works the same way.)

By default, Cassowary runs apps with preconfigured xfreerdp flags:

guest-run with commandline: xfreerdp /d:"DESKTOP-NAME" /u:"username" /p:"password" /v:guest_ip +clipboard /a:drive,root,/ +decorations /cert-ignore /sound /scale:100 /dynamic-resolution /span /wm-class:"cassowaryApp-mspaint.exe" /app:"C:\Windows\System32\mspaint.exe" /app-icon:"/home/username/Downloads/cassowary_env/lib/python3.12/site-packages/cassowary/base/../gui/extrares/cassowary_app.png"

The GUI allows adding extra flags, but not editing predetermined ones: cassowary_gui_settings

Solution

1. Check your monitor configuration using xfreerdp /monitor-list.

Example output:

* [0] 1920x1080+1280+0
  [1] 1280x1024+0+0

[0] is my primary (right) monitor. [1] is my secondary (left) monitor.

For best results, the left monitor should not have a horizontal/vertical offset (+0+0). The right monitor should have a horizontal offset equal to the left monitor's width, but no vertical offset (+1280+0).

2. Calculate the "combined" resolution of both monitors. In my case, it's 3200x1080.

3. Start an xfreerdp session manually using different flags:

xfreerdp /d:"DESKTOP-NAME" /u:"username" /p:"password" /v:guest_ip +clipboard +window-drag +sec-tls /a:drive,root,/ +decorations /cert-ignore /sound /scale:100 /f /dynamic-resolution /multimon:force /monitors:1,0 /size:3200x1080 /app:"path_to_app"

Flags added: +window-drag (Enable full window drag) +sec-tls (Disable TLS protocol security) /f (Enable fullscreen) /multimon:force (Enable and force multi-monitor mode) /monitors:1,0 (You may want to try /monitors:0,1) /size:3200x1080 (Edit to match your combined resolution)

Flags removed: /span (Span screen over multiple monitors)

Don't forget to fill DESKTOP-NAME, username, password, guest_ip, and path_to_app with your details. Modify any existing Cassowary shortcuts to run this command instead of the python3 call. Cheers.