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