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 <mich...@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?