Wednesday, March 31, 2010

VirtualDesktop & Multi-monitor simplification and merging

Intro
I'm new and this is my first blog But I really think I might have stumbled onto something here that could have some meaningful impact on the Linux desktop usability. I have though about this long and hard and the more I think of it the more I think I'm onto something here.
I am learning and starting to make some minor contributions BUT like I said I'm new and this would involve changes beyond my skill to implement. I hope someone out there with the skills needed might read this and think to him self that "yea this is not a bad idea" :-).
I submitted this idea (and it has been accepted) to the KDE Brainstorm forum but I think many did not fully understand what I was trying to explain so I hope this clarifies the concept.
I believe that Virtual Desktops and multi-monitor controls can be merged to make both more flexible and easy to use. I also believe that merging these concepts will simplify the virtual desktop & multi-monitor concepts.

Basic Idea
The basic idea of merging the concept of virtual Desktops and multi-monitor is that each monitor should be able to show a different Virtual Desktop. Conceptually then, each Virtual Desktop can be seen as just another monitor output to which any one of your attached monitors can be set to display.
I hope, in the rest of this blog, to show that this idea can be used to have the same effect as multi-monitor extended desktops and cloned output with some added benefits and simplifications in the process.

How it could be done
When attaching a new monitor, the new monitor would be automatically set to show the 1st virtual-desktop, no user interaction needed. The user would then be free to change the new monitor to display any other virtual-desktop. If the mouse is on the monitor #1 then changing desktop (mouse scroll or keyboard, same as today) would change the desktop for monitor #1, if mouse on monitor #2 then the desktop on monitor #2 changes.
Programs can already be set to display to a particular virtual-desktop, you can even already drag windows between virtual-desktops (as seen in all those desktop cube demo videos) , so choosing which monitor/virtual-desktop a window is displayed on would be the same thing and would be as simple as dragging that window to that monitors desktop. You would be free to arrange the virtual-desktop among your multiple monitors any way you like.

Extended Desktop vs Linked Monitors
But this is not quite the same as the traditional Extended desktop where you can change all your monitors desktops at once. If the user wants to mimic this functionality the user would be able to "Link" one monitor to another.
If Monitor #2 was linked to Monitor#1 then Monitor #2 would always show the next virtual-desktop up from the one displayed on Monitor #1. This would mean that if you changed the virtual-desktop on either of these monitors you would change the desktop on both.


Changing up or down through your virtual-desktops could be set to move 2 desktops at a time so as to mimic the normal extended desktop behavior


Of course if you plugged in a 3rd monitor you could link it to the second monitor already linked to the 1st monitor therefor mimicking the behavior of an extended desktop across 3 monitors
BUT you don't have to link the 3rd monitor :-)
You could leave this 3rd monitor left unlinked and with a desktop of it's own while the other 2 monitors are still behaving as an extended desktop. Or maybe you set it to be a clone of one of the other monitors even while it is still part of the linked pair. And you could have all this extra flexibility without making it more complicated. Just change the monitor to the desktop you want and if you want the monitors to change together just link the monitor.

Cloned Monitors
Newly attached monitors would automatically show the 1st virtual-desktop. If the 1st virtual-desktop is already displayed on another monitor you effectively have a cloned output.You could easily set any monitor to display the same output as another monitor by simply setting them to display the same virtual-desktop.
The only issue would be if these monitors were of different resolutions. These resolution issues could be simply avoided by scaling the output of one of the monitors. So which ever monitor was displaying that desktop first would remain at the same resolution and DotsPerInch settings and the other monitor output would be scaled (either pan or zoom) so as to also have the whole desktop available for display on that monitor.

Cloned desktop with Scaled view


Desktop on monitor 2 is a scaled view of Desktop #1 (full view on monitor #1). Many 3d desktop these days already have zoom and scale functions so this may already be in place.


Cloned Desktop with Pan zoom view

Desktop at full size and Mon#2 showing as much as it can. Desktop on Mon#2 will move to follow mouse. This kind of desktop zoom/pan is also already in place on many 3d desktops

