Packages

Revision 9 as of 2014-02-17 18:46:25

Clear message

Introduction

The MultiseatTeam maintains packages in the multiseat PPA. These packages are Ubuntu packages that have been patched to improve support for multiseat.

Status

TODO: document what patches have been applied to what packages, whether those patches have been submitted upstream, and whether they have been accepted upstream

lightdm

The lightdm package in the PPA contains some patches that make it possible to support multiseat, although at the moment you must configure the seats manually (see the instructions below). Automatic multiseat support has not yet been added (see bug #1190581).

xorg-server

The xorg-server package in the multiseat PPA includes patches and changes for the following issues:

  • bug #1209008: fix card detection on non-seat0 seats (sent upstream - review needed)

  • bug #659793: pass --enable-kdrive-evdev to configure (needed for Xephyr-based multiseat setup)

  • bug #???: enable Xephyr window placement using -screen WxH+X+Y option (sent upstream - review needed)

  • bug #???: introduce MatchSeat capability in xorg.conf (sent upstream - review needed)

  • bug #1228095: enable defaults for non-seat0 seats (no need to use systemd-multi-seat-x wrapper) (upstreamed - see commits c73c36b53 and 46cf2a6093)

  • bug #1243138: disable unit tests because buildd hangs on xvfb-run test

gdm

The gdm package in the multiseat PPA includes patches and changes for the following issues:

  • bug #???: Add patch to fix automatic/timed login in multiseat context
  • bug #???: Add patch to explicitly set variable XDG_VTNR for seat0 (needed to avoid getting inactive graphical sessions for seat0 in some multiseat setups)

Others

The PPA contains some packages from saucy that have been backported to raring to complete logind support. The initial list of packages came from the ubuntu-core-dev team's logind PPA. Please contact the Ubuntu Multiseat team if you are aware of any additional packages that need backporting to raring.

Instructions

1. Name Your Seats

Come up with names for your seats. You must have a primary seat named seat0. All other seat names must begin with seat (see the rules for seat naming). Note that VT switching (and thus fast user switching) is (currently) only possible on seat0.

2. Configure Seat Hardware

Assign hardware devices to your seats by setting up udev rules. Note that all hardware is assigned to seat0 by default, so you only need to assign hardware to other seats.

Important notes:

  • For every seat other than seat0, you MUST:

    • set ID_SEAT to the name of the seat

    • add a tag named after the seat
  • Unless you are you are using open-source video drivers, you will probably be required to create a rule that adds the master-of-seat tag to the seat's (main) video card.

  • Use udevadm trigger after you edit your rules to make them take effect, and udevadm info --export-db to see what udev did with your devices (to debug your rules).

  • You MUST NOT have any newlines in a rule.

Example #1

Example system #1 has two seats (seat0 and seat1) and uses open-source video drivers. The file /etc/udev/rules.d/99-multiseat.rules was created and the following rules were added to it:

# assign USB ports
TAG=="seat", DEVPATH=="/devices/pci0000:00/0000:00:1d.7/usb2/*", ENV{ID_SEAT}="seat1", TAG+="seat1"

# assign video cards
TAG=="seat", DEVPATH=="/devices/pci0000:00/0000:00:07.0/0000:03:00.0/*", ENV{ID_SEAT}="seat1", TAG+="seat1"

Example #2

Example system #2 has two seats (seat0 and seat1) and uses the proprietary NVIDIA driver. The file /etc/udev/rules.d/99-multiseat.rules was created and the following rules were added to it:

# assign USB ports
TAG=="seat", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/*", ENV{ID_SEAT}="seat1", TAG+="seat1"

# assign video cards
TAG=="seat", DEVPATH=="/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/*", ENV{ID_SEAT}="seat1", TAG+="seat1"

# add master-of-seat tag to video cards
TAG=="seat", DEVPATH=="/devices/pci0000:00/0000:00:01.0/0000:01:00.0/*", TAG+="master-of-seat"
TAG=="seat", DEVPATH=="/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/*", TAG+="master-of-seat"

3. Configure lightdm

Modify your lightdm.conf and make sure you have an entry per seat. Add xdg-seat=<seatname> to each seat and add xserver-vt=0 to each seat EXCEPT seat0.

Also, add user-authority-in-system-dir=true to the SeatDefaults section. This prevents LightDM from trying to use the same Xauthority file for all seats, which causes permission denied problems.

If you do not use the version of X from the multiseat PPA, you will need to tell LightDM to start /lib/systemd/systemd-multi-seat-x instead of X. This program is a small wrapper around X that prevents input events on non-seat0 seats from going to seat0 and disables VT switching on non-seat0 seats. It is only available in Ubuntu 13.10 (saucy) and newer.

Example:

[SeatDefaults]
user-authority-in-system-dir=true
# for saucy and newer: the following line is only needed if you're not
# using the version of X from the multiseat PPA (but it shouldn't hurt
# if you are)
xserver-command=/lib/systemd/systemd-multi-seat-x

[Seat:0]
xdg-seat=seat0

[Seat:1]
xdg-seat=seat1
xserver-vt=0

4. Install PPA Packages

Upgrade to the packages in the multiseat PPA by running the following commands:

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

5. (if needed) Configure X.Org server

If you need to use a non-KMS (e.g. proprietary NVIDIA or AMD) driver for your graphics card, you need to create a file in directory /etc/X11/xorg.conf.d with extension .conf. You'll also need to tag another suitable device as master-of-seat in udev (see above) and attach it to your desired seat (e.g. seat1).

Example file /etc/X11/xorg.conf.d/90-seat1.conf:

Section "Device"
    Identifier "card0"
    Driver "nvidia"
    MatchSeat "seat1"
EndSection

6. (raring only) install libpam-systemd

The libpam-systemd package replaces libpam-xdg-support.

7. Reboot

8. Profit!

Known Issues

  • DVB device ACLs and MythTV: udev and logind want only logged-in users to have access to attached DVB devices. This is accomplished by setting up /dev ACLs when a user logs in. Unfortunately, this conflicts with MythTV, which always wants access to the TV tuner device(s). I'm not exactly sure how to fix this. Modifying /lib/udev/rules.d/70-uaccess.rules and 70-udev-acl.rules and commenting out the dvb lines seems to work, but is fragile -- those files will be replaced the next time systemd-services and udev are upgraded. udev apparently doesn't provide a way to remove a tag once one has been set, so putting a new file in /etc/udev/rules.d won't work. Anyone have any ideas?

  • bug #976124: On some systems, only one user can be logged in by typing a password at a time. All other users must be automatically logged in via LightDM's autologin-user setting.

  • Due to a technical limitation in Linux's virtual terminal subsystem and how it interacts with X, only seat0 can switch users. To switch users on another seat you must first log out and then log back in as the other user. Perhaps Mir, Wayland, and/or kmscon will address this.

  • LightDM is unaware that user switching is unsupported on non-seat0 seats. It will allow you to try to switch, but fails to switch.

  • bug #1190581: Automatic multiseat support has not yet been implemented.

ChangeLog

2013-07-11
  • initial upload of packages for raring
  • initial draft of instructions
2013-07-12
  • update instructions
  • update known issues
2013-07-14
  • interpret LightDM xserver-vt=0 setting to mean -sharevts

  • add documentation for the new LightDM settings
  • improve LightDM logging
  • update instructions
  • update known issues
  • backport newer upstream (saucy) packages to get better logind support

  • add backported acpi-support package to drop consolekit dependency

2013-07-15
  • update known issues
2013-07-17
  • update known issues
  • update dbus

2013-07-18
  • backport newer indicator-session

  • remove known issues that I believe are fixed by the newer indicator-session

2013-07-20
  • upload lightdm for saucy

2013-08-04
  • update lightdm to the latest upstream version

  • lightdm: change xserver-seat setting name to xdg-seat

  • other miscellaneous internal lightdm cleanups in preparation for submission upstream

2013-08-07
2013-08-08
  • add unity-greeter with fix for bug #1201122 integrated

  • add xorg-server with fix for bug #1209008 integrated

  • update known issues
2013-08-10
  • update patch for unity-greeter

2013-08-14
  • update xorg-server and unity-greeter for saucy

  • update lightdm multiseat patch from multiseat bzr branch

2013-10-19
  • raring dbus: cherry-pick changes from saucy 1.6.12-0ubuntu6 and 1.6.12-0ubuntu7

  • raring network-manager: cherry-pick bluetooth bug fix from saucy 0.9.8.0-0ubuntu22 (also raring 0.9.8.0-0ubuntu6.1)

  • raring policykit-1: update to latest saucy version

  • saucy unity-greeter: remove; new upstream version has been released with multiseat change integrated

  • xorg-server: apply fix for bug #1209008 to latest version

  • raring gnome-screensaver, gnome-settings-daemon: update to newer saucy versions to get logind fixes

  • lightdm: apply multiseat patches to latest version

2013-10-23
2013-10-24
2013-10-25
  • backport newer saucy gdm to raring to get logind support; add multiseat automatic login patch that was just added to the saucy version of gdm

2013-11-01
2013-11-07
  • lightdm: update to newer upstream version

2013-12-27
  • raring systemd: cherry-pick changes made for 198-0ubuntu12 (to get org.freedesktop.login1 dbus service)

2014-02-14
2014-02-16
  • update lightdm configuration instructions

2014-02-17
  • saucy xorg-server: update to newer upstream version

  • updated xorg-server section at this wiki page.

  • added MatchSeat example for xorg-server configuration.


CategoryMultiseatTeam