1

我正在使用 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;
}

我的源代码从那里继续。

但是,程序总是打印“无法创建 UINPUT 设备。”。

运行我的程序的 sudo 命令也不起作用,并且打印了相同的错误消息。我应该怎么做才能让程序正常工作?谢谢。

4

1 回答 1

0
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 两次。第一次调用会成功,第二次调用会失败。所以只需删除第一个电话。

于 2016-02-26T20:44:44.213 回答