[Question] ZaphodHeads, ServerLayout without position information, and touchscreens

Adam Nielsen a.nielsen at shikadi.net
Fri Jul 24 14:36:26 UTC 2020


> >> but I don't know how to configure xorg.conf
> >> when ServerLayout is described without position information for 
> >> multi-seat setup with one graphic card (zaphod heads).

Are you sure you want a multi-seat setup, which is where multiple
people are sitting in front of the same computer, using their own
keyboards and monitors as if they are using two separate computers?

>      [xorg.conf]
>      Section "ServerLayout"
>          Screen 0 "Screen0" 0 0 # DISPLAY=":0.0"
>          Screen 1 "Screen1" 0 0 # DISPLAY=":0.1"
>      EndSection

This creates a single seat with two independent displays, attached to
the same X session.  This is not multi-seat, this is just multi-monitor
on a single seat.

If you want multi-seat, you generally have to launch a separate Xorg
session for each seat, with effectively a different ServerLayout for
each one.  I am not sure that this is what your requirement actually is.

> However, my customer is saying that they are independent screens and do 
> not overlap even when the origins are all (0,0).
> How can I transform the input touch positions properly in this environment?

The display origins are all at (0,0) as they behave a bit like two
independent computers (perhaps this is where the multi-seat confusion
is coming from).  However if you plug a mouse into the computer, you
will be able to move the cursor between both monitors which means it's
a single seat.  In a true multi-seat set up, you would have to
configure the system to assign the mouse you plugged in to one
seat/monitor or the other, and you could not move it between both
screens.

So one solution to your problem is to configure the system as a true
multi-seat system, with each monitor assigned to a different seat.  You
may however need to add a second video card to the system to do this, as
I cannot recall whether you can share a single video card between seats.
Certainly it was not the case in the past, and I am unsure whether this
is now supported or not.

Alternatively, in this single-seat Zaphod mode, the screens are still
aligned so that the mouse cursor can glide from one monitor to the next,
so the second monitor will have an origin that is not (0,0) as far as
the mouse/touchscreen is concerned.

Have you tried assuming the monitors are set up as a single Xorg
display (":0" only) and setting the transformation matrix accordingly?
For example:

 +---------------------+  +----------------------+
 | Left Monitor (:0.0) |  | Right Monitor (:0.1) |
 | 1920x1200 @ 0,0     |  | 1920x1200 @ 0,0      |
 +---------------------+  +----------------------+

Here you can consider that the mouse/touchscreen has a surface of
3840x1200 to work with, and the Right Monitor is actually at an offset
of (1920,0).

If you left the transformation matrix alone for the left monitor, but
set the one on the right so that it was offset by 1920 pixels
horizontally, would that work?

It would then appear that a touch event on the right monitor would
happen past the edge of the left screen, which should land it on the
right-hand monitor, just like it would if you moved the mouse cursor
off the same edge of the left monitor, and over onto the right-hand
monitor.

I haven't actually tried this so I am only guessing, and of course the
exact transformation values would depend on the screen sizes and how
they are positioned relative to each other in xorg.conf, but it could
be worth experimenting with.

Cheers,
Adam.


More information about the xorg mailing list