Ubuntu 14.04 的 C 中的 UINPUT 设备程序不起作用。为什么?
UINPUT device program in C for Ubuntu 14.04 does not work. Why?
我正在使用 Ubuntu 14.04,我正在用 c 设置虚拟键盘,这需要 uinput 才能工作。
我遇到了 root 权限问题:
ls -l /dev/uinput
crw-rw-rw- 1 root root 10, 223 Feb 25 11:11 /dev/uinput
但我通过为此创建一个新规则解决了它。它现在打印:
ls -l /dev/uinput
crw-rw---- 1 root uinput 10, 223 Feb 26 21:11 /dev/uinput
但这仍然没有解决我的问题,我的程序仍然无法运行,即使使用 sudo。
这是我的代码:
int main()
{
int uinp_fd;
int i;
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);
ioctl(uinp_fd, UI_DEV_CREATE, NULL);
if (ioctl(uinp_fd, UI_DEV_CREATE, NULL) < 0)
{
printf("Unable to create UINPUT device.\n");
return -1;
}
我的源代码从那里继续。
但是,程序总是打印 "Unable to create UINPUT device."。
sudo 命令到 运行 我的程序也不起作用,并且打印了相同的错误消息。
我应该怎么做才能使程序正常工作?谢谢
ioctl(uinp_fd, UI_DEV_CREATE, NULL);
if (ioctl(uinp_fd, UI_DEV_CREATE, NULL) < 0)
{
printf("Unable to create UINPUT device.\n");
return -1;
}
您已调用 UI_DEV_CREATE ioctl 两次。第一次调用会成功,第二次会失败。所以只删除第一个调用。
我正在使用 Ubuntu 14.04,我正在用 c 设置虚拟键盘,这需要 uinput 才能工作。
我遇到了 root 权限问题:
ls -l /dev/uinput
crw-rw-rw- 1 root root 10, 223 Feb 25 11:11 /dev/uinput
但我通过为此创建一个新规则解决了它。它现在打印:
ls -l /dev/uinput
crw-rw---- 1 root uinput 10, 223 Feb 26 21:11 /dev/uinput
但这仍然没有解决我的问题,我的程序仍然无法运行,即使使用 sudo。
这是我的代码:
int main()
{
int uinp_fd;
int i;
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);
ioctl(uinp_fd, UI_DEV_CREATE, NULL);
if (ioctl(uinp_fd, UI_DEV_CREATE, NULL) < 0)
{
printf("Unable to create UINPUT device.\n");
return -1;
}
我的源代码从那里继续。
但是,程序总是打印 "Unable to create UINPUT device."。
sudo 命令到 运行 我的程序也不起作用,并且打印了相同的错误消息。 我应该怎么做才能使程序正常工作?谢谢
ioctl(uinp_fd, UI_DEV_CREATE, NULL);
if (ioctl(uinp_fd, UI_DEV_CREATE, NULL) < 0)
{
printf("Unable to create UINPUT device.\n");
return -1;
}
您已调用 UI_DEV_CREATE ioctl 两次。第一次调用会成功,第二次会失败。所以只删除第一个调用。