Multiseat

Ausbaufähige Anleitung

Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.


Anmerkung: Aktuelle Ubuntu-Versionen verwenden systemd. Hier wird für ein Multiseat-System nur noch LightDM (oder ein entsprechender anderer Displaymanager) und udev benötigt. Siehe Diskussion zum Artikel.

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte diesen Artikel testen und das Getestet-Tag entsprechend anpassen.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

  2. Systeminformationen ermitteln

  3. Root-Rechte erlangen

  4. Einen Editor verwenden

Inhaltsverzeichnis
  1. Hardware-Voraussetzungen
  2. Xorg-Konfiguration
  3. udev-Regeln für Eingabegeräte
  4. Displaymanager
  5. Dateirechte, Share-Verzeichnisse
  6. Pulseaudio
  7. Problembehebung
  8. Links

Wiki/Icons/Oxygen/X.png Multiseat ist die englische Bezeichnung für einen Mehrplatzrechner. Mit einem solchen System ist es möglich, mit mehreren Benutzern zur gleichen Zeit unabhängig an einem Computer zu arbeiten. Jeder Benutzer besitzt einen eigenen Monitor, eine Tastatur, Maus und auch einen eigenen Desktop. Während dieser Ansatz in den westlichen Industrienationen eher selten ist, gewinnt er in vielen anderen Teilen der Welt an Bedeutung.

