microsoft / PowerToys

Windows system utilities to maximize productivity
MIT License
109.68k stars 6.46k forks source link

Defining Different/Dissimilar Monitor Layouts for Windows 10 "Multiple Desktop" #8781

Closed Templar01 closed 3 years ago

Templar01 commented 3 years ago

(EDIT: Changed top to "Multiple Desktop" rather than "Virtual Desktop"

📝 Provide a description of the new feature

What is the expected behavior of the proposed feature? What is the scenario this would be used?

---This would exceed the current scope of Fanzyzones but enhance the current windows 10 virtual desktop. Currently when one utilizes a multimonitor setup the configuration of those monitors applies to the entire system. If for example, one has a 1x3 monitor desktop then all three monitors will exist in like manner for different virtual desktops.

There are a couple of ways that one can implement these use cases but they all require clumsy workarounds using either a separate tablet/phone/desktop as either a status display using either a web browser or RDP.

  1. Use Case: Dedicated Factory Floor Monitoring application. In a three or more monitor setup, it would useful to dedicate a third monitor exclusively to an application such as a system monitoring application or factory floor display system. Each application would be assigned to a dedicated virtual desktop and would never encroach on the other desktops. An example of this request was made in this thread: (https://superuser.com/questions/965385/assigning-a-virtual-desktop-to-a-monitor-in-windows-10)
  2. Use Case: Digital Signage. A frequent challenge in digital signage applications is that most applications are not monitor-aware. That means that upon system reboot in a multimonitor system, one does not have granular control over which window opens up in which monitor. Often this is a limitation of the device driver. So let's say one display is at the lobby door and another one in the lobby public area and a third at the reception desk. If one wants to create a "reliable" digital signage message board that displays data to a specific monitor, this is very challenging and not very reliable especially in a mixed application environment desktop. If one could assign let's say a virtual desktop to each monitor or allow let's say two monitors to one desktop and two to one or more other desktops, then it would be the OS that would play traffic cop not the application software. This would also allow one to use mixed vendor applications too. An example would be a broadcast app running on two monitors while a video loop from YouTube playing on another.
  3. Use Case: System Status Panel, Desktop. There are many desktop monitoring applications for CPU usage, memory, GPU, temperature and the like. HWINFO, AIDA64, CPUZ and Rainmaker are just a few that come to mind. In a recent application note that can be found here. https://www.youtube.com/watch?v=RTdniu3gn3Y&ab_channel=JayzTwoCents The problem with the approach in this application note is that the target panel is subject to windows orientation changes and nothing guarantees that upon an application crash or monitor configuration change that the target panel in this example would remain unchanged. This is due to the fact that it is still treated as part of the entire desktop. The workaround is to make the status panel appear on all Windows Virtual Desktops. However, that doesn't mean it would be isolated from let's say an errant application starting up in the wrong display.
  4. Use case: Video Editing/Live video Streaming/Video Conferencing/Webinar Hosting. For the same reasons as the other use cases, it would be desirable to be able to leave let's say an open application in one display that is unaffected by any of the other applications. So let's say that one is streaming from one desktop but wants to monitor what the audience is seeing. A browser could be opened in the virtual desktop and stay dedicated to a single display as an "audience viewer". This would have the added benefit of also isolating certain applications for errantly being displayed in a shared window via video conferencing.
  5. Use Case: Gaming Status Display/Touch Controller. Many games now support external mods and displays. "Elite Dangerous" is just one example where the members can have a monitoring program open in a second display while gaming is underway. The drawback is one is then confined to the desktop while the game makes video changes. This can often affect the display requiring repositioning of the monitoring app. If the app were running in a dedicated virtual desktop with its own defined workspace, this would likely not happen. One third part app using either an iPhone or Android tablet is already on the market. https://gameglass.gg/ acts as kind of thin-client for remote application control however, much of what it does is simply monitoring which again, there are many third party mods that also do this.

If you'd like to see this feature implemented, add a 👍 reaction to this post.

crutkas commented 3 years ago

I'm not certain what the actual ask here is. some visuals would be helpful.

FancyZones does actually support different layouts per Virtual Desktop if that is the ask.

Templar01 commented 3 years ago

A visual in this case may not help but I've attached one nevertheless in this link. https://imgur.com/zP3feVd I may be guilty of usurping incorrect nomenclature/jargon as what I've referring to also has reference in the world of system virtualization. I guess we're running out of buzzwords. ;) I should have used the term "Dedicated Multiple Desktop Per Monitor(s)" rather than "Virtual desktops".

Disclaimer: I realize this is a HUGE ask and may not be within the scope of Fancyzones or Powertoys itself but its an idea that has many applications.

Let me try a simpler description of a use case. Let's say that I'm a developer who wants to cross develop for multiple OS' and my development environment of choice is Visual Studio hosted on my Win 10 machine. Now it would be nice lets say, to open up a virtual machine for the target I am running which could be Linux, Android or whatever. What would be more helpful is if I could dedicate a specific desktop but only to a specific monitor and also exclude that monitor from use to any other desktop. As far as any application running on that second desktop is concerned, it will only see the monitors I've defined for use in that desktop and only that desktop. Today's Multi Monitor function in Windows is an all or nothing function.

BTW: A use case for this already exists with respect to VR headsets. Even though the VR headset is connected to a video port on the graphics card, that video port is not seen as an available monitor in Windows. If one could figure out how to leverage that trick then it may be possible to just simply apply this to the concept of dedicated Multiple Desktop per monitor.

I'll give another use case from my Digital Signage and Factory Floor Automation experience. We found often that we would take a graphics card port and attach a display emulator to each video port and make one machine function as a "headless display server". Then we'd run diskless PC's as thin clients using a dedicated VNC session that would simply display the single monitor on multiple displays throughout the facility. Think of an application one sees every day such an Airport Flight Information Display. You have one video source routed to multiple monitors. Previously this was done through hardware but the holy grail of digital signage was to employ the native function to Windows. Nobody ever found an open source way to do this but there were plenty of proprietary methods out there.

Here are some examples of these devices, they've been around for over 20 years. https://www.amazon.com/s?k=display+emulator&i=electronics&ref=nb_sb_noss They emulate the EDID table from a monitor and trick the display driver into believing a physical display is attached.

So again, the issue here is not that Windows cannot do this, it can. The issue is that if anything happens to a desktop that interferes with desktop orientation or layout, many legacy apps are not multi-window aware. If these apps respawned they would simply default to the primary display or on the monitor from which it spawned. If we were to have the ability to "compartmentalize" a single window to a single monitor, then this would solve apps that were "unaware" because the app would only see a single monitor in its environment and when it "ran home to momma" after a disorderly shutdown it would only have one place to go.

For me personally, I want to use this as a gaming feature where I can dedicate a gaming application to a single monitor and exclude access to that monitor from all other Windows open apps. I know how to do this using other hardware such as a raspberry running VNC or even Steam's Steamlink software or appliance. It would be far more effective if Windows could do this natively.

I've been trying to find this "Golden Solution" throughout my career in implementing remote computing. VNC, RDP and terminal Services are all half-measures to this goal in my experience. My first experience was back in 2002 but it appears to come up again and again by multiple people so I know it's not an isolated case. This original discussion that I posted above; https://superuser.com/questions/965385/assigning-a-virtual-desktop-to-a-monitor-in-windows-10 dates back to 2015.

crutkas commented 3 years ago

At the base here, what i'm hearing here based here is you want per-monitor virtual desktop support like MacOS has with Spaces. That is tracked in https://github.com/microsoft/PowerToys/issues/58

Correct?

Templar01 commented 3 years ago

At the base here, what i'm hearing here based here is you want per-monitor virtual desktop support like MacOS has with Spaces. That is tracked in #58

Correct?

Not to go down the rabbit hole of System Architecture but my very limited understanding of the MacOS "Spaces" was that it based directly from POSIX Unix which allowed for borrowing of that feature from BSD based legacy systems. If memory serves, didn't that feature hook well into the Session layer 5 (if I may use the OSI reference)? I am hoping that this concept outlined above would hook somewhere between the Presentation layer(6) and the Application layer(7). My fear would be that if we dive too deep into the OSI stack, it might make applications unware of each other and that would limit its usefulness. So to be clear, MacOS "Spaces" also was intended to provide session services to each window which is exactly what we don't want as it would likely break too many things that work well in Windows 10.

I apologize for mixing metaphors but my days of system Architecture are 30 years old. ;)

crutkas commented 3 years ago

@templar01, i'm trying to understand the feature ask still, not implementation. What / why YOU need the feature and how you'd use it.

What I'm seeing above is you want each monitor to be a virtual desktop versus a global (all monitors) virtual desktop.

Templar01 commented 3 years ago

@Templar01, i'm trying to understand the feature ask still, not implementation. What / why YOU need the feature and how you'd use it.

What I'm seeing above is you want each monitor to be a virtual desktop versus a global (all monitors) virtual desktop.

That is correct. In the ideal sense, each Virtual Desktop would have an independent number of monitors assigned to is as opposed to the one-size-fits-all function of today.

crutkas commented 3 years ago

Thanks. Yes this is tracked by #58