But like the extended desktops this would not quite be the same as the traditional cloned arrangement in that the monitors would not change together when flipping through the virtual-desktops. Linked monitors to the rescue again :-) This time the monitors would be linked to always show the same desktop instead of one desktop up as done when mimicking traditional extended desktops. The "linked" monitor in this arrangement would have a scaled view of the same desktop displayed on the monitor it is linked to.
Linking monitors to FULLY mimic a traditional cloned arrangement may not serve any purpose anymore? You usually clone a monitor for an audiences and having the monitors NOT linked would leave you free to change desktops on your monitor while not affecting your audiences view (you could change the desktop seen by your audience by simply moving the mouse to that monitor and then changing desktops). Think about that?
You wouldn't even need to show the same desktop to the audience as you could always display a single window to both the desktop displayed on your monitor as well as the desktop displayed on the monitor seen by your audience.
But . . . since it is just a slight variation of the "linked" monitors used to mimic extended-desktops it wouldn't cost much to leave it in.

Advantages of Monitors with independent VirtualDesktops
Once we free up the monitors so they can display virtual-desktop independently you would have a number of advantages.
  • We have now gone from 2 independent concepts of multi-monitor and virtual-desktops to just one concept of a virtual-desktop just being a monitor output to which any monitor can be connected.
  • Complete flexibility in what each monitor is to display. You could have some monitors acting like an extended desktop, some monitors showing a copy of other monitors or just leave them un-linked and free to show any desktop independently of the other monitors. Or any combination of these.
  • Any window can be displayed on any particular desktop or all desktops and there for can be displayed on any particular monitor or on all monitors.
  • Monitor would come up automatically without any setup and be easily changed to show which ever virtual-desktop you wanted.
  • Dot per Inch are important for some applications (CAD, Publishing etc). Extended-desktops would not have an accurate DPI setting across all monitors but independent desktops on each monitor could have accurate DPI across all monitors. (only the second monitor showing the same desktop would not)
  • Simple control: just change the desktop of any particular monitor till it's displaying the virtual-desktop you want. Set 2 or more monitors to the same desktop to have a "cloned" view of that desktop.
  • Xinarama uses a number of work-arounds (eg. controlling which monitor an app opens on and avoiding dead zones on the desktop when it's extended across monitors of different sizes). Some of these work-arounds would be eliminated and others merged in with virtual-desktop management code eliminating some code duplication.
  • Flickering when changing between extended desktop or cloned desktops or out of multi-head altogether could be eliminated as the desktops already displayed on monitors would not be changing resolution.
Limitations
  • Still need to set monitor position and orientation.
  • Still want the ability to set resolution and refresh rates. Although with the monitors E-DID info it should be automatically setup up correctly 99% of the time.
Some example scenarios and use cases.
Jason attaches a projector to his laptop to start his presentation. As soon as he does desktop #1 is projected on the wall. He then moves his mouse across to the projectors display and changes the desktop of the projector to desktop #2. He then opens the application he will be demonstrating and uses the window menu to output it all desktops. On desktop #1 (the desktop still displayed on his laptop) he can have any windows open he wants and still see the application he is demoing but on desktop #2 (displayed by the projector) only the demoing application window is seen. Jason can easily set any other windows to be displayed on both monitors as the need arises.
Katie has three monitors attached to her computer she links two of the monitors so they are working as an extended desktop. One the 3rd monitor she displays another desktop on which she puts all the windows she wants to have visibility of at all times (Instant Messenger & dragon player playing a music video). She is free to flip through her virtual desktops on the other 2 monitors without interfering with the 3rd monitors display.
Lenny has 2 monitor each displaying an independent virtual-desktop of it's own. He opens his video editing program and drags the preview/video output window to the desktop on the other monitor

Further Improvements
  • Intelligent stepping through desktops: When moving trough the desktops some intelligence could be embedded :-


    • If the monitor you are changing virtual-desktops for is linked to another monitor then it should change the desktop of the monitor it is linked to
    • When moving up or down through the desktops where the monitor is linked it should change step through the desktops as a group, mimicking the normal extended desktop behaviour.. So if Monitors #1 and #2 are linked and there for showing desktops #1 and #2 then changing up a desktop should move up 2 desktops so as to have monitor #1 displaying desktop #3 and monitor #2 displaying desktop #4.
  • The Gnome 3.0, Gnome shell proof of concept makes it very easy to create and delete virtual-desktops on the fly. This would work very well with the whole independent desktops per monitor concept, making it even easier to use and setup
  • KDE desktop zoom in/out could be changed to allow the easy creation and deletion of virtual-desktops (like Gnome Shell) to make the whole independent-desktops per monitor much more dynamic.
  • The menu option to send an individual window to a particular desktop could be changed to enable the selection of multiple desktops so a window could be displayed on desktop 1 &2 but not 3 &4. (more flexible than just setting the window to display in ALL desktops)
  • Integration of KDE concept of Activities , especially if done in flexible and dynamic way would complete the whole picture. Maybe have an activity tag which could be dragged onto individual desktops when a user has zoomed out to see all the desktops. Each desktop could have a different activity assigned to it or all desktops tagged with the same activity.
  • When zoomed out to see all the desktops it would be a good place to put the monitor settings for orientation, position and resolution/refresh. It could be placed off to the side so as not associated to the virtual-desktops.
  • Mouse Shadow: because changing desktops now only affects the monitor that the mouse is on, the mouse must be on a particular monitor/desktop even when that desktop is also shown on another monitor. This means that the mouse is only shown on one view/monitor of that desktop. But the user may want to use that mouse pointer to be seen on both monitors (so his audience can see what he is point at for example). So while the mouse is shown on one monitor a mouse shadow would be shown on the other monitors displaying that same desktop.
  • If the system was made to remember what desktop (and activity) was on what monitor and restore that desktop to the monitor when it was plugged in it would make it effortless to dock a laptop. Desktop with widgets suitable for a touch screen could be the restored to a touch-screen monitor when ever it was plugged in (it could recognise monitor from the monitors make &model retrieved from E-DID)
Conclusion
I hope I have clarified the whole independent desktops per monitor concept. I believe that it would be much more simple in practice than it was to explain and has the potential to be more self discoverable.

6 comments:

  1. This is exacly what I need! Is there a project like this already?

    ReplyDelete
  2. I think you need to rethink/reword the section on linked monitors. You get kind muddy in that area.

    I believe the best way to put it, is that each monitor gets attached to a virtual desktop or is a viewport on to a virtual desktop (this concept is already in X). You can change virtual desktops to monitor assignments on the fly.

    you can mimic current extend desktop functionality assigning both monitors to one virtual desktop at different viewports, IE: Create a virtual desktop of 2048x768, then monitor 1 is assigned to viewport 0,0 and monitor two is assigned viewport 0,1024.

    This provides an interesting bonus of removing the need to alot of momitor intelligence as the monitors are assign to the desktops. In this way when ever you select a desktop you will always get the correct monitor assignments. If you assign desktops to monitors then you have play games with tracking monitors.

    Add the concept of virtual desktop groupings and the ability to assign a monitor to a groups, with virtual desktops overriding group display assignments, and you have just about everything your want with out lots of strange logic.

    ReplyDelete
  3. This is precisely how I have always have wanted multi-monitors to work! I have no interest whatsoever in spreading a single desktop over multiple monitors and having parts of applications "split" :). Nor does it make any sense when the monitors may be of different resolutions and types. But making each display have it's own self-contained virtual desktop(s) and being able to drag or otherwise move applications intact from one monitor to the other as needed makes immense sense to me intuitively as a user as well as the technological simplifications it clearly offers.

    ReplyDelete
  4. some of you might be tired of hearing of this bug:
    https://bugs.kde.org/show_bug.cgi?id=156475
    I would like se it fixed so I can start using kde 4.
    When setting multypli x servers up and using kde 4 you can only see something on screen on and the rest is black. It happens only with kde 4 (and it is still present in kde 4.4.1) and if you use another DE (like xfce, gnome or kde 3.5) you will see the desktop

    ReplyDelete
  5. Replies
    1. Stumbled onto this while searching for the same feature. I'd like my two monitors to not be in same virutal desktop. It would be really sad if the feature has not been developed in 10 years. Any kind of extension or method to achieve will be greatly appreciated.

      Delete