Ein Beispiel: ein Vierkern-Prozessor kann auf diese Weise bis zu 10 Office-Arbeitsplätze gleichzeitig bedienen, spart aber die Anschaffung und den Energiebedarf für 9 weitere Rechner ein. Weitere Vorteile liegen in der Systempflege und der gemeinsamen Nutzung von Druckern etc. (Quelle: The world's largest Linux desktop deployment {en}).

Hinweis:

Viele Bereiche von Ubuntu sind noch nicht an einen Multiseat-Betrieb angepasst und es kann an einigen Stellen zu Einschränkungen kommen. Außerdem gibt es noch einige ungelöste Bugs, sodass sich in jedem Fall das Studieren des Abschnitts mit häufigen Problemen und der einschlägigen Bug-Tracker lohnt.

Hardware-Voraussetzungen

Ein Mehrplatzrechner stellt höhere Anforderungen an das verwendete System. Sollte ein Benutzer die Ressourcen des Systems voll auslasten, sind alle weiteren Benutzer in dieser Zeit nur eingeschränkt arbeitsfähig. Ein schneller Prozessor mit 2 Kernen und mindestens 2 GB Arbeitsspeicher sollten vorhanden sein, um sinnvoll arbeiten zu können. Weiter müssen für jeden Benutzer eine Grafikkarte, ein Bildschirm, eine Tastatur und eine Maus zur Verfügung gestellt werden. Grundsätzlich können Grafikkarten verschiedener Hersteller gemischt werden, sofern nur freie Treiber zum Einsatz kommen. Verwendet man hingegen proprietäre Treiber, so werden bestimmte Bibliotheken überschrieben, sodass andere Grafiktreiber nicht oder nur eingeschränkt funktionieren. Wenn möglich, sollten also alle Grafikkarten vom selben Hersteller sein, um Probleme zu vermeiden.

Xorg-Konfiguration

Ermitteln der Grafikkarten

Zunächst muss die PCI-Adresse der Grafikkarten ermittelt werden. Falls eine auf dem Mainboard integrierte Grafikkarte (onboard) und eine weitere Grafikkarte parallel betrieben werden soll, muss vorher im BIOS der Parallelbetrieb beider Grafiksysteme aktiviert werden. Auch wenn viele moderne Mainboards dies unterstützten, ist diese Option standardmäßig deaktiviert, um Strom zu sparen.

Mit folgendem Befehl können die internen PCI-Adressen der Grafikkarten ermittelt werden [1][2].

lspci | grep -i 'vga\|graphic' 

Beispielausgabe:

00:02.0 Display controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: ATI Technologies Inc Cedar PRO [Radeon HD 5450]

Die PCI-Adresse (im Beispiel: 00:02.0 und 01:00.0) werden im Folgenden für die Zuordnung der Seats benötigt.

Minimalkonfiguration der Seats

Für jeden Benutzer wird jeweils eine eigene Konfiguration (Seat) angelegt [3][4], um einen separaten XServer zu ermöglichen. Dabei sollte immer möglichst wenig vorkonfiguriert werden und stattdessen die Autokonfiguration genutzt werden. Die Konfigurationsdateien werden im Ordner /etc/X11/ angelegt. Für ein System mit zwei Seats kann dies wie folgt aussehen:

In jeder Konfigurationsdatei gibt es zwei Abschnitte InputClass. Der erste Abschnitt blockiert zunächst alle Eingabegeräte, wobei der zweite wieder selektiv Eingabegeräte mit einem bestimmten MatchTag zulässt. Welche Eingabegeräte zugeordnet werden, wird später mittels udev-Regeln eingestellt. Für jeden weiteren Seat lassen sich analog weitere Konfigurationen hinzufügen.

Achtung!

Werden Konfigurationen für den XServer aktiviert, die ausschließlich Eingabegeräte mit einer bestimmten Kennzeichnung verwenden, müssen entsprechende udev-Regeln erstellt werden. Anderenfalls lassen sich keine Eingaben tätigen.

Hinweis:

Um Problemen vorzubeugen, sollten die PCI-Adressen in den Konfigurationsdateien einstellig angegeben werden. Aus 00:02.0 wird so 0:2:0.

Hinzufügen zentraler Einstellungen

Neben den individuellen Einstellungen der Seats können auch allgemeine Einstellungen, die für alle Seats gelten sollen, vorgegeben werden. Hierfür können im Verzeichnis /usr/share/X11/xorg.conf.d/ (bei Ubuntu 10.04 /usr/lib/X11/xorg.conf.d/) Konfigurationsdateien hinterlegt werden, die bei jedem Start eines XServers oder beim Entfernen und Hinzufügen von Eingabegeräten angewandt werden. Dabei sollten möglichst neue Dateien hinzugefügt werden und bestehende nicht geändert werden. Die Konfigurationen werden in alphanumerischer Reihenfolge anhand ihrer Dateinamen verwendet. Dazu beginnen diese mit 00..., 01... usw.

Um für alle Seats ein deutsches Tastaturmodell einzustellen, kann folgende Datei genutzt werden:

Das generelle Aktivieren des XServer-Neustarts mit Strg + Alt + ist wie folgt möglich:

Und das Deaktivieren des Grafikkartenlogos beim XServer-Start funktioniert mit:

udev-Regeln für Eingabegeräte

Um Eingabegeräte wie z.B. Tastaturen, Mäuse, Tablets usw. nur einzelnen Seats zugänglich zu machen, werden sie im Hotplug-Manager udev entsprechend gekennzeichnet. Zu diesem Zweck können Regeln im Verzeichnis /etc/udev/rules.d/ angelegt werden. Die Abarbeitung erfolgt alphanumerisch anhand der Nummerierung der Dateinamen. Eine Regel muss die Endung .rules besitzen. Systemregeln sind zumeist unter /lib/udev/rules.d/ zu finden. Zugunsten der Übersichtlichkeit sollte für jeden Seat eine eigene Datei angelegt werden.

Herstellerinformationen auslesen

Regeln können anhand des Gerätenamens, der Geräte-ID oder des USB-Anschlusses erstellt werden. Deshalb werden zunächst die benötigten Informationen ermittelt.

Folgendes Kommando gibt alle Eingabegeräte des System aus:

dmesg | grep -i "input:" 

Beispielausgabe:

[ 1745.947493] input: Logitech USB-PS/2 Optical Mouse as /devices/pci0000:00/0000:00:1a.0/usb2/2-1/2-1.1/2-1.1:1.0/input/input21

Um Informationen über USB-Anschlüsse zu erhalten, kann auch:

lsusb 

oder

dmesg | grep -i "usb" 

verwendet werden.

Eine sehr ausführliche Information zu einem bestimmten Gerät und dem verwendeten Anschluss kann aus dem udev-System ermittelt werden:

udevadm info --query=all --path=/devices/pci0000:00/0000:00:1a.0/usb2/2-1/2-1.1/2-1.1:1.0/input/input21 --attribute-walk 

Darauf folgt eine sehr ausführliche Ausgabe aller beteiligten Komponenten. Für die spätere udev-Regel sind vor allem diese Zeilen wichtig:

looking at device '/devices/pci0000:00/0000:00:1a.0/usb2/2-1/2-1.1/2-1.1:1.0/input/input21':
...
ATTR{name}=="Logitech USB-PS/2 Optical Mouse"
ATTR{phys}=="usb-0000:00:1a.0-1.1/input0"
ATTR{uniq}==""
...

looking at parent device '/devices/pci0000:00/0000:00:1a.0/usb2/2-1/2-1.1':
...
ATTRS{urbnum}=="445270"
ATTRS{idVendor}=="046d"
ATTRS{idProduct}=="c01e"
...

Um aktuelle Änderungen im udev-System in Echtzeit verfolgen zu können, kann auch

udevadm monitor 

verwendet werden.

udev-Regel für ausgewählte Eingabegeräte

Geräte können anhand der ATTRS Attribute identifiziert werden. Empfehlenswert sind idVendor und idProduct. Das Attribut muss in der udev-Regel geprüft werden und anschließend gekennzeichnet werden. Eine Konfiguration, die zunächst alle Geräte für den ersten Seat markiert, könnte wie folgt aussehen:

Jede weitere Regel wird in eine neue Zeile geschrieben. Anschließend kann für jeden weiteren Seat eine Konfiguration erstellt werden, die bestimmte Geräte gemeinsam nutzen oder separat übernehmen. Soll die oben gefundene Maus ausschließlich am zweiten Seat genutzt werden, kann dies wie folgt erreicht werden:

Diese Regel besagt, dass alle Eingabegeräte (SUBSYSTEM=="input") mit der Geräte-ID c01e (ATTRS{idProduct}=="c01e") für den zweiten Seat markiert werden (ENV{ID_INPUT.tags}="input_seat2"). Die Markierung für den ersten Seat wird dabei überschrieben. Sollen Geräte gemeinsam genutzt oder endgültig einem Seat zugewiesen werden, können weitere Funktionen von udev genutzt werden, die in weitere Zuweisungsmöglichkeiten beschrieben werden.

udev-Regel für ausgewählten USB-Hub / USB-Anschluss

Soll für einen Seat ein eigener USB-Hub / USB-Anschluss verwendet, kann dies mittels DEVPATH realisiert werden. Dabei wird jedes Eingabegerät, dass dort angeschlossen wird, dem entsprechendem Seat zugewiesen. Um alle Geräte am USB-HUB 2 dem zweiten Seat zuzuweisen, kann die Konfiguration so aussehen:

Dabei können Platzhalter, wie "*", "?" und "[]" eingesetzt werden. Außerdem können in der Manpage zu udev weitere vordefinierte Variablen nachgelesen werden.

Hinweis:

Der DEVPATH kann sich an einigen Systemen bei jedem Neustart ändern, sodass in diesem Fall eine Identifikation über das angeschlossene Gerät erfolgen muss.

Weitere Zuweisungsmöglichkeiten

Für die Umsetzung komplexerer udev-Regeln stehen weitere Funktionen zur Verfügung. Zu den wichtigsten gehören:

Zusätzlich stehen vordefinierte Variablen für die Verwendung in Regeln zur Verfügung. Mithilfe des Attributs SYMLINK können eigene Einträge im Verzeichnis /dev/ erzeugt werden. So ist es denkbar, alle Geräte eines Seats in einen separaten Ordner zu sammeln. Mittels des Attributs RUN können sogar (kurze) externe Programme gestartet werden.

Regeln wirksam machen

sudo udevadm trigger 

Dieses Kommando macht die Regeln wirksam und die Eingabegeräte stehen sofort den jeweiligen Seats zu Verfügung. Alternativ können Eingabegeräte auch kurz vom System getrennt werden, um sie automatisch zu erkennen.

Displaymanager

Zur grafischen Anmeldung am System gibt es eine Vielzahl an Displaymanagern. Seit Ubuntu 11.10 ist der desktopübergreifende LightDM bei Ubuntu und Xubuntu Standard (bei Lubuntu ab 12.04, bei Kubuntu ab 12.10). LightDM unterstützt den Multiseat-Betrieb von Haus aus und kann in Verbindung mit allen Desktops eingesetzt werden. Bei Systemen vor Ubuntu 11.10 kann LightDM jedoch nicht eingesetzt werden. Hier sollten die klassischen Displaymanager (z.B. GDM, KDM und LXDM) Verwendung finden.

Die Aufgabe der Displaymanager besteht darin, einen XServer zu starten und ein grafisches Anmeldefenster bereit zustellen. In einer Multiseat-Umgebung müssen natürlich mehrere XServer mit unterschiedlichen Konfigurationen gestartet werden und verschiedenen Grafikkarten zugewiesen werden. Dabei stehen viele Parameter zur Verfügung. Die Wichtigsten sind:

XServer Parameter
Parameter Erläuterung
:X Displaynummer des XServers
vtX Gibt die Nummer des virtuellen Terminals an (z.B. vt7)
-config DATEINAME Anzuwendende Konfigurationsdatei
-nolisten tcp Verhindert die Kommunikation des X-Servers über das Netzwerk (default)
-sharevts Gestattet mehreren Seats, sich ein virtuelles Terminal zu teilen. Dies sollte nicht für den ersten Seat angegeben werden.
-novtswitch Verhindert das Wechseln der virtuellen Konsole mit Strg + Alt + F1 bis Strg + Alt + F6
-keeptty Erhält die Verbindung zwischen X-Server und Terminal. Sollte nur zum Debugging genutzt werden.
-isolateDevice PCI:ADRESSE Separiert PCI-Geräte (z.B. Grafikkarten)

LightDM

Der Displaymanager LightDM wird ab Ubuntu 12.04 als Standard bei Ubuntu, Xubuntu und Lubuntu eingesetzt. Die Konfigurationsdatei /etc/lightdm/lightdm.conf muss mit Root-Rechten editiert werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[LightDM]
minimum-display-number=0
minimum-vt=7

[SeatDefaults]

xserver-command=/usr/bin/X
greeter-show-manual-login=true
allow-guest=false
exit-on-failure=true

# Unity
greeter-session=unity-greeter
user-session=ubuntu

## Unity 2D
#greeter-session=unity-greeter
#user-session=ubuntu-2d

## GNOME 2
#greeter-session=unity-greeter
#user-session=gnome-fallback

## GNOME 3
#greeter-session=unity-greeter
#user-session=gnome-shell

## Xfce
#greeter-session=lightdm-gtk-greeter
#user-session=xubuntu

## LXDE
#greeter-session=lightdm-gtk-greeter
#user-session=lubuntu

## KDE
#greeter-session=lightdm-qt-greeter
#user-session=kubuntu

[Seat:0]
xserver-command=/usr/bin/X
xserver-config=xorg_seat1.conf

[Seat:1]
xserver-command=/usr/bin/X :1 -sharevts -keeptty
xserver-config=xorg_seat2.conf

Hinweis:

In dieser Datei müssen die Dateinamen der XServer-Konfigurationsdateien und die PCI-BUS-IDs angepasst werden. Um weitere Seats hinzuzufügen, kann der Abschnitt [Seat:1] als Vorlage verwendet werden. Sollen für Seats unterschiedliche Einstellungen gelten, müssen diese aus dem Abschnitt [SeatDefaults] in alle [Seat:]-Abschnitte verschoben werden.

Dateirechte, Share-Verzeichnisse

Häufig ist bei Multiseat-System auch der gemeinsame Zugriff auf Dateien erwünscht. Damit Dateien nicht immer explizit freigegeben werden müssen, empfielt sich der Einsatz von ACL. Auf diese Weise können unter anderem Share-Verzeichnisse einegrichtet werden, in denen jeder Datei automatisch die Freigabe für bestimmte Benutzer und Gruppen hinzugefügt wird.

Pulseaudio

Standardmäßig wird für jeden angemeldeten Nutzer eine Pulseaudio-Session gestartet. Dabei belegt die Pulseaudio-Session des ersten Nutzers alle Audio-Geräte. Als Workaround muss Pulseaudio als systemweiter Dienst eingerichtet werden. Dadurch werden Zugriffskonflikte auf die Audio-Geräte vermieden und Nutzer können sich an jedem beliebigen Seat anmelden. Für den Zugriff auf den systemweiten Pulseaudio-Dienst müssen alle Nutzer der Gruppe "pulse-access" angehören.

Anschließend können die Audio-Geräte den Seats in Abhängigkeit zur Display-Variablen automatisch per /etc/profile.d/multiseat-audio.sh zugeordnet werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#
# Select multi-seat audio devices
#
# !!! Run Pulseaudio in system daemon mode because of
#     sound device access conflicts in session mode
#     and ability to switch seats !!!
#
# !!! Add all users to pulseaudio group "pulse-access" !!!

## Get device names with "pactl list | grep Name"
case "${DISPLAY#:}" in
    0)
        ### Radeon GPU 1 HDMI audio
        export PULSE_SINK='alsa_output.pci-0000_01_00.1.hdmi-stereo'

        ### Onboard analogue input
        export PULSE_SOURCE='alsa_input.pci-0000_00_1b.0.analog-stereo'
    ;;

    1)
        ### Radeon GPU 2 HDMI audio
        export PULSE_SINK='alsa_output.pci-0000_03_00.1.hdmi-stereo'

        ### Onboard analogue input
        export PULSE_SOURCE='alsa_input.pci-0000_00_1b.0.analog-stereo'
    ;;

