]> git.proxmox.com Git - mirror_qemu.git/blame - docs/multiseat.txt
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
[mirror_qemu.git] / docs / multiseat.txt
CommitLineData
8977bd11
GH
1
2multiseat howto (with some multihead coverage)
3==============================================
4
5host side
6---------
7
8First you must compile qemu with a user interface supporting
90525fe2 9multihead/multiseat and input event routing. Right now this
86fdcf23 10list includes sdl2, gtk (both 2+3) and vnc:
8977bd11
GH
11
12 ./configure --enable-sdl --with-sdlabi=2.0
13
90525fe2
GH
14or
15
16 ./configure --enable-gtk
17
8977bd11 18
86fdcf23 19Next put together the qemu command line (sdk/gtk):
8977bd11
GH
20
21qemu -enable-kvm -usb $memory $disk $whatever \
90525fe2 22 -display [ sdl | gtk ] \
8977bd11
GH
23 -vga std \
24 -device usb-tablet
25
86fdcf23 26That is it for the first seat, which will use the standard vga, the
8977bd11 27standard ps/2 keyboard (implicitly there) and the usb-tablet. Now the
86fdcf23 28additional switches for the second seat:
8977bd11
GH
29
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
35
36This places a pci bridge in slot 12, connects a display adapter and
37xhci (usb) controller to the bridge. Then it adds a usb keyboard and
38usb mouse, both connected to the xhci and linked to the display.
39
40The "display=video2" sets up the input routing. Any input coming from
41the window which belongs to the video.2 display adapter will be routed
42to these input devices.
43
90525fe2
GH
44The sdl2 ui will start up with two windows, one for each display
45device. The gtk ui will start with a single window and each display
46in a separate tab. You can either simply switch tabs to switch heads,
47or use the "View / Detach tab" menu item to move one of the displays
48to its own window so you can see both display devices side-by-side.
49
86fdcf23
GH
50For vnc some additional configuration on the command line is needed.
51We'll create two vnc server instances, and bind the second one to the
52second seat, simliar to input devices:
53
54 -display vnc=:1,id=primary \
55 -display vnc=:2,id=secondary,display=video.2
56
57Connecting to vnc display :1 gives you access to the first seat, and
58likewise connecting to vnc display :2 shows the second seat.
59
2082bac1
GH
60Note on spice: Spice handles multihead just fine. But it can't do
61multiseat. For tablet events the event source is sent to the spice
62agent. But qemu can't figure it, so it can't do input routing.
63Fixing this needs a new or extended input interface between
64libspice-server and qemu. For keyboard events it is even worse: The
65event source isn't included in the spice protocol, so the wire
66protocol must be extended to support this.
67
8977bd11
GH
68
69guest side
70----------
71
72You need a pretty recent linux guest. systemd with loginctl. kernel
733.14+ with CONFIG_DRM_BOCHS enabled. Fedora 20 will do. Must be
74fully updated for the new kernel though, i.e. the live iso doesn't cut
75it.
76
3503206a
GH
77Now we'll have to configure the guest. Boot and login. "lspci -vt"
78should list the pci bridge with the display adapter and usb controller:
79
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
85
86Good. Now lets tell the system that the pci bridge and all devices
87below it belong to a separate seat by dropping a file into
88/etc/udev/rules.d:
89
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"
92
93Reboot. System should come up with two seats. With loginctl you can
94check the configuration:
95
96 [root@fedora ~]# loginctl list-seats
97 SEAT
98 seat0
99 seat-pci-pci-0000_00_12_0
100
101 2 seats listed.
102
103You can use "loginctl seat-status seat-pci-pci-0000_00_12_0" to list
104the devices attached to the seat.
105
106Background info is here:
107 http://www.freedesktop.org/wiki/Software/systemd/multiseat/
8977bd11 108
eb6c6a60
GH
109
110guest side with pci-bridge-seat
111-------------------------------
112
113Qemu version FIXME and newer has a new pci-bridge-seat device which
114can be used instead of pci-bridge. Just swap the device name in the
115qemu command line above. The only difference between the two devices
116is the pci id. We can match the pci id instead of the device path
117with a nice generic rule now, which simplifies the guest
118configuration:
119
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"
123
124Patch with this rule will be submitted to upstream udev/systemd, so
125long-term, when systemd with this lands in distros, things will work
126just fine without any manual guest configuration.
127
8977bd11
GH
128Enjoy!
129
130--
131Gerd Hoffmann <kraxel@redhat.com>