xserver and splitting ultra-wide monitors

Michael Wyraz michael at wyraz.de
Thu Sep 29 21:53:54 UTC 2022


Hello Keith,

I'm glad that you have a look on this. I first tried to contact you 
directly using the intel address in 
https://gitlab.freedesktop.org/xorg/doc/xorg-docs/-/blob/master/MAINTAINERS 
but this seems not be valid anymore.

I absolutely agree with what you wrote about the user-specified vs 
automatically created monitors. But the code I'd like to remove does not 
deal with these. It's only about having 2 monitors on one output.

https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/randr/rrmonitor.c

Lines 526-529 should not be touched. If a monitor with the same name 
will be added elsewhere, the existing should be removed (avoids to have 
multiple monitors with the same name)

Lines 537-551 sould be removed. It's only about having not more than one 
monitor on one output. I removed these on my local xserver and did the 
following test:

# xrandr --listmonitors
Monitors: 1
  0: +*DisplayPort-1 3440/820x1440/346+0+0  DisplayPort-1
# xrandr --setmonitor VIRTUAL-LEFT 1720/0x1440/1+0+0 DisplayPort-1
# xrandr --listmonitors
Monitors: 1
  0: VIRTUAL-LEFT 1720/0x1440/1+0+0  DisplayPort-1
# xrandr --setmonitor VIRTUAL-RIGHT 1720/0x1440/1+1720+0 DisplayPort-1
# xrandr --listmonitors
Monitors: 2
  0: VIRTUAL-LEFT 1720/0x1440/1+0+0  DisplayPort-1
  1: VIRTUAL-RIGHT 1720/0x1440/1+1720+0  DisplayPort-1
# xrandr --delmonitor VIRTUAL-LEFT
# xrandr --delmonitor VIRTUAL-RIGHT
# xrandr --listmonitors
Monitors: 1
  0: +*DisplayPort-1 3440/820x1440/346+0+0  DisplayPort-1

As you can see, all works fine, I can create 2 monitors on the one 
output and the handling of the auto-generated monitor still works as 
expected.

When I do
# xrandr --fb 3440x1441; xrandr --fb 3440x1440
afterwards (this triggers an update to the display manager), I can use 
both monitors on xfce (at least I can drag windows over both and 
maximize on the second but that's a different issue within gtk).

Kind regards,

Michael.


Am 29.09.22 um 22:41 schrieb Keith Packard:
> Michael Wyraz <michael at wyraz.de> writes:
>
>> For the second monitor, the output must be set to "none" which is
>> obviously wrong since it is connected to a device. The reason why it is
>> set to "none" is some code in xserver that removes an monitor if another
>> one is added to the same output:
> That's actually required in the RandR spec:
>
> 	For each output in 'info.outputs, each one is removed from all
> 	pre-existing Monitors. If removing the output causes the list of
> 	outputs for that Monitor to become empty, then that Monitor will
> 	be deleted as if RRDeleteMonitor were called.
>
> The notion of splitting one physical output into multiple virtual
> monitors was not considered when this extension was defined, which is
> why it doesn't work. I don't see any particular reason for *not*
> supporting your use case.
>
> However, there are subtleties here. We want to remove any automatically
> created 'Monitor' objects when mapping user-specified monitors to
> them, and we want to re-generate automatically generated 'Monitors' when
> all virtual monitors associated with an output are removed.
>
> I think what we want is:
>
>   * If no user-specified Monitors map to a particular Output, then automatically
>     create a Monitor for that Output
>
>   * If any user-specified Monitors map to a particular Output, then
>     remove the automatically generated Monitor for that Output.
>     
> In the current spec, there's no real separation between user-specified
> and automatically-generated Monitors, I think that would be necessary to
> make this work?
>


More information about the xorg-devel mailing list