On Thu, Oct 17, 2024 at 09:53:04PM +0000, Roque Arcudia Hernandez wrote: > From: Andrew Keesler <ankees...@google.com> > > Thanks to 72d277a7, 1ed2cb32, and others, EDID (Extended Display > Identification > Data) is propagated by QEMU such that a virtual display presents legitimate > metadata (e.g., name, serial number, preferred resolutions, etc.) to its > connected guest. > > This change adds the ability to specify the EDID name for a particular > virtio-vga display. Previously, every virtual display would have the same > name: > "QEMU Monitor". Now, we can inject names of displays in order to test guest > behavior that is specific to display names. We provide the ability to inject > the > display name from the display configuration as that most closely resembles how > real displays work (hardware displays contain static EDID information that is > provided to every connected host). > > This new behavior must be enabled by setting the edid_name boolean property on > the display device (it is disabled by default). > > It should be noted that EDID names longer than 12 bytes will be truncated per > spec (I think?). > > Testing: verified that when I specified 2 outputs for a virtio-gpu with > edid_name set, the names matched those that I configured with my vnc display. > > -display vnc=localhost:0,id=aaa,display=vga,head=0,name=AAA \ > -display vnc=localhost:1,id=bbb,display=vga,head=1,name=BBB \ > -device virtio-vga,max_outputs=2,id=vga,edid_name=true
Looking at this again, I'm thinking that it modelling this the wrong way around. On the QEMU side, we have a many<->many relationship between guest display devices and host / remote display outputs. If we assume every host / remote display output corresponds to a separate "window" though, then we can reduce that down to a many:one relationship between host outputs and guest devices. Consider this valid config: $ qemu-system-x86_64 \ -vnc :1 \ -spice port=5902,disable-ticketing \ -display gtk \ -device virtio-vga,max_outputs=2,id=vga All three display outputs show the same guest display, so which of VNC, SPICE & GTK would the virtio-vga EDID data take its names from ? IMHO, the name is a property of the virtio-vga "output" and the various display backends should be honouring what that tells them ie your configuration above should instead be: -display vnc=localhost:0,id=aaa,display=vga,head=0 \ -display vnc=localhost:1,id=bbb,display=vga,head=1 \ -device '{"driver":"virtio-vga", "max_outputs":2, "id":"vga", "outputs":[ { "name":"AAA", }, { "name":"BBB", }, ]}' ..whereupon we have to feed the EDID name from the device back to VNC, so VNC can tell the client of the head name. Note, I'm intentionally using JSON syntax for -device here, to illustrate handling of non-scalar properties. The set of active outputs can be turned on/off at runtime. We can declare that the user should give names for every output at startup, upto whatever they said for "max_outputs". That way a name is available even when non- primary outputs are later turned on at runtime. The secondary reason why I think names ought to be handled with -device is that this is guest visible data, and as a general rule we aim for all guest visible data to be controlled via properties on the frontend, and not have the backend directly change what the guest sees. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|