写入/ dev / uinput(在Ubuntu 12.04上)

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)

希望有帮助!