1 2multiseat howto (with some multihead coverage) 3============================================== 4 5host side 6--------- 7 8First you must compile qemu with a user interface supporting 9multihead/multiseat and input event routing. Right now this 10list includes sdl2 and gtk (both 2+3): 11 12 ./configure --enable-sdl --with-sdlabi=2.0 13 14or 15 16 ./configure --enable-gtk 17 18 19Next put together the qemu command line: 20 21qemu -enable-kvm -usb $memory $disk $whatever \ 22 -display [ sdl | gtk ] \ 23 -vga std \ 24 -device usb-tablet 25 26That is it for the first head, which will use the standard vga, the 27standard ps/2 keyboard (implicitly there) and the usb-tablet. Now the 28additional switches for the second head: 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 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 50Note on spice: Spice handles multihead just fine. But it can't do 51multiseat. For tablet events the event source is sent to the spice 52agent. But qemu can't figure it, so it can't do input routing. 53Fixing this needs a new or extended input interface between 54libspice-server and qemu. For keyboard events it is even worse: The 55event source isn't included in the spice protocol, so the wire 56protocol must be extended to support this. 57 58 59guest side 60---------- 61 62You need a pretty recent linux guest. systemd with loginctl. kernel 633.14+ with CONFIG_DRM_BOCHS enabled. Fedora 20 will do. Must be 64fully updated for the new kernel though, i.e. the live iso doesn't cut 65it. 66 67Now we'll have to configure the guest. Boot and login. "lspci -vt" 68should list the pci bridge with the display adapter and usb controller: 69 70 [root@fedora ~]# lspci -vt 71 -[0000:00]-+-00.0 Intel Corporation 440FX - 82441FX PMC [Natoma] 72 [ ... ] 73 \-12.0-[01]--+-02.0 Device 1234:1111 74 \-0f.0 NEC Corporation USB 3.0 Host Controller 75 76Good. Now lets tell the system that the pci bridge and all devices 77below it belong to a separate seat by dropping a file into 78/etc/udev/rules.d: 79 80 [root@fedora ~]# cat /etc/udev/rules.d/70-qemu-autoseat.rules 81 SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:12.0", TAG+="seat", ENV{ID_AUTOSEAT}="1" 82 83Reboot. System should come up with two seats. With loginctl you can 84check the configuration: 85 86 [root@fedora ~]# loginctl list-seats 87 SEAT 88 seat0 89 seat-pci-pci-0000_00_12_0 90 91 2 seats listed. 92 93You can use "loginctl seat-status seat-pci-pci-0000_00_12_0" to list 94the devices attached to the seat. 95 96Background info is here: 97 http://www.freedesktop.org/wiki/Software/systemd/multiseat/ 98 99Enjoy! 100 101-- 102Gerd Hoffmann <kraxel@redhat.com> 103