什么决定了 /dev 中的权限?

什么决定了 /dev 中的权限?

我有一个错误,权限/dev/input/event*是错误的,所以当我使用咕哝,应用程序无法检测按键。如果我运行以下命令,它会“修复”该问题,但我希望得到永久修复。

sudo chmod a+r /dev/input/event/*

什么决定了权限/dev/input/event*以及如何永久设置它们?

答案1

更多灵活的管理文件权限的方法是使用访问控制列表

sudo setfacl -m u:popey:rw /dev/input/eventx

如果你真的需要让它永久生效,那么你可以使用 udev 规则为你的事件输入设备设置它

添加文件/etc/udev/rules.d/99-userdev-input.rules和:

KERNEL=="event*", SUBSYSTEM=="input", RUN+="/usr/bin/setfacl -m u:popey:rw $env{DEVNAME}"

你可以使用以下命令检查 ACL 权限

getfacl /dev/input/event*

答案2

我不知道最初设置字符设备 /dev/input/event* 的权限是什么

但是,我知道您可以使用系统上默认作为 coreutils 一部分的软件来更改这些权限。请参阅命令man mknod

我的活动设备的权限是:

crw-rw---- 1 根输入 13, 64 4 月 14 日 06:39 /dev/input/event0

以下是一些使用示例:

~$ sudo mknod lolwat c 4 64 
~$ sudo mknod lolwatnow c 4 64  -m 777
~$ ls -l lolwat*
crw-r--r-- 1 root root 4, 64 Apr 14 08:07 lolwat
crwxrwxrwx 1 root root 4, 64 Apr 14 08:08 lolwatnow

如果你需要更多有关决定主编号和次编号的信息,请查看这里

现在,您说权限是错误的。所以一定是某些东西设置错了,而那个东西一定是以 root 身份运行的。mknod 可用于创建设备,但 mkdev 也可以。您可能需要查看 mkdev 和 mknod 的默认操作的权限。

正如我的例子所示:/dev/input/event0 具有 crw-rw 权限,但 lolwat 的默认权限设置为 crw-r--r--

我有些不确定,设备类型是否决定了原始权限。您可以尝试一下以找出答案。

这是另一个链接,可获取更多信息关于mknod

答案3

基本上,您需要添加一个文件/etc/udev/rules.d/(您可以将其命名为75-input-events.conf

然后将每个事件的行添加KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"到该文件中,其中 x 是数字。例如,我有事件 0 到 9,所以我个人会为每个事件都这样做。上一个答案此主题建议您也可以添加KERNEL==event*(即使用通配符)。

答案4

在终端运行:

sudo nano -b /etc/rc.local

转到“exit 0”行并在其上一行输入:

sudo chmod a + r / dev /输入/事件

按 Ctrl+x 退出。它会询问您是否要保存。按 y。它会询问您要保存为什么。只需按 Enter 即可。

现在,该命令应该在每次启动时启动,从而为您提供该文件夹的权限。 /etc/rc.local 文件自动具有 root 权限,因此您无需输入密码即可执行此操作。

相关内容