1

我正在尝试确保 uinput 正在运行/加载并且可以正常工作。

我无法使用 lsmod 找到设备,但是我可以找到文件 /dev/uinput,这是什么意思?

我通过一些谷歌搜索找到了一些代码,这些代码显然测试了 uinput,它失败并显示“无法创建 UINPUT 设备”。打印到终端。相关代码如下:

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

完整代码可以在这里阅读:http: //pastebin.com/tJdUgiDz

所以我的问题是这样的:

uinput 加载了吗?如果是,为什么这段代码不能正常工作?

谢谢。

4

1 回答 1

2

听起来 uinput 已编译到您的内核中,而不是您使用 lsmod 看到的可加载模块。这绝对是 Ubuntu 12.04 的情况。

由于权限问题,您的打开可能会失败。

$ ls -l /dev/uinput
crw-r----- 1 root root 10, 223 Sep 22 11:45 /dev/uinput

您可以在每次运行程序时以 root 身份运行程序

$ sudo ./mytest-program

或创建 udev 规则以永久允许任何程序使用 uinput。复制下面的粘贴命令以在 ubuntu 12.04 系统上创建正确的规则并重新启动 udev 服务以使用它

$ sudo bash -c 'echo -e "# allow programs without root permissions to use uinput\n KERNEL==\"uinput\", MODE=\"0666\"" >> /etc/udev/rules.d/50-uinput.rules'
$ sudo restart udev

如果您更关心安全性,您可以为组设置规则并设置您的可执行文件的setuid/setgid 。

于 2012-09-28T18:04:23.337 回答