using uinput connect X to proprietary (TCP based) keyboard endpoint

Arne.Adams at Arne.Adams at
Wed Oct 15 19:48:37 PDT 2014

I am trying to integrate a proprietary keyboard, sending linux scancodes via TCP.
My idea is to use uinput to forward the received keycodes to locally running applications (including the x server).
In my xorg.conf I have the following section:

Section "InputDevice"
    # to enable user defined virtual keyboard
    Identifier     "Keyboard1"
    Option         "Device" "/dev/input/event14"
    Driver         "evdev"
where event14 is the event queue associated to the uinput simulated "device".
I do see the scancodes sent from my device with both commands:
- xinput test-xi2 --root
-  showkey -s
However I am not able to intercept the keyboard events in this simple X application

int main(int argc, char** argv)
  Display* display = XOpenDisplay(NULL);
  Window window = XCreateSimpleWindow(display, RootWindow(display, 0), 1, 1, 500, 500,
                                      0, BlackPixel(display, 0), BlackPixel(display, 0));
  XSelectInput(display, window, KeyPressMask | KeyReleaseMask);
  XMapWindow(display, window);
  XEvent report;
  while (1)
    XNextEvent(display, &report);
    switch (report.type)
    case KeyRelease:
      printf("got a KeyRelease event: %d, %d\n", report.xkey.keycode, report.xkey.state);
    case KeyPress:
      printf("got a KeyPress event: %d, %d\n", report.xkey.keycode, report.xkey.state);
      printf("got a %d event\n", report.type);

  return (EXIT_SUCCESS);

More information about the xorg mailing list