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, gtk (both 2+3) and vnc: 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 (sdk/gtk): 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 seat, which will use the standard vga, the 27standard ps/2 keyboard (implicitly there) and the usb-tablet. Now the 28additional switches for the second seat: 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 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 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 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 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/ 108 109Enjoy! 110 111-- 112Gerd Hoffmann <kraxel@redhat.com> 113