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