mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
virtio-input: add input routing support, update multiseat docs.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJVlmJpAAoJEEy22O7T6HE4P5EQANg2QIC5VufMlbRPwfbFSqgT BuNllCogHmX2U6fdjC0eS4ZwpRrWMDZGTSv3AcV1YeSBvcJZEzvwRg0rsVRq++8H H+dKGYykRgaP99ueFvyw/AVTsFtNwFJ9Ebb+idXhqYp6jq1gtWPf0M/Q0SNBvSNJ +YvGGsELT4xve4Z3Kp7lrZBnDXOdzk3ySbzRQ/IZ58DCC+6Dmuqfsg8J/AmkV1eh BbFWL97KfDJokpi4I8XlwevkBrJIT02JvdLhMtMeSDGK4mVGmzftJPWQHotfcsNT 1VcPmnDJXUkmDnVaY+MKRvJalDs922JXqtKMT1n4wR7eoX0A8kOMoQVj/wnqeuDo MJJDyn+z9tkdpMrH6S2+p2+QwjvLRap1DGXKHW60v+LtTVuQ6d1FNxD6DOqeMEy2 +eGV8GYpGBFvpk3iO0aIKKtp55VTAuFRXWT7O5ZM3pxKTgVfgCobjSP4/bQj1/Sr MV6Gq6XhiZhLUdLUGSM51AYcbWTNyUbtGnuEK5R8TqJdTT+1HRkCn8lhTzfPlJcd oiTdC1HpIKPr9Cdz/o7P/6q1XDR9g3rBSo9dk3JC8sHbSMWp1wGgBvzZjOUf+ZFd TJ+SWWQhNnTgi7RVtYzUP1NQVPLHtGgSPClZTQcKhAQLZllC0x1tjfPAgy1k3GU1 VsaCi0GYG6NqB82okdqi =coGh -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/pull-input-20150703-1' into staging virtio-input: add input routing support, update multiseat docs. # gpg: Signature made Fri Jul 3 11:22:33 2015 BST using RSA key ID D3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" * remotes/kraxel/tags/pull-input-20150703-1: update pci-bridge-seat section in docs/multiseat.txt virtio-input: add input routing support Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
35360642d0
3 changed files with 33 additions and 6 deletions
|
@ -2,8 +2,8 @@
|
||||||
multiseat howto (with some multihead coverage)
|
multiseat howto (with some multihead coverage)
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
host side
|
host devices
|
||||||
---------
|
------------
|
||||||
|
|
||||||
First you must compile qemu with a user interface supporting
|
First you must compile qemu with a user interface supporting
|
||||||
multihead/multiseat and input event routing. Right now this
|
multihead/multiseat and input event routing. Right now this
|
||||||
|
@ -41,6 +41,19 @@ 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
|
the window which belongs to the video.2 display adapter will be routed
|
||||||
to these input devices.
|
to these input devices.
|
||||||
|
|
||||||
|
Starting with qemu 2.4 and linux kernel 4.1 you can also use virtio
|
||||||
|
for the input devices, using this ...
|
||||||
|
|
||||||
|
-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 virtio-keyboard-pci,bus=head.2,addr=03.0,display=video.2 \
|
||||||
|
-device virtio-tablet-pci,bus=head.2,addr=03.0,display=video.2
|
||||||
|
|
||||||
|
... instead of xhci and usb hid devices.
|
||||||
|
|
||||||
|
host ui
|
||||||
|
-------
|
||||||
|
|
||||||
The sdl2 ui will start up with two windows, one for each display
|
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
|
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,
|
in a separate tab. You can either simply switch tabs to switch heads,
|
||||||
|
@ -110,7 +123,7 @@ Background info is here:
|
||||||
guest side with pci-bridge-seat
|
guest side with pci-bridge-seat
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
Qemu version FIXME and newer has a new pci-bridge-seat device which
|
Qemu version 2.4 and newer has a new pci-bridge-seat device which
|
||||||
can be used instead of pci-bridge. Just swap the device name in the
|
can be used instead of pci-bridge. Just swap the device name in the
|
||||||
qemu command line above. The only difference between the two devices
|
qemu command line above. The only difference between the two devices
|
||||||
is the pci id. We can match the pci id instead of the device path
|
is the pci id. We can match the pci id instead of the device path
|
||||||
|
@ -121,9 +134,10 @@ configuration:
|
||||||
SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", \
|
SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", \
|
||||||
TAG+="seat", ENV{ID_AUTOSEAT}="1"
|
TAG+="seat", ENV{ID_AUTOSEAT}="1"
|
||||||
|
|
||||||
Patch with this rule will be submitted to upstream udev/systemd, so
|
Patch with this rule has been submitted to upstream udev/systemd, was
|
||||||
long-term, when systemd with this lands in distros, things will work
|
accepted and and should be included in the next systemd release (222).
|
||||||
just fine without any manual guest configuration.
|
So, if your guest has this or a newer version, multiseat will work just
|
||||||
|
fine without any manual guest configuration.
|
||||||
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|
||||||
|
|
|
@ -252,7 +252,11 @@ static void virtio_input_handle_sync(DeviceState *dev)
|
||||||
static void virtio_input_hid_realize(DeviceState *dev, Error **errp)
|
static void virtio_input_hid_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOInputHID *vhid = VIRTIO_INPUT_HID(dev);
|
VirtIOInputHID *vhid = VIRTIO_INPUT_HID(dev);
|
||||||
|
|
||||||
vhid->hs = qemu_input_handler_register(dev, vhid->handler);
|
vhid->hs = qemu_input_handler_register(dev, vhid->handler);
|
||||||
|
if (vhid->display && vhid->hs) {
|
||||||
|
qemu_input_handler_bind(vhid->hs, vhid->display, vhid->head, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_input_hid_unrealize(DeviceState *dev, Error **errp)
|
static void virtio_input_hid_unrealize(DeviceState *dev, Error **errp)
|
||||||
|
@ -301,10 +305,17 @@ static void virtio_input_hid_handle_status(VirtIOInput *vinput,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Property virtio_input_hid_properties[] = {
|
||||||
|
DEFINE_PROP_STRING("display", VirtIOInputHID, display),
|
||||||
|
DEFINE_PROP_UINT32("head", VirtIOInputHID, head, 0),
|
||||||
|
};
|
||||||
|
|
||||||
static void virtio_input_hid_class_init(ObjectClass *klass, void *data)
|
static void virtio_input_hid_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
VirtIOInputClass *vic = VIRTIO_INPUT_CLASS(klass);
|
VirtIOInputClass *vic = VIRTIO_INPUT_CLASS(klass);
|
||||||
|
|
||||||
|
dc->props = virtio_input_hid_properties;
|
||||||
vic->realize = virtio_input_hid_realize;
|
vic->realize = virtio_input_hid_realize;
|
||||||
vic->unrealize = virtio_input_hid_unrealize;
|
vic->unrealize = virtio_input_hid_unrealize;
|
||||||
vic->change_active = virtio_input_hid_change_active;
|
vic->change_active = virtio_input_hid_change_active;
|
||||||
|
|
|
@ -95,6 +95,8 @@ struct VirtIOInputClass {
|
||||||
|
|
||||||
struct VirtIOInputHID {
|
struct VirtIOInputHID {
|
||||||
VirtIOInput parent_obj;
|
VirtIOInput parent_obj;
|
||||||
|
char *display;
|
||||||
|
uint32_t head;
|
||||||
QemuInputHandler *handler;
|
QemuInputHandler *handler;
|
||||||
QemuInputHandlerState *hs;
|
QemuInputHandlerState *hs;
|
||||||
int ledstate;
|
int ledstate;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue