45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
								 | 
							
								QEMU Barrier Client
							 | 
						||
| 
								 | 
							
								===================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Generally, mouse and keyboard are grabbed through the QEMU video
							 | 
						||
| 
								 | 
							
								interface emulation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								But when we want to use a video graphic adapter via a PCI passthrough
							 | 
						||
| 
								 | 
							
								there is no way to provide the keyboard and mouse inputs to the VM
							 | 
						||
| 
								 | 
							
								except by plugging a second set of mouse and keyboard to the host
							 | 
						||
| 
								 | 
							
								or by installing a KVM software in the guest OS.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The QEMU Barrier client avoids this by implementing directly the Barrier
							 | 
						||
| 
								 | 
							
								protocol into QEMU.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`Barrier <https://github.com/debauchee/barrier>`__
							 | 
						||
| 
								 | 
							
								is a KVM (Keyboard-Video-Mouse) software forked from Symless's
							 | 
						||
| 
								 | 
							
								synergy 1.9 codebase.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This protocol is enabled by adding an input-barrier object to QEMU.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Syntax::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    input-barrier,id=<object-id>,name=<guest display name>
							 | 
						||
| 
								 | 
							
								    [,server=<barrier server address>][,port=<barrier server port>]
							 | 
						||
| 
								 | 
							
								    [,x-origin=<x-origin>][,y-origin=<y-origin>]
							 | 
						||
| 
								 | 
							
								    [,width=<width>][,height=<height>]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The object can be added on the QEMU command line, for instance with::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -object input-barrier,id=barrier0,name=VM-1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								where VM-1 is the name the display configured in the Barrier server
							 | 
						||
| 
								 | 
							
								on the host providing the mouse and the keyboard events.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								by default ``<barrier server address>`` is ``localhost``,
							 | 
						||
| 
								 | 
							
								``<port>`` is ``24800``, ``<x-origin>`` and ``<y-origin>`` are set to ``0``,
							 | 
						||
| 
								 | 
							
								``<width>`` and ``<height>`` to ``1920`` and ``1080``.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If the Barrier server is stopped QEMU needs to be reconnected manually,
							 | 
						||
| 
								 | 
							
								by removing and re-adding the input-barrier object, for instance
							 | 
						||
| 
								 | 
							
								with the help of the HMP monitor::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (qemu) object_del barrier0
							 | 
						||
| 
								 | 
							
								    (qemu) object_add input-barrier,id=barrier0,name=VM-1
							 |