Add basic systemd-logind multiseat support

Bug #1085841 reported by Laércio de Sousa
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Light Display Manager
Fix Released
Undecided
Richard Hansen
lightdm (Ubuntu)
Fix Released
Undecided
Richard Hansen

Bug Description

systemd-logind is arrising to replace ConsoleKit in several Linux distributions (Fedora, Archlinux, Mageia, etc.). It fills the lack of proper multiseat support in ConsoleKit, which is being slowly deprecated.

At the moment, only GDM 3.4+ is fully compatible with systemd-logind, which makes it difficult to configure multiseat for other desktop environments than GNOME, specially those suitable for non-accelerated graphics, like XFCE and LXDE.

LightDM is becoming the default login manager for such lightweight DEs, and it will improve greatly the multiseat support in these systems when it's fully systemd-logind compliant.

I believe that, for the moment, both ConsoleKit and systemd-logind support could coexist in LightDM code.

Tags: multiseat

Related branches

Revision history for this message
Laércio de Sousa (lbssousa) wrote :

Just found https://bugs.launchpad.net/lightdm/+bug/930488. Sorry for the duplicate.

Richard Hansen (rhansen)
tags: added: multiseat
Revision history for this message
Richard Hansen (rhansen) wrote :

I don't think this is a duplicate of bug #930488. That bug was about adding basic logind support, and I view this bug as a request to take it further and add basic multiseat support.

For LightDM to completely support multiseat, it should follow the protocol outlined here:
http://www.freedesktop.org/wiki/Software/systemd/writing-display-managers/

Just performing steps 3 and 4 under "complete porting" would get us 90% of the way there. Automatically discovering and reacting to seats appearing and disappearing (steps 1 and 2) would be nice, but that's a fancy feature that can come later (see bug #1190581).

summary: - Add compatibility with systemd-logind (for better multiseat support)
+ Add basic systemd-logind multiseat support
Changed in lightdm:
assignee: nobody → a7x (a7x)
Changed in lightdm (Ubuntu):
assignee: nobody → a7x (a7x)
Revision history for this message
Richard Hansen (rhansen) wrote :

I have uploaded the package in the linked bazaar branch to my PPA (<https://launchpad.net/~a7x/+archive/multiseat>) along with some backported saucy packages for improved logind support in raring. To install:

    sudo apt-add-repository ppa:a7x/multiseat
    sudo apt-get update
    sudo apt-get upgrade

Revision history for this message
Jeremy Bícha (jbicha) wrote :

I assume you guys already have multiseat hardware, but if not, Lennart was offering some to those who want to improve multiseat support.

https://lists.fedoraproject.org/pipermail/devel/2013-July/185145.html

Richard Hansen (rhansen)
Changed in lightdm:
status: New → In Progress
Changed in lightdm (Ubuntu):
status: New → In Progress
Revision history for this message
Laércio de Sousa (lbssousa) wrote :

As multiseat support in LightDM is enhanced, please consider the following:

1. There are currently two models of multiseat setup: one based on USB multiseat devices with DisplayLink (or similar) technology, like Plugable Docking Station, and another one based on multiple video cards, with keyboards/mice/audio devices plugged directly in the CPU or via ordinary USB hubs.

In the first model, input assignment to each seat is trivial: one only needs to pair the display and input connected to the same multiseat device, which is done automatically. On the other hand, the second model (most common in Brazil), display and input pairing is not trivial. The common solution, found in proprietary solutions like Userful Multiseat and Windows Multipoint Server, to do the right seat assignment for input devices is an interface of kind

"Please press F<x> key in the keyboard in front of this display",

where <x> is 1 for the first seat, 2 for the second seat, etc. If the keyboard is connected to a hub, all other devices connected to the same hub are automatically assigned to that seat. It would be nice if LightDM could implement such an interface for seat assignment.

2. Before systemd-logind, all multiseat settings were DISPLAY-oriented, but now IMHO it makes more sense to write these settings in a more "seat id"-oriented fashion. In lightdm.conf, instead of having

[Seat:1]
(...)
xserver-seat=seat-1
(...)

I propose something like

[seat-1]
(...)
xserver-display=:1
(...)

This approach is specially useful for autologin. It make more sense to assign autologin users to seat ids than DISPLAY values. I want, for example, user "bob" loggind automatically in seat-1, regardless of which is the value of DISPLAY environment variable on that seat.

Revision history for this message
Richard Hansen (rhansen) wrote :

> 1. [...] The common solution, found in proprietary solutions like
> Userful Multiseat and Windows Multipoint Server, to do the right
> seat assignment for input devices is an interface of kind
>
> "Please press F<x> key in the keyboard in front of this display",
>
> where <x> is 1 for the first seat, 2 for the second seat, etc. If
> the keyboard is connected to a hub, all other devices connected to
> the same hub are automatically assigned to that seat. It would be
> nice if LightDM could implement such an interface for seat
> assignment.

That is way down the road, and should be the topic of another bug
report. This bug report should only be about adding *basic* multiseat
support. We must learn how to walk before we can run.

>
> 2. Before systemd-logind, all multiseat settings were DISPLAY-oriented,

That is incorrect; the ":0" in [Seat:0] has nothing to do with the
DISPLAY. The part after the colon is an arbitrary string. You can
use [Seat:Bob] if you want to; it makes no difference (other than for
logging, and only if you install the version of LightDM from my PPA
which has some logging improvements).

> but now IMHO it makes more sense to write these settings in a more
> "seat id"-oriented fashion. In lightdm.conf, instead of having
>
> [Seat:1]
> (...)
> xserver-seat=seat-1
> (...)
>
> I propose something like
>
> [seat-1]
> (...)
> xserver-display=:1
> (...)

Due to user switching, it does not make sense to have an
'xserver-display' setting for a seat -- a single LightDM seat might be
associated with multiple X displays.

> This approach is specially useful for autologin. It make more sense
> to assign autologin users to seat ids than DISPLAY values. I want,
> for example, user "bob" loggind automatically in seat-1, regardless
> of which is the value of DISPLAY environment variable on that seat.

That is currently possible with the version of LightDM in my PPA:

    [Seat:foo]
    xserver-seat=seat-1
    autologin-user=bob

Note that it is important to keep the LightDM seat name and the X seat
name independent because LightDM isn't just for launching X.

Revision history for this message
Laércio de Sousa (lbssousa) wrote :

> That is way down the road, and should be the topic of another bug
> report. This bug report should only be about adding *basic* multiseat
> support. We must learn how to walk before we can run.

Bug reported: https://bugs.launchpad.net/lightdm/+bug/1204067

> That is incorrect; the ":0" in [Seat:0] has nothing to do with the
> DISPLAY. The part after the colon is an arbitrary string. You can
> use [Seat:Bob] if you want to; it makes no difference (other than for
>logging, and only if you install the version of LightDM from my PPA
> which has some logging improvements).
> (...)
> That is currently possible with the version of LightDM in my PPA:
>
> [Seat:foo]
> xserver-seat=seat-1
> autologin-user=bob

OK. Thank you for explanation. The important thing here is making autologin user setting independent of DISPLAY value, as LightDM already does, right?

Revision history for this message
Robert Ancell (robert-ancell) wrote :

This should be there now, please open new bugs if any features are missing.

Changed in lightdm:
status: In Progress → Fix Released
Changed in lightdm (Ubuntu):
status: In Progress → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Related blueprints

Remote bug watches

Bug watches keep track of this bug in other bug trackers.