Touch/pointer input focus on multi-seat

Jacobo Aragunde Pérez jaragunde at igalia.com
Wed Apr 19 11:58:33 EDT 2017


That's exactly what I was missing! Thank you very much :)

-- 
Jacobo Aragunde
Software Engineer at Igalia


On 19/04/17 16:57, Ucan, Emre (ADITG/SW1) wrote:
> 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