Fullscreen Startup Mode ----------------------- A. Default fullscreen behavior Assume: NG = number of displays supported by the guest NC = number of monitors on the client N = the lesser of NG and NC A1. at startup, enable N displays on the guest A2. if N == NC, map guest display X to physical monitor X A3. if N < NC, map guest display X to physical monitor X+1 (the primary monitor likely has an application menu, etc, so keep that free for local use) A4. Arrange guest displays in the same geometry as the physical monitors B. Custom monitor mapping configuration B1. configuration file is specific to a particular user on a particular client machine. Different users on same machine can use different configurations. B2. configuration only applies to fullscreen startup mode B3. configuration should be simple to edit by hand B4. It must be possible to specify a custom configuration for a specific guest vm B5. guest-specific configuration is identified by GUID B6. It must be possible to specify a fallback configuration that will be used for all guests without an explicit configuration B7. It must be possible to specify how many guest displays to enable B8. It must be possible to specify which guest display to map to which to client monitor B9. configuration format must be flexible and support a wide range of guest and client configurations B10. if the guest-specific configuration is invalid, we will attempt to use the default/fallback configuration B11. if the fallback configuration is invalid, we will revert to default behavior (see A) B12. Configuration must be considered invalid if it is not unambiguous B13. A configuration that doesn't specify any displays will be considered invalid B14. if multiple configurations are given for the same guest, the last one will be used. - non-requirements (these are features that were considered but I propose that they are explicitly not supported) - no need to have separate configurations depending on how many guest displays are currently enabled - complicates startup (have to wait to receive display config before setting up anything) - complicates config file format - the number of guest displays may have been set by another user since you last logged in, so it's not clear to me that we want to make configuration decisions based on something you can't control - no need to specify the geometry arrangement of displays - just match the arrangement of the physical monitors that the display will be mapped to - no need to specify different guest configurations based on client configuration (e.g. separate guest configurations for when the client machine has 4 monitors vs when it has 2 monitors) - complicates config file format - possibly unnecessary if we satisfy B9 - Implications of high-level requirements 1. per-guest display mapping will always work with virt-viewer because virt-viewer can get the GUID from libvirt 2. per-guest display mapping may not work with *remote-viewer* in many cases. If you're connecting to a vm on a host that is running an older version of spice-server (e.g. RHEL6), the GUID is not sent over the spice protocol, so remote-viewer doesn't have any way of determining a guest's GUID - Derived requirements C1. Use GKeyFile C2. need to add a 'Guest Details' dialog to virt-viewer so that the user can determine the GUID of the guest. C3. if config file specifies more guest displays than can be enabled on the guest, simply ignore (disable) the extra displays C4. if config file specifies that a display should be mapped to a client monitor that doesn't exist, that display will not be enabled C5. if config file specifies that a given guest display will map to multiple client monitors, it will be considered invalid C6. if the config file specifies that multiple guest displays will map to the same client monitor, it will be considered invalid Normal (non-fullscreen) Startup Mode ------------------------------------ D1. Client must not change Guest configuration at startup D2. Client must open a window for every display that is enabled on the guest D3. Client should allow the native window manager to place the display windows at appropriate positions D4. Client will not prevent displays from being larger than client monitors, but the window manager may impose some size restrictions. D5. Toggling fullscreen mode after startup should only affect the window that was acted upon - currently if client is started in fullscreen mode, exiting fullscreen mode for one window will also exit fullscreen mode for all other windows -- that will need to be changed. - (If fullscreen toggle worked at the application level rather than the window level, it's much more difficult to decide what to do if there are more windows open than client monitors. It's easier to leave those sorts of policy decisions to the user.)