#    2)
#        ### <custom name of audio output>
#        export PULSE_SINK='<your ALSA output device>'
#
#        ### <custom name of audio input>
#        export PULSE_SOURCE='<your ALSA input device>'
#    ;;
#
#    .
#    .
#    .
#    .
#    .

    *)
        ### Fallback audio device for displays/seats not listed here
        export PULSE_SINK='<your ALSA output device>'
        export PULSE_SOURCE='<your ALSA input device>'
    ;;
esac

Problembehebung

Schwarzer Bildschirm

Bei Verwendung des proprietären NVidia-Treibers (ab Version 302.xx) kann es vorkommen, dass manche Seats schwarz bleiben. Hier muss folgende Zeile in jede xorg.conf in den Abschnitt "Device" eingetragen werden.

1
2
3
4
5
Section "Device"
...
Option         "ProbeAllGpus"          "false"
...
EndSection

Kein Ton

Bei der Verwendung von nur einer Soundkarte kann nur ein Anwender auf das Audiogerät zugreifen. Weitere Anwender bekommen von PulseAudio nur einen Audio-Dummy zur Verfügung gestellt. Das Problem kann behoben werden, indem jeder Benutzer den Gruppen audio und pulse-access zugewiesen wird. Jedoch blockieren bestimmte Anwendungen wie Java-Programme und der Flashplayer das Audiogerät, so dass diese Anwendungen trotzdem nur einmal zur gleichen Zeit auf ein Gerät zugreifen können. Sollten mehrere Soundkarten im System vorhanden sein, können Arbeitsplätze an eine bestimmte Audiohardware gebunden werden.

