[systemd-devel] Multi seats setup How-to

Floris jkfloris at dds.nl
Fri Sep 4 12:36:20 PDT 2015


> I can't create a new seat1, no idea why.
>
> Here is my current configuration:
>
> -nvidia card + nvidia driver + nouveau blacklisted
> - USB 3 dock station with displaylink driver + systemd service
> - gdm
> - systemd 219
>
> ---------------------------------------------------------------------------
> $ loginctl seat-status
>         Sessions: *1 c1
>          Devices:
>
>                   ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0
>                   │ drm:card0
>
> ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/renderD128
>                   │ drm:renderD128
>
> ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/graphics/fb0
>                   │ [MASTER] graphics:fb0 "nouveaufb"

there is still some nouveau on your system, but if this belongs to seat0
this isn't a problem for now.

>     ............................................................................
>                   ├─/sys/devices/platform/evdi.0/graphics/fb1
>                   │ [MASTER] graphics:fb1 "evdidrmfb" [*]


>                   ├─/sys/devices/platform/evdi.1/drm/card2
>                   │ drm:card2
>                   ├─/sys/devices/platform/evdi.1/graphics/fb2
>                   │ [MASTER] graphics:fb2 "evdidrmfb" [*]

[*] attach these two also to seat1, or maybe seat1 and seat2. Your the usb3
displaylink has two monitor outputs, so you can create three seats ;-)

>                   ├─/sys/devices/virtual/misc/kvm
>                   │ misc:kvm
>                   └─/sys/devices/virtual/misc/rfkill
>                     misc:rfkill
> -------------------------------------------------------------------------------------
>
> # loginctl attach seat1 /sys/devices/platform/evdi.1/drm/card2
> then same for usb devices
>
>
> $ ls /etc/udev/rules.d
> 72-seat-drm-platform-evdi_0.rules
> 72-seat-drm-platform-evdi_1.rules
> 72-seat-input-pci-0000_00_14_0-usb-0_10_4_1_1_1.rules
> 72-seat-input-pci-0000_00_14_0-usb-0_10_4_2_1_2.rules
> 72-seat-usb-pci-0000_00_14_0.rules
> 72-seat-usb-pci-0000_00_14_0-usb-0_10_4.rules
> 99-displaylink.rules


> 99-nvidia_seats.rules

If your nvidia card is only for seat0, you can remove this rule.
(everything without a rule belongs to seat0)

>
> NB: All the 72-seat* have been created when I run $ loginctl attache
> seat1 MyDevice
>
> ----------------------------
> $ udevadmn info /sys/devices/platform/evdi.1/drm/card2
>
> P: /devices/platform/evdi.1/drm/card2
> N: dri/card2
> E: DEVNAME=/dev/dri/card2
> E: DEVPATH=/devices/platform/evdi.1/drm/card2
> E: DEVTYPE=drm_minor
> E: ID_FOR_SEAT=drm-platform-evdi_1
> E: ID_PATH=platform-evdi.1
> E: ID_PATH_TAG=platform-evdi_1
> E: ID_SEAT=seat1
> E: MAJOR=226
> E: MINOR=2
> E: SUBSYSTEM=drm
> E: TAGS=:seat:seat1:uaccess:
> E: USEC_INITIALIZED=160111782
> ------------------------------------------------------------
>
> $ cat /etc/udev/rules.d/99-displaylink.rules
>  (shipped with the displaylink .rmp driver)
> ---------------------------------------
> ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR}=="DisplayLink",
> MODE="0660", RUN+="/bin/systemctl start displaylink.service"
> ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_VENDOR}=="DisplayLink",
> RUN+="/bin/systemctl stop displaylink.service"
> ----------------------------------------------
>
> $ cat /etc/udev/rules.d/99-nvidia_seats.rules
> ----------------------------------------------------------
> # provide a suitable udev rule to tag your NVIDIA card as  
> "master-of-seat"
>   SUBSYSTEM=="drm", KERNEL=="card[0-9]*", ATTRS{vendor}=="0x10de",
> DRIVERS=="nvidia", TAG+="master-of-seat"
>
>   SUBSYSTEM=="pci", ATTRS{vendor}=="0x10de", DRIVER=="nvidia",
> TAG+="seat", TAG+="master-of-seat"
> ----------------------------------------------------------------
>
> cat /etc/udev/rules.d/72-seat-drm-platform-evdi_1.rules
> -----------------------------------------------
> TAG=="seat", ENV{ID_FOR_SEAT}=="drm-platform-evdi_1",  
> ENV{ID_SEAT}="seat1"
> -------------------------------------------------
>
> cat  
> /etc/udev/rules.d/72-seat-input-pci-0000_00_14_0-usb-0_10_4_1_1_1.rules
> --------------------------------------
>
> TAG=="seat", ENV{ID_FOR_SEAT}=="input-pci-0000_00_14_0-usb-0_10_4_1_1_1",
> ENV{ID_SEAT}="seat1"
> ---------------------------------------------------
>
>
>
> # systemctl restart systemd-udev-trigger.service (or even reboot)
>
> $ loginctl show-session (two users logged in)
>   SESSION        UID USER             SEAT
>          2       1001 Martin           seat0
>          1       1000 Louis            seat0
>         c1         42 gdm              seat0
> 3 sessions listed.
>
> $ loginctl list-seats
>
> SEAT
> seat0
>
> 1 seats listed.
>
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>
> What am I missing? Why can't I create seat1 ?
> Maybe # rm /etc/udev/rules.d/72*  and try again ?
>
>

attach the [MASTER] graphics:fb* to seat1 and it should work.

success,

floris


More information about the systemd-devel mailing list