All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roberto Alejandro Espi Munoz <raespi@icid.cu>
To: Benjamin Tissoires <benjamin.tissoires@gmail.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: linux-input <linux-input@vger.kernel.org>
Subject: Re: uinput on headless system ...
Date: Thu, 14 Jan 2016 09:05:53 -0500	[thread overview]
Message-ID: <5697AB41.3070001@icid.cu> (raw)
In-Reply-To: <CAN+gG=FirVq_MrXDkFe8K=7TEVzif9MSHvov4SyZE1M_Z5N=8g@mail.gmail.com>

Yes the uinput driver is compiled as a module and loaded before running 
the test app that I have (double checked with modprobe and lsmod).  The 
same code has been compiled for my laptop and everything loads and works 
fine when sending events to the input subsystem.   I mentioned the 
physical keyboard issue because that's what made it work: SCENARIO1 the 
headless motherboard starts without a keyboard and both the module and 
the app loads but no events get injected and the problem occurs when 
writing to the /dev/uinput device, SCENARIO2 I connect a physical 
keyboard and all goes well. I looked at the libevdev before and sinced 
my code ended up working on my laptop I discarded the library.  I saw 
the libevdev-uinput.c you recommended, I think I'm following the same 
rationale.

Thanks for the replies ...

This is the code I'm using that fails at the end when writing to the 
/dev/uinput device:

     int uinputDev;
     struct uinput_user_dev device;
     memset(&device, 0, sizeof device);

     uinputDev = open("/dev/uinput",O_WRONLY | O_NONBLOCK);
         strcpy(device.name,"test remote");

         device.id.bustype=BUS_USB;
         device.id.vendor=1;
         device.id.product=1;
         device.id.version=1;


         if (write(uinputDev,&device,sizeof(device)) != sizeof(device))
         {
             fprintf(stderr, "error setup\n");
         }
         if (ioctl(uinputDev,UI_SET_EVBIT,EV_KEY) < 0)
             fprintf(stderr, "error evbit key\n");

         if (ioctl(uinputDev,UI_SET_KEYBIT, KEY_LEFT) < 0)
             fprintf(stderr, "error evbit key\n");

         if (ioctl(uinputDev,UI_SET_KEYBIT, KEY_UP) < 0)
             fprintf(stderr, "error evbit key\n");

         if (ioctl(uinputDev,UI_SET_KEYBIT, KEY_DOWN) < 0)
             fprintf(stderr, "error evbit key\n");

         if (ioctl(uinputDev,UI_SET_KEYBIT, KEY_RIGHT) < 0)
             fprintf(stderr, "error evbit key\n");

         if (ioctl(uinputDev,UI_SET_KEYBIT, KEY_ENTER) < 0)
             fprintf(stderr, "error evbit key\n");

         if (ioctl(uinputDev,UI_DEV_CREATE) < 0)
         {
             fprintf(stderr, "error create\n");
         }

      struct input_event event;

     memset(&event, 0, sizeof(event));
     event.type = EV_KEY;
     event.code = KEY_UP;
     event.value = 1;
     gettimeofday(&event.time,NULL);

     if (write( uinputDev, &event, sizeof(struct input_event)) != 
sizeof( struct input_event) ) {
         fprintf(stderr, "Error on send_event");
         return -1;
     }

     memset(&event, 0, sizeof(event));
     event.type = EV_KEY;
     event.code = KEY_UP;
     event.value = 0;
     gettimeofday(&event.time,NULL);

     if (write( uinputDev, &event, sizeof(struct input_event)) != 
sizeof( struct input_event) ) {
         fprintf(stderr, "Error on send_event");
         return -1;
     }

On 01/14/2016 12:08 AM, Benjamin Tissoires wrote:
> Hi Roberto,
>
> On Wed, Jan 13, 2016 at 11:21 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
>> Hi Roberto,
>>
>> On Wed, Jan 13, 2016 at 09:19:39AM -0500, Roberto Alejandro Espi Munoz wrote:
>>> Hello ... I've been searching around the web for a specific mailing
>>> list for the uinput driver but couldn't find any.  I managed to
>>> create an example app that injects keyboard events to the running
>>> linux kernel succesfully when I have a keyboard attached to the
>>> computer.  However if I run it on a keyboardless machine, like a
>>> standalone motherboard, the uinput device fails to open.
>> uinput driver does not depend on presence of a physical keyboard. I'd
>> start looking whether uinput module is enabled on your headless box and
>> if it is a module verify that it is loaded.
>>
> As Dmitry said, uinput is independent of any attached hardware.
> You might want to see how we managed to create new devices through
> uinput by looking at libevdev[1] (see libevdev/libevdev-uinput.c).
>
> You might actually also want to use libevdev instead of manually doing
> the ioctls and processing of all the small things :)
>
> Cheers,
> Benjamin
>
> [1] http://www.freedesktop.org/wiki/Software/libevdev/
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



  reply	other threads:[~2016-01-14 14:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-13 14:19 uinput on headless system Roberto Alejandro Espi Munoz
2016-01-13 22:21 ` Dmitry Torokhov
2016-01-14  5:08   ` Benjamin Tissoires
2016-01-14 14:05     ` Roberto Alejandro Espi Munoz [this message]
2016-01-14 14:27       ` Benjamin Tissoires
2016-01-14 15:16         ` Roberto Alejandro Espi Munoz
2016-01-19 14:55           ` Roberto Alejandro Espi Munoz
2016-01-19 21:36             ` Dmitry Torokhov
2016-01-19 21:58               ` Roberto Alejandro Espi Munoz
2016-01-19 22:56                 ` Dmitry Torokhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5697AB41.3070001@icid.cu \
    --to=raespi@icid.cu \
    --cc=benjamin.tissoires@gmail.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linux-input@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.