Tastatureingaben landen auf der Konsole

Es ist möglich, dass sämtliche Tastatureingaben auf der Konsole landen. Dieses Problem kann behoben werden, indem beim Booten der Kernelparameter "vga=" entfernt wird. Sollte dies nicht helfen, kann noch "nomodeset" als Parameter angegeben werden. Außerdem soll der XServer-Parameter "-keeptty" helfen. Das Problem ist leider noch nicht abschließend gelöst.

Grafikfehler auf einem XServer

Es kommt vor, dass bei einem XServer Grafikfehler durch Mausbewegungen entstehen. Beheben lässt sich das Problem, indem man die Parameter "-novtswitch -sharevts" bei dem betreffenden Server weglässt. Bei allen weiteres Seats werden sie aber weiterhin benötigt! XDM, GDM und KDM müssen diesbezüglich entsprechend angepasst werden.

Fenster flackern oder sind schwarz

Alle Benutzer müssen der Gruppe video hinzugefügt werden, da sie sonst nicht auf die Grafikschnittstelle DRI zugreifen können.

Mein Seat reagiert nicht auf Maus- oder Tastatureingaben

Dies liegt zumeist an einer falschen Einstellung des XServers und der zugehörigen udev-Regeln. Durch das Booten in die Konsole können die Einstellungen korrigiert werden. Solange zumindest ein Seat funktioniert, ist die Konfiguration auch ohne Neustart möglich.

