确保uinput(内核模块)确实正在运行/加载以及一些测试代码

时间:2012-08-10 10:12:37

标签: c

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

我找不到带lsmod的设备但是我可以找到文件/ dev / uinput,这是什么意思?

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

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

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

所以我的问题是这样的:

是否输入了uinput?如果是,为什么这段代码不能正常工作?

感谢。

1 个答案:

答案 0 :(得分: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设置可执行文件。