Multiseat on Ubuntu 18.04?

I've been reading (old) guides all day and I still know nothing about multiseat on Ubuntu 18.04. To make matters worse, I only have one graphics card with multiple outputs.

The only thing that gives me hope is loginctl list-seats which indicates that my Ubuntu knows about seats.

How can I set up my machine in multiseat?

Edit: output of loginctl commands.

Please note that not everything is connected. I want to first figure out how to get about it, not just plunge in. I figure each seat will have its own USB hub (HID devices + whatever else needed) + one of the displays.

loginctl list-seats
SEAT            
seat0           

1 seats listed.

loginctl seat-status seat0

seat0
Sessions: *c1
 Devices:
      ├─/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input1
      │ input:input1 "Power Button"
      ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
      │ input:input0 "Power Button"
      ├─/sys/devices/pci0000:00/0000:00:01.3/0000:03:00.0/usb1
      │ usb:usb1
      │ ├─/sys/devices/pci0000:00/0000:00:01.3/0000:03:00.0/usb1/1-12/1-12:1.0/input/input11
      │ │ input:input11 "iMON USB Touchscreen (15c2:0034)"
      │ ├─/sys/devices/pci0000:00/0000:00:01.3/0000:03:00.0/usb1/1-12/1-12:1.0/input/input2
      │ │ input:input2 "iMON Panel, Knob and Mouse(15c2:0034)"
      │ └─/sys/devices/pci0000:00/0000:00:01.3/0000:03:00.0/usb1/1-12/1-12:1.0/rc/rc0/input3
      │   input:input3 "iMON Remote (15c2:0034)"
      ├─/sys/devices/pci0000:00/0000:00:01.3/0000:03:00.0/usb2
      │ usb:usb2
      ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/card0
      │ [MASTER] drm:card0
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/card0/card0-DP-1
      │ │ [MASTER] drm:card0-DP-1
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/card0/card0-DP-2
      │ │ [MASTER] drm:card0-DP-2
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/card0/card0-DP-3
      │ │ [MASTER] drm:card0-DP-3
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/card0/card0-DVI-D-1
      │ │ [MASTER] drm:card0-DVI-D-1
      │ └─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/card0/card0-HDMI-A-1
      │   [MASTER] drm:card0-HDMI-A-1
      ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.0/drm/renderD128
      │ drm:renderD128
      ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.1/sound/card0
      │ sound:card0 "NVidia"
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.1/sound/card0/input12
      │ │ input:input12 "HDA NVidia HDMI/DP,pcm=3"
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.1/sound/card0/input13
      │ │ input:input13 "HDA NVidia HDMI/DP,pcm=7"
      │ ├─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.1/sound/card0/input14
      │ │ input:input14 "HDA NVidia HDMI/DP,pcm=8"
      │ └─/sys/devices/pci0000:00/0000:00:03.1/0000:26:00.1/sound/card0/input15
      │   input:input15 "HDA NVidia HDMI/DP,pcm=9"
      ├─/sys/devices/pci0000:00/0000:00:07.1/0000:27:00.3/usb3
      │ usb:usb3
      ├─/sys/devices/pci0000:00/0000:00:07.1/0000:27:00.3/usb4
      │ usb:usb4
      ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1
      │ sound:card1 "Generic"
      │ ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input10
      │ │ input:input10 "HD-Audio Generic Front Headphone"
      │ ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input4
      │ │ input:input4 "HD-Audio Generic Front Mic"
      │ ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input5
      │ │ input:input5 "HD-Audio Generic Rear Mic"
      │ ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input6
      │ │ input:input6 "HD-Audio Generic Line"
      │ ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input7
      │ │ input:input7 "HD-Audio Generic Line Out Front"
      │ ├─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input8
      │ │ input:input8 "HD-Audio Generic Line Out Surround"
      │ └─/sys/devices/pci0000:00/0000:00:08.1/0000:28:00.3/sound/card1/input9
      │   input:input9 "HD-Audio Generic Line Out CLFE"
      └─/sys/devices/virtual/misc/rfkill
        misc:rfkill

Solution 1:

Multiple video cards is by far the easy way to set up multiseat. It allows you to avoid the mess of Xephyr and any other additional configuration.

Setting up a second seat (assuming you had a second video card) would be no more simple than issuing the command:

"loginctl attach seat1 __________________"

Once you reboot, you should have two login screens. All other configuration is generally incidental after that.

Does your motherboard support a second full-length PCI-E graphics slot? If it does not, that is not an automatic disqualifier. You can also use one of those PCI-E 1x risers that the bitcoin crowd are fond of using to add a 16x slot to your machine. Not saying you should, I'm just saying you could.

Solution 2:

I agree with @ezst036 regarding this:

Multiple video cards is by far the easy way to set up multiseat. It allows you to avoid the mess of Xephyr and any other additional configuration.

However, even in this "easy scenario", I stumbled upon some issues regarding the interactions between gdm, snap and the logind component. For starters, if you have a 16.04 and do a loginctl seat-status you will be given the information regarding your seat, but if you try that in 18.04 an error will be thrown:

Could not get properties: Caller does not belong to any known session

I don't know if that issue is relevant or not.

In order to achieve a functional multiseat configuration in Ubuntu vanilla you can do the following:

  • Install lightdm: By doing sudo apt install lightdm and then be sure to check lightdm as the default login screen in the prompt that will appear.
  • Configure the following in /etc/lightdm/lightdm.conf.d/multiseat.conf (you should create this file, name it as you wish).
[LightDM]
logind-load-seats=true
  • Properly assign the devices to the seat by doing loginctl attach seat-1 <device>

Then you will be able to reboot and everything should fall in place.

There is no need to configure anything in /etc/X11, the previous configuration will automagically set up all the devices properly.

DISCLAIMER: I have two Radeon RX 5700, and I am using the official driver 19.30 from the AMD website. I am not sure if my configuration will work as-is in other setups. YMMV.