X-Server-Absturz bei Strg+c

Dieser Bug ist noch nicht vollständig gelöst. Ein Workaround sieht vor, für jeden Seat den XServer-Parameter "-keeptty" anzuwenden (893590). Dieser Bug steht wahrscheinlich in Verbindung mit diesem Problem: Tastatureingaben landen auf der Konsole.

LightDM

Keine Passworteingabe möglich

Das Problem ist stark konfigurationsabhängig. Manchmal stellt das Wechseln der Seat-Reihenfolge bereits eine einfache Lösung dar. Ansonsten kann auch eine ältere LightDM-Version installiert werden (976124).

Seat 1 bleibt schwarz

Anscheinend wechselt der erste XServer hier nicht in das richtige virtuelle Terminal. Dies kann manuell mittels Strg + Alt + F7 erzwungen werden. Weitere Workarounds können in den Bug-Trackern gefunden werden: 977547, 903194.

Wechselmedien werden den Seats zufällig zugeordnet

Die Automounter der verschiedenen Desktops sind noch nicht Multiseat-fähig und konkurrieren beim Einhängen externer Massenspeicher. Dabei kommt es zumeist zu Fehlermeldungen in etlichen Seats. Hier hilft das Deaktivieren des Automounters und die Verwendung eines selbst geschriebenen udev-basierten Automounters: Forumsbeitrag.