UINPUT device program in C for Ubuntu 14.04 does not work. Why? Part 2:

自古美人都是妖i 提交于 2019-12-11 10:27:46

问题


I am using Ubuntu 14.04, and I am setting up a virtual keyboard in c, which requires uinput to work.

My program is supposed to send the key 'a' to terminal, as it would when I would press the 'a' key on the keyboard.

Here's my source code:

int main()
{
int uinp_fd;
int i;

/********** Open uinput file section. **********************/

uinp_fd = open("/dev/uinput", O_WRONLY|O_NDELAY);

if(uinp_fd < 0)
{

    printf("Unable to open /dev/uinput\n");
    return -1;
}

else printf("Can open /dev/uinput\n");

/********* Setup input device structure section: ***********/

memset(&uinp,0,sizeof(uinp));

snprintf(uinp.name, UINPUT_MAX_NAME_SIZE, "The C Keyboard");
uinp.id.bustype = BUS_USB;  
uinp.id.version = 1;
uinp.id.vendor = 0x1234;
uinp.id.product = 0xfedc;

write(uinp_fd, &uinp, sizeof(uinp));


/****** Setup the uinput keyboard device section: **********/

ioctl(uinp_fd, UI_SET_EVBIT, EV_KEY);
ioctl(uinp_fd, UI_SET_EVBIT, EV_SYN);
ioctl(uinp_fd, UI_SET_EVBIT, EV_REP);

ioctl(uinp_fd, UI_SET_KEYBIT, KEY_A);

if (ioctl(uinp_fd, UI_DEV_CREATE, NULL) < 0)
{
    printf("Unable to create UINPUT device.\n");
    return -1;
}

/*********** Send keypress events to kernel: ***************/

memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);

event.type = EV_KEY;
event.code = KEY_A;
event.value = 1;
write(uinp_fd, &event, sizeof(event));



event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(uinp_fd, &event, sizeof(event));

/************** Release keypress event: *******************/

memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);

event.type = EV_KEY;
event.code = KEY_A;
event.value = 0;
write(uinp_fd, &event, sizeof(event));

event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(uinp_fd, &event, sizeof(event));

/*** Destroy keyboard device and close the Uinput device: **/

ioctl(uinp_fd, UI_DEV_DESTROY);
close(uinp_fd);

return 0;

}

My program however, doesn't do anything. It merely prints out:

Can open /dev/uinput

and thats it...

What am I doing wrong? Thank you for the help!

来源:https://stackoverflow.com/questions/35666314/uinput-device-program-in-c-for-ubuntu-14-04-does-not-work-why-part-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!