Linux 正在写入/dev/uinput(在ubuntu 12.04上)
我正在开发一个小程序,用python前端在linux上创建虚拟操纵杆。这是一把叉子 我需要写入dev/uinput以创建用户定义的操纵杆。 文件是用O_RDWR打开的(我在调试时临时为文件添加了读/写访问权限)。当我这样做的时候Linux 正在写入/dev/uinput(在ubuntu 12.04上),linux,input,ubuntu-12.04,Linux,Input,Ubuntu 12.04,我正在开发一个小程序,用python前端在linux上创建虚拟操纵杆。这是一把叉子 我需要写入dev/uinput以创建用户定义的操纵杆。 文件是用O_RDWR打开的(我在调试时临时为文件添加了读/写访问权限)。当我这样做的时候 write(uifd, &uidev, sizeof(uinput_user_dev)); 它返回-1并将errno设置为22(EINVAL)。参数正确,文件已成功打开 还有其他人遇到过这个问题吗?我把这个项目搁置了大约一个月,但我记得它在Ubuntu的最后一
write(uifd, &uidev, sizeof(uinput_user_dev));
它返回-1并将errno设置为22(EINVAL)。参数正确,文件已成功打开
还有其他人遇到过这个问题吗?我把这个项目搁置了大约一个月,但我记得它在Ubuntu的最后一个版本中起了作用
更新:uinput在ubuntu 12.10上运行我想你的问题是对
uinput
的访问权限。您收到的错误消息是典型的,我以前在其他设备上看到过相同的行为
为了测试该假设,请更改/dev/uinput
权限以允许访问所有:
chmod +0666 /dev/uinput
然后重试您的代码。如果现在它工作正常,您需要将该更改永久化,否则它将在重新启动后恢复到原始权限
要以安全的方式执行此操作,请在以下位置添加一个规则文件:/etc/dev/rules.d
使用以下行:
KERNEL=="uinput", GROUP="udev_group"
要查看规则文件的外观,请检查位于以下位置的udev规则文件:
/lib/udev/rules.d/50-udev-default.rules
准备好后,添加一个名为udev_group的组,并将您的用户名添加到该组(或任何应该具有uinput
写入权限的用户)
您可能需要重新启动以使新规则生效
结果是,该组中的任何用户都可以完全访问uinput
,这正是您想要的
要添加组,您可以安装“用户和组”: 并于以下地点推出:
Application -> System Tools -> Administration -> Users and Groups**
或在终端:
gnome-system-tools
由于UPoT模块丢失,您应该考虑在继续之前建立它。
我从未以这种方式重新构建过Linux内核模块,因此您可以按照下面的解释进行操作 首先,您需要获得相应的Linux源代码和头文件。同时安装模块初始化工具然后,将dir更改为/usr/src/linux并以root用户身份执行
cp /boot/config-* ./.config
make drivers/input/misc/uinput.ko
构建uinput.ko需要几分钟的时间
在将uinput.ko移动到/lib/modules//kernel/drivers/input/misc之前检查它是否工作
insmod ./drivers/input/misc/uinput.ko
编辑1: 似乎从Linux2.6.35-17.23开始。这就是为什么 我刚刚看过你的代码,我认为问题出在这一行
if (write(uifd, &uidev, sizeof(uinput_user_dev) != sizeof(uinput_user_dev)))
应该是
if (write(uifd, &uidev, sizeof(uinput_user_dev)) != sizeof(uinput_user_dev))
希望这有帮助我在Ubuntu 14.04中也遇到了这个错误,来自您的repo()。我通过将device.h中的device构造函数中的device::uidev成员归零来修复它
memset(&uidev,0,sizeof(uidev)) 您好,是否加载了uinput模块?/dev/uinput存在于我的系统(Lubuntu 11.10)中,但我无法加载uinput模块uHh。。我该怎么做?模块,如在共享库中一样?在终端中键入lsmod以查看所有加载的模块(可加载的内核模块)modprobe uinput&&lsmod | grep uinput不提供任何信息感谢您的回复。问题是,我以超级用户的身份尝试了该程序,然后将o+rw添加到/dev/uinput,以普通用户的身份运行它,并在eclipse中连接到gdb。不管怎样,它都在同一点失败了。我认为这不是权限问题。我们是否可以将chmod命令也添加到rule.d文件中?。这是因为最终用户可能不知道为/dev/uinputAutomatic access为登录用户设置所需的访问权限:添加文件
/etc/udev/rules.d/50 uinput.rules
,内容为:KERNEL==“uinput”,TAG+=“uaccess”
,这真是让人扫兴。我希望能创造出一个非常有用的玩具,可以开箱即用。(应该是编辑)你确定uinput不存在吗?lsmod不显示uinput,但modprobe uinput不返回任何内容,因此它存在,但处于非活动状态。我将尝试添加/etc/modules,看看重启后会发生什么。谢谢你的回复好的。。。不是现在。看起来uinput实际上已加载:/I我将编辑我的答案
if (write(uifd, &uidev, sizeof(uinput_user_dev)) != sizeof(uinput_user_dev))