Touch/pointer input focus on multi-seat

Ucan, Emre (ADITG/SW1) eucan at de.adit-jv.com
Wed Apr 19 10:57:30 EDT 2017


Hi,

You have to also set which touch device should be routed for which display, e.g.:
ATTRS{phys}=="usb-0000:00:14.0-3.2/input0", ENV{WL_SEAT}="seat_1", ENV{WL_OUTPUT}="HDMI-A-1"
ATTRS{phys}=="usb-0000:00:14.0-2/input0", ENV{WL_SEAT}="seat_2", ENV{WL_OUTPUT}="HDMI-A-2"

Otherwise, weston thinks that both touch devices are for the first display.


Best regards

Emre Ucan
Software Group I (ADITG/SW1)

Tel. +49 5121 49 6937

> -----Original Message-----
> From: Jacobo Aragunde Pérez [mailto:jaragunde at igalia.com]
> Sent: Mittwoch, 19. April 2017 16:52
> To: Ucan, Emre (ADITG/SW1); genivi-ivi-layer-management at lists.genivi.org
> Cc: genivi-projects at lists.genivi.org
> Subject: Re: Touch/pointer input focus on multi-seat
> 
> I see! Thanks for the quick response. Still, I haven't been able to get
> touch input in one of the screens so I wonder if somebody has actually
> tested a similar configuration :)
> 
> I'm trying two Lilliput touchscreens and the first one (screen 0, part
> of seat_1) is sending touch input properly to the application, but the
> other isn't. According to my tests, events from the second touchscreen
> don't actually reach the application.
> 
> Find below all the relevant data (I think).
> 
> # cat /etc/udev/rules.d/seats.rules
> ATTRS{name}=="Logitech USB Keyboard", ENV{WL_SEAT}="seat_1"
> ATTRS{name}=="Dell Dell USB Keyboard", ENV{WL_SEAT}="seat_2"
> #using phys because both touchscreens have same name
> ATTRS{phys}=="usb-0000:00:14.0-3.2/input0", ENV{WL_SEAT}="seat_1"
> ATTRS{phys}=="usb-0000:00:14.0-2/input0", ENV{WL_SEAT}="seat_2"
> 
> # LayerManagerControl get input device seat_1 capabilities
> keyboard
> touch
> # LayerManagerControl get input device seat_2 capabilities
> keyboard
> touch
> # LayerManagerControl get surface 10651 input acceptance
> seat_1
> # LayerManagerControl get surface 10653 input acceptance
> seat_2
> 
> # LayerManagerControl get scene
> screen 0 (0x0)
> ---------------------------------------
> - resolution:           x=1024, y=768
> - hardware layer count: 0
> - layer render order:   1000(0x3e8),
> 
>     layer 1000 (0x3e8)
>     ---------------------------------------
>     - created by pid:       0
>     - original size:        x=1024, y=768
>     - destination region:   x=0, y=0, w=1024, h=768
>     - source region:        x=0, y=0, w=1024, h=768
>     - orientation:          0 (up is top)
>     - opacity:              1
>     - visibility:           1
>     - type:                 0 (unknown)
>     - surface render order: 10651(0x299b),
>     - on screen:            0(0x0)
> 
>         surface 10651 (0x299b)
>         ---------------------------------------
>         - created by pid:       1651
>         - original size:      x=806, y=491
>         - destination region: x=0, y=0, w=806, h=491
>         - source region:      x=0, y=0, w=806, h=491
>         - orientation:        0 (up is top)
>         - opacity:            1
>         - visibility:         1
>         - pixel format:       0 (R-8)
>         - native surface:     0
>         - counters:           frame=0, draw=0, update=0
>         - on layer:           1000(0x3e8)
> 
> screen 1 (0x1)
> ---------------------------------------
> - resolution:           x=1280, y=720
> - hardware layer count: 0
> - layer render order:   2000(0x7d0),
> 
>     layer 2000 (0x7d0)
>     ---------------------------------------
>     - created by pid:       0
>     - original size:        x=1280, y=720
>     - destination region:   x=0, y=0, w=1280, h=720
>     - source region:        x=0, y=0, w=1280, h=720
>     - orientation:          0 (up is top)
>     - opacity:              1
>     - visibility:           1
>     - type:                 0 (unknown)
>     - surface render order: 10653(0x299d),
>     - on screen:            1(0x1)
> 
>         surface 10653 (0x299d)
>         ---------------------------------------
>         - created by pid:       1653
>         - original size:      x=806, y=491
>         - destination region: x=0, y=0, w=806, h=491
>         - source region:      x=0, y=0, w=806, h=491
>         - orientation:        0 (up is top)
>         - opacity:            1
>         - visibility:         1
>         - pixel format:       0 (R-8)
>         - native surface:     0
>         - counters:           frame=0, draw=0, update=0
>         - on layer:           2000(0x7d0)
> 
> 
> Thanks again,
> --
> Jacobo Aragunde
> Software Engineer at Igalia
> 
> 
> On 19/04/17 14:43, Ucan, Emre (ADITG/SW1) wrote:
> > Hi,
> >
> > If you have two touchscreens, you should also have two different touch
> devices.
> > Then you can basically assign the touch device of screen 0 to seat 1 and
> touch device of screen 1 to seat 2.
> >
> > You do not need to set focus for touch devices. It set automatically when
> you touch a surface.
> >
> > Best regards
> >
> > Emre Ucan
> > Software Group I (ADITG/SW1)
> >
> > Tel. +49 5121 49 6937
> >
> >> -----Original Message-----
> >> From: genivi-ivi-layer-management [mailto:genivi-ivi-layer-management-
> >> bounces at lists.genivi.org] On Behalf Of Jacobo Aragunde Pérez
> >> Sent: Mittwoch, 19. April 2017 14:38
> >> To: genivi-ivi-layer-management at lists.genivi.org
> >> Cc: genivi-projects at lists.genivi.org
> >> Subject: Touch/pointer input focus on multi-seat
> >>
> >> Hi!
> >>
> >> Here I am again, pushing the boundaries of the multi-seat implementation
> :)
> >>
> >> The goal is to be able to run two browser windows on separate screens
> >> and each with their own set of input devices. Imagine I have a board
> >> connected to two touch screens and two keyboards, and the following
> seat
> >> setup:
> >>
> >> * seat_1: keyboard A, touch input on screen 0
> >> * seat_2: keyboard B, touch input on screen 1
> >>
> >> Then I create two browser windows, and assign them to screens and
> seats
> >> like this:
> >>
> >> * surface id 7001: visible on screen 0, input acceptance to seat_1
> >> * surface id 7002: visible on screen 1, input acceptance to seat_2
> >>
> >> Now I give both surfaces the keyboard focus; with the work I've done so
> >> far in the browser, each surface will receive keystrokes from their own
> >> keyboard. So far so good :)
> >>
> >> Unfortunately, when I try to do the same with the touch focus, it's
> >> impossible to do. This is the error message I get:
> >>
> >> ```
> >> # LayerManagerControl set surfaces 7002,7001 input focus touch
> >> setting input focus in LayerManagerControl
> >> Cannot set pointer or touch focus for multiple surfaces
> >> LayerManagerService returned: failed
> >> Failed to set input focus
> >> ```
> >>
> >> So it looks it's not possible by design. Any ideas how to do this setup?
> >>
> >> Thank you in advance!
> >> --
> >> Jacobo



More information about the genivi-ivi-layer-management mailing list