我正在尝试确保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?如果是,为什么这段代码不能正常工作?
感谢。
答案 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设置可执行文件。