Hi, I tried these patches with qemu 2.5.0 on Gentoo and libvirt. I get the following error: Error starting domain: internal error: early end of file from monitor: possible problem: 2015-12-22T21:51:20.659520Z qemu-system-x86_64: -input-linux /dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.0-event-kbd,grab-all=on: Could not open '/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.0-event-kbd'
I also tried setting /dev/input/event9 to permissions of 666 to see if it was a permission error, but the same thing happened. Any help would be appreciated. The way I pass it is with this: <qemu:commandline> <qemu:arg value='-input-linux'/> <qemu:arg value='/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.0-event-kbd,grab-all=on'/> <qemu:arg value='-input-linux'/> <qemu:arg value='/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.1-event-mouse'/> <qemu:arg value='-input-linux'/> <qemu:arg value='/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.2-event-joystick'/> </qemu:commandline> Is there a way around this error? Thanks, Jon On 14 December 2015 at 14:18, Gerd Hoffmann <kra...@redhat.com> wrote: > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > include/ui/input.h | 3 ++ > ui/input-keymap.c | 145 > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 148 insertions(+) > > diff --git a/include/ui/input.h b/include/ui/input.h > index d06a12d..d7afd80 100644 > --- a/include/ui/input.h > +++ b/include/ui/input.h > @@ -48,6 +48,9 @@ int qemu_input_key_value_to_qcode(const KeyValue *value); > int qemu_input_key_value_to_scancode(const KeyValue *value, bool down, > int *codes); > > +int qemu_input_qcode_to_linux(unsigned int qcode); > +int qemu_input_linux_to_qcode(unsigned int lnx); > + > InputEvent *qemu_input_event_new_btn(InputButton btn, bool down); > void qemu_input_queue_btn(QemuConsole *src, InputButton btn, bool down); > void qemu_input_update_buttons(QemuConsole *src, uint32_t *button_map, > diff --git a/ui/input-keymap.c b/ui/input-keymap.c > index d36be4b..31f4daa 100644 > --- a/ui/input-keymap.c > +++ b/ui/input-keymap.c > @@ -2,6 +2,126 @@ > #include "ui/keymaps.h" > #include "ui/input.h" > > +#include "standard-headers/linux/input.h" > + > +/* FIXME: duplicate, see hw/input/virtio-input-hid.c */ > +static const unsigned int qcode_to_linux[Q_KEY_CODE_MAX] = { > + [Q_KEY_CODE_ESC] = KEY_ESC, > + [Q_KEY_CODE_1] = KEY_1, > + [Q_KEY_CODE_2] = KEY_2, > + [Q_KEY_CODE_3] = KEY_3, > + [Q_KEY_CODE_4] = KEY_4, > + [Q_KEY_CODE_5] = KEY_5, > + [Q_KEY_CODE_6] = KEY_6, > + [Q_KEY_CODE_7] = KEY_7, > + [Q_KEY_CODE_8] = KEY_8, > + [Q_KEY_CODE_9] = KEY_9, > + [Q_KEY_CODE_0] = KEY_0, > + [Q_KEY_CODE_MINUS] = KEY_MINUS, > + [Q_KEY_CODE_EQUAL] = KEY_EQUAL, > + [Q_KEY_CODE_BACKSPACE] = KEY_BACKSPACE, > + > + [Q_KEY_CODE_TAB] = KEY_TAB, > + [Q_KEY_CODE_Q] = KEY_Q, > + [Q_KEY_CODE_W] = KEY_W, > + [Q_KEY_CODE_E] = KEY_E, > + [Q_KEY_CODE_R] = KEY_R, > + [Q_KEY_CODE_T] = KEY_T, > + [Q_KEY_CODE_Y] = KEY_Y, > + [Q_KEY_CODE_U] = KEY_U, > + [Q_KEY_CODE_I] = KEY_I, > + [Q_KEY_CODE_O] = KEY_O, > + [Q_KEY_CODE_P] = KEY_P, > + [Q_KEY_CODE_BRACKET_LEFT] = KEY_LEFTBRACE, > + [Q_KEY_CODE_BRACKET_RIGHT] = KEY_RIGHTBRACE, > + [Q_KEY_CODE_RET] = KEY_ENTER, > + > + [Q_KEY_CODE_CTRL] = KEY_LEFTCTRL, > + [Q_KEY_CODE_A] = KEY_A, > + [Q_KEY_CODE_S] = KEY_S, > + [Q_KEY_CODE_D] = KEY_D, > + [Q_KEY_CODE_F] = KEY_F, > + [Q_KEY_CODE_G] = KEY_G, > + [Q_KEY_CODE_H] = KEY_H, > + [Q_KEY_CODE_J] = KEY_J, > + [Q_KEY_CODE_K] = KEY_K, > + [Q_KEY_CODE_L] = KEY_L, > + [Q_KEY_CODE_SEMICOLON] = KEY_SEMICOLON, > + [Q_KEY_CODE_APOSTROPHE] = KEY_APOSTROPHE, > + [Q_KEY_CODE_GRAVE_ACCENT] = KEY_GRAVE, > + > + [Q_KEY_CODE_SHIFT] = KEY_LEFTSHIFT, > + [Q_KEY_CODE_BACKSLASH] = KEY_BACKSLASH, > + [Q_KEY_CODE_LESS] = KEY_102ND, > + [Q_KEY_CODE_Z] = KEY_Z, > + [Q_KEY_CODE_X] = KEY_X, > + [Q_KEY_CODE_C] = KEY_C, > + [Q_KEY_CODE_V] = KEY_V, > + [Q_KEY_CODE_B] = KEY_B, > + [Q_KEY_CODE_N] = KEY_N, > + [Q_KEY_CODE_M] = KEY_M, > + [Q_KEY_CODE_COMMA] = KEY_COMMA, > + [Q_KEY_CODE_DOT] = KEY_DOT, > + [Q_KEY_CODE_SLASH] = KEY_SLASH, > + [Q_KEY_CODE_SHIFT_R] = KEY_RIGHTSHIFT, > + > + [Q_KEY_CODE_ALT] = KEY_LEFTALT, > + [Q_KEY_CODE_SPC] = KEY_SPACE, > + [Q_KEY_CODE_CAPS_LOCK] = KEY_CAPSLOCK, > + > + [Q_KEY_CODE_F1] = KEY_F1, > + [Q_KEY_CODE_F2] = KEY_F2, > + [Q_KEY_CODE_F3] = KEY_F3, > + [Q_KEY_CODE_F4] = KEY_F4, > + [Q_KEY_CODE_F5] = KEY_F5, > + [Q_KEY_CODE_F6] = KEY_F6, > + [Q_KEY_CODE_F7] = KEY_F7, > + [Q_KEY_CODE_F8] = KEY_F8, > + [Q_KEY_CODE_F9] = KEY_F9, > + [Q_KEY_CODE_F10] = KEY_F10, > + [Q_KEY_CODE_NUM_LOCK] = KEY_NUMLOCK, > + [Q_KEY_CODE_SCROLL_LOCK] = KEY_SCROLLLOCK, > + > + [Q_KEY_CODE_KP_0] = KEY_KP0, > + [Q_KEY_CODE_KP_1] = KEY_KP1, > + [Q_KEY_CODE_KP_2] = KEY_KP2, > + [Q_KEY_CODE_KP_3] = KEY_KP3, > + [Q_KEY_CODE_KP_4] = KEY_KP4, > + [Q_KEY_CODE_KP_5] = KEY_KP5, > + [Q_KEY_CODE_KP_6] = KEY_KP6, > + [Q_KEY_CODE_KP_7] = KEY_KP7, > + [Q_KEY_CODE_KP_8] = KEY_KP8, > + [Q_KEY_CODE_KP_9] = KEY_KP9, > + [Q_KEY_CODE_KP_SUBTRACT] = KEY_KPMINUS, > + [Q_KEY_CODE_KP_ADD] = KEY_KPPLUS, > + [Q_KEY_CODE_KP_DECIMAL] = KEY_KPDOT, > + [Q_KEY_CODE_KP_ENTER] = KEY_KPENTER, > + [Q_KEY_CODE_KP_DIVIDE] = KEY_KPSLASH, > + [Q_KEY_CODE_KP_MULTIPLY] = KEY_KPASTERISK, > + > + [Q_KEY_CODE_F11] = KEY_F11, > + [Q_KEY_CODE_F12] = KEY_F12, > + > + [Q_KEY_CODE_CTRL_R] = KEY_RIGHTCTRL, > + [Q_KEY_CODE_SYSRQ] = KEY_SYSRQ, > + [Q_KEY_CODE_ALT_R] = KEY_RIGHTALT, > + > + [Q_KEY_CODE_HOME] = KEY_HOME, > + [Q_KEY_CODE_UP] = KEY_UP, > + [Q_KEY_CODE_PGUP] = KEY_PAGEUP, > + [Q_KEY_CODE_LEFT] = KEY_LEFT, > + [Q_KEY_CODE_RIGHT] = KEY_RIGHT, > + [Q_KEY_CODE_END] = KEY_END, > + [Q_KEY_CODE_DOWN] = KEY_DOWN, > + [Q_KEY_CODE_PGDN] = KEY_PAGEDOWN, > + [Q_KEY_CODE_INSERT] = KEY_INSERT, > + [Q_KEY_CODE_DELETE] = KEY_DELETE, > + > + [Q_KEY_CODE_META_L] = KEY_LEFTMETA, > + [Q_KEY_CODE_META_R] = KEY_RIGHTMETA, > + [Q_KEY_CODE_MENU] = KEY_MENU, > +}; > + > static const int qcode_to_number[] = { > [Q_KEY_CODE_SHIFT] = 0x2a, > [Q_KEY_CODE_SHIFT_R] = 0x36, > @@ -136,6 +256,7 @@ static const int qcode_to_number[] = { > }; > > static int number_to_qcode[0x100]; > +static int linux_to_qcode[KEY_CNT]; > > int qemu_input_key_value_to_number(const KeyValue *value) > { > @@ -200,3 +321,27 @@ int qemu_input_key_value_to_scancode(const KeyValue > *value, bool down, > > return count; > } > + > +int qemu_input_qcode_to_linux(unsigned int qcode) > +{ > + assert(qcode < Q_KEY_CODE_MAX); > + return qcode_to_linux[qcode]; > +} > + > +int qemu_input_linux_to_qcode(unsigned int lnx) > +{ > + static int first = true; > + > + if (first) { > + int qcode, number; > + first = false; > + for (qcode = 0; qcode < Q_KEY_CODE_MAX; qcode++) { > + number = qcode_to_linux[qcode]; > + assert(number < KEY_CNT); > + linux_to_qcode[number] = qcode; > + } > + } > + > + assert(lnx < KEY_CNT); > + return linux_to_qcode[lnx]; > +} > -- > 1.8.3.1 > > _______________________________________________ > vfio-users mailing list > vfio-us...@redhat.com > https://www.redhat.com/mailman/listinfo/vfio-users >