103 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
 | 
						|
multiseat howto (with some multihead coverage)
 | 
						|
==============================================
 | 
						|
 | 
						|
host side
 | 
						|
---------
 | 
						|
 | 
						|
First you must compile qemu with a user interface supporting
 | 
						|
multihead/multiseat and input event routing.  Right now this
 | 
						|
list includes sdl2 and gtk (both 2+3):
 | 
						|
 | 
						|
  ./configure --enable-sdl --with-sdlabi=2.0
 | 
						|
 | 
						|
or
 | 
						|
 | 
						|
  ./configure --enable-gtk
 | 
						|
 | 
						|
 | 
						|
Next put together the qemu command line:
 | 
						|
 | 
						|
qemu	-enable-kvm -usb $memory $disk $whatever \
 | 
						|
	-display [ sdl | gtk ] \
 | 
						|
	-vga std \
 | 
						|
	-device usb-tablet
 | 
						|
 | 
						|
That is it for the first head, which will use the standard vga, the
 | 
						|
standard ps/2 keyboard (implicitly there) and the usb-tablet.  Now the
 | 
						|
additional switches for the second head:
 | 
						|
 | 
						|
	-device pci-bridge,addr=12.0,chassis_nr=2,id=head.2 \
 | 
						|
	-device secondary-vga,bus=head.2,addr=02.0,id=video.2 \
 | 
						|
	-device nec-usb-xhci,bus=head.2,addr=0f.0,id=usb.2 \
 | 
						|
	-device usb-kbd,bus=usb.2.0,port=1,display=video.2 \
 | 
						|
	-device usb-tablet,bus=usb.2.0,port=2,display=video.2
 | 
						|
 | 
						|
This places a pci bridge in slot 12, connects a display adapter and
 | 
						|
xhci (usb) controller to the bridge.  Then it adds a usb keyboard and
 | 
						|
usb mouse, both connected to the xhci and linked to the display.
 | 
						|
 | 
						|
The "display=video2" sets up the input routing.  Any input coming from
 | 
						|
the window which belongs to the video.2 display adapter will be routed
 | 
						|
to these input devices.
 | 
						|
 | 
						|
The sdl2 ui will start up with two windows, one for each display
 | 
						|
device.  The gtk ui will start with a single window and each display
 | 
						|
in a separate tab.  You can either simply switch tabs to switch heads,
 | 
						|
or use the "View / Detach tab" menu item to move one of the displays
 | 
						|
to its own window so you can see both display devices side-by-side.
 | 
						|
 | 
						|
Note on spice: Spice handles multihead just fine.  But it can't do
 | 
						|
multiseat.  For tablet events the event source is sent to the spice
 | 
						|
agent.  But qemu can't figure it, so it can't do input routing.
 | 
						|
Fixing this needs a new or extended input interface between
 | 
						|
libspice-server and qemu.  For keyboard events it is even worse:  The
 | 
						|
event source isn't included in the spice protocol, so the wire
 | 
						|
protocol must be extended to support this.
 | 
						|
 | 
						|
 | 
						|
guest side
 | 
						|
----------
 | 
						|
 | 
						|
You need a pretty recent linux guest.  systemd with loginctl.  kernel
 | 
						|
3.14+ with CONFIG_DRM_BOCHS enabled.  Fedora 20 will do.  Must be
 | 
						|
fully updated for the new kernel though, i.e. the live iso doesn't cut
 | 
						|
it.
 | 
						|
 | 
						|
Now we'll have to configure the guest.  Boot and login.  "lspci -vt"
 | 
						|
should list the pci bridge with the display adapter and usb controller:
 | 
						|
 | 
						|
    [root@fedora ~]# lspci -vt
 | 
						|
    -[0000:00]-+-00.0  Intel Corporation 440FX - 82441FX PMC [Natoma]
 | 
						|
               [ ... ]
 | 
						|
               \-12.0-[01]--+-02.0  Device 1234:1111
 | 
						|
                            \-0f.0  NEC Corporation USB 3.0 Host Controller
 | 
						|
 | 
						|
Good.  Now lets tell the system that the pci bridge and all devices
 | 
						|
below it belong to a separate seat by dropping a file into
 | 
						|
/etc/udev/rules.d:
 | 
						|
 | 
						|
    [root@fedora ~]# cat /etc/udev/rules.d/70-qemu-autoseat.rules
 | 
						|
    SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:12.0", TAG+="seat", ENV{ID_AUTOSEAT}="1"
 | 
						|
 | 
						|
Reboot.  System should come up with two seats.  With loginctl you can
 | 
						|
check the configuration:
 | 
						|
 | 
						|
    [root@fedora ~]# loginctl list-seats
 | 
						|
    SEAT
 | 
						|
    seat0
 | 
						|
    seat-pci-pci-0000_00_12_0
 | 
						|
 | 
						|
    2 seats listed.
 | 
						|
 | 
						|
You can use "loginctl seat-status seat-pci-pci-0000_00_12_0" to list
 | 
						|
the devices attached to the seat.
 | 
						|
 | 
						|
Background info is here:
 | 
						|
  http://www.freedesktop.org/wiki/Software/systemd/multiseat/
 | 
						|
 | 
						|
Enjoy!
 | 
						|
 | 
						|
--
 | 
						|
Gerd Hoffmann <kraxel@redhat.com>
 |