<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>