fer*_*rry 2 linux input ubuntu-12.04
我正在开发一个小程序,该程序可以在Linux上使用python前端创建虚拟操纵杆。它是Linux-Virtual-Joystick的分支。
我需要写dev / uinput来创建用户定义的操纵杆。该文件用O_RDWR打开(我在调试时临时添加了对该文件的读写访问权限)。当我做
write(uifd, &uidev, sizeof(uinput_user_dev));
Run Code Online (Sandbox Code Playgroud)
它返回-1并将errno设置为22(EINVAL)。参数正确,并且文件已成功打开。
还有其他人遇到这个问题吗?我将项目搁置了大约一个月,但我记得它在Ubuntu的最新版本中有效。
更新: uinput在ubuntu 12.10上工作
小智 5
我认为您的问题在于对的访问权限uinput。您收到的错误消息就是典型的错误消息,我在其他设备上也见过相同的行为。
为了测试该假设,请更改/dev/uinput权限以允许访问所有权限:
chmod +0666 /dev/uinput
Run Code Online (Sandbox Code Playgroud)
然后重试您的代码。如果现在一切正常,则您将需要永久保留该更改,因为否则它将在重新引导后恢复为原始权限。
要以安全的方式执行此操作,请添加一个位于以下位置的规则文件: /etc/dev/rules.d
与以下行:
KERNEL=="uinput", GROUP="udev_group"
Run Code Online (Sandbox Code Playgroud)
要查看规则文件的外观,请查看位于以下位置的udev规则文件:
/lib/udev/rules.d/50-udev-default.rules
Run Code Online (Sandbox Code Playgroud)
准备就绪后,添加一个名为udev_group的组,并向其中添加您的用户名(或任何应该具有写入权限的用户uinput)。
您可能需要重新启动才能使新规则生效。
结果将是该组成员中的任何用户都可以完全访问uinput,这正是您想要的。
要添加组,您可以安装“用户和组”:
sudo apt-get install gnome-system-tools
Run Code Online (Sandbox Code Playgroud)
并在以下位置启动它:
Application -> System Tools -> Administration -> Users and Groups**
Run Code Online (Sandbox Code Playgroud)
或在终端:
gnome-system-tools
Run Code Online (Sandbox Code Playgroud)
希望有帮助!