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

Aaron Plattner aplattner at nvidia.com
Thu Oct 23 08:24:27 PDT 2014


On 10/16/2014 08:12 AM, Peter Hutterer wrote:
> On Thu, Oct 16, 2014 at 04:48:37AM +0200, Arne.Adams at t-online.de wrote:
>> Hi,
>> 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"
>> EndSection
>> 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);
>
>
> add a XFlush() here, that should do the trick.

XNextEvent implicitly flushes.

> Cheers,
>     Peter
>
>>    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);
>>        break;
>>      case KeyPress:
>>        printf("got a KeyPress event: %d, %d\n", report.xkey.keycode, report.xkey.state);
>>        break;
>>      default:
>>        printf("got a %d event\n", report.type);
>>        break;
>>
>>      }
>>    }
>>    XFlush(display);
>>    sleep(5);
>>    return (EXIT_SUCCESS);
>> }

-- 
Aaron


More information about the xorg mailing list