Merge remote-tracking branch 'remotes/bkoppelmann/tags/pull-tricore-20150629' into...
[qemu.git] / docs / multiseat.txt
blob814496e94c86b0d04a7099fa8187b80d39051576
2 multiseat howto (with some multihead coverage)
3 ==============================================
5 host side
6 ---------
8 First you must compile qemu with a user interface supporting
9 multihead/multiseat and input event routing.  Right now this
10 list includes sdl2, gtk (both 2+3) and vnc:
12   ./configure --enable-sdl --with-sdlabi=2.0
16   ./configure --enable-gtk
19 Next put together the qemu command line (sdk/gtk):
21 qemu    -enable-kvm -usb $memory $disk $whatever \
22         -display [ sdl | gtk ] \
23         -vga std \
24         -device usb-tablet
26 That is it for the first seat, which will use the standard vga, the
27 standard ps/2 keyboard (implicitly there) and the usb-tablet.  Now the
28 additional switches for the second seat:
30         -device pci-bridge,addr=12.0,chassis_nr=2,id=head.2 \
31         -device secondary-vga,bus=head.2,addr=02.0,id=video.2 \
32         -device nec-usb-xhci,bus=head.2,addr=0f.0,id=usb.2 \
33         -device usb-kbd,bus=usb.2.0,port=1,display=video.2 \
34         -device usb-tablet,bus=usb.2.0,port=2,display=video.2
36 This places a pci bridge in slot 12, connects a display adapter and
37 xhci (usb) controller to the bridge.  Then it adds a usb keyboard and
38 usb mouse, both connected to the xhci and linked to the display.
40 The "display=video2" sets up the input routing.  Any input coming from
41 the window which belongs to the video.2 display adapter will be routed
42 to these input devices.
44 The sdl2 ui will start up with two windows, one for each display
45 device.  The gtk ui will start with a single window and each display
46 in a separate tab.  You can either simply switch tabs to switch heads,
47 or use the "View / Detach tab" menu item to move one of the displays
48 to its own window so you can see both display devices side-by-side.
50 For vnc some additional configuration on the command line is needed.
51 We'll create two vnc server instances, and bind the second one to the
52 second seat, simliar to input devices:
54         -display vnc=:1,id=primary \
55         -display vnc=:2,id=secondary,display=video.2
57 Connecting to vnc display :1 gives you access to the first seat, and
58 likewise connecting to vnc display :2 shows the second seat.
60 Note on spice: Spice handles multihead just fine.  But it can't do
61 multiseat.  For tablet events the event source is sent to the spice
62 agent.  But qemu can't figure it, so it can't do input routing.
63 Fixing this needs a new or extended input interface between
64 libspice-server and qemu.  For keyboard events it is even worse:  The
65 event source isn't included in the spice protocol, so the wire
66 protocol must be extended to support this.
69 guest side
70 ----------
72 You need a pretty recent linux guest.  systemd with loginctl.  kernel
73 3.14+ with CONFIG_DRM_BOCHS enabled.  Fedora 20 will do.  Must be
74 fully updated for the new kernel though, i.e. the live iso doesn't cut
75 it.
77 Now we'll have to configure the guest.  Boot and login.  "lspci -vt"
78 should list the pci bridge with the display adapter and usb controller:
80     [root@fedora ~]# lspci -vt
81     -[0000:00]-+-00.0  Intel Corporation 440FX - 82441FX PMC [Natoma]
82                [ ... ]
83                \-12.0-[01]--+-02.0  Device 1234:1111
84                             \-0f.0  NEC Corporation USB 3.0 Host Controller
86 Good.  Now lets tell the system that the pci bridge and all devices
87 below it belong to a separate seat by dropping a file into
88 /etc/udev/rules.d:
90     [root@fedora ~]# cat /etc/udev/rules.d/70-qemu-autoseat.rules
91     SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:12.0", TAG+="seat", ENV{ID_AUTOSEAT}="1"
93 Reboot.  System should come up with two seats.  With loginctl you can
94 check the configuration:
96     [root@fedora ~]# loginctl list-seats
97     SEAT
98     seat0
99     seat-pci-pci-0000_00_12_0
101     2 seats listed.
103 You can use "loginctl seat-status seat-pci-pci-0000_00_12_0" to list
104 the devices attached to the seat.
106 Background info is here:
107   http://www.freedesktop.org/wiki/Software/systemd/multiseat/
110 guest side with pci-bridge-seat
111 -------------------------------
113 Qemu version FIXME and newer has a new pci-bridge-seat device which
114 can be used instead of pci-bridge.  Just swap the device name in the
115 qemu command line above.  The only difference between the two devices
116 is the pci id.  We can match the pci id instead of the device path
117 with a nice generic rule now, which simplifies the guest
118 configuration:
120     [root@fedora ~]# cat /etc/udev/rules.d/70-qemu-pci-bridge-seat.rules
121     SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", \
122             TAG+="seat", ENV{ID_AUTOSEAT}="1"
124 Patch with this rule will be submitted to upstream udev/systemd, so
125 long-term, when systemd with this lands in distros, things will work
126 just fine without any manual guest configuration.
128 Enjoy!
131 Gerd Hoffmann <kraxel@redhat.com>