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


11

我有一个错误,其中的权限/dev/input/event*错误,因此当我使用Mumble时,应用程序无法检测到按键。如果我运行以下命令,它将“解决”该问题,但我希望永久修复。

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

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


5
请注意,如果您授予“全部”阅读权限,/dev/input/event/*则实际上是在授予所有人访问键盘的权限,例如您键入的密码。在单用户系统上,这无关紧要,但是即使在单用户系统上,我们也通常将系统用户用作额外的安全层,以防某些组件受到损害,例如,通过允许nobody用户访问键盘输入流正在削弱此保护。尽管这可能“解决”了Mumble,但它不是解决问题的适当常规方法。应该有更好的方法。
罗比·巴萨克

2
@popey您能否详细说明为什么对in /dev/input的节点的权限错误,以及当前的所有权和权限是什么(也许带有的输出ls -l)?是,问题input组没有读取权限(或它不是群主)?在我的系统上,事件文件具有root:input所有权,并且用户和组所有者都可以读取它们。如果您没有此功能,则应该尝试以这种方式进行设置,而不是让所有人都阅读它们。如果您确实有这个想法,那么Mumble就可以发挥input团队的力量。
伊莱亚·卡根

@EliahKagan您如何看待我的答案?可以请您复习一下吗?
Sergiy Kolodyazhnyy 2015年

是的,这很糟糕。使用ACL。请在下面查看我的答案
solsTiCe 2015年

您可以让我知道发行版本还是xorg-server版本吗?因为xorg-server 2:1.9.99.902-2ubuntu1已经解决了该问题。
Tohid Tamboli 2015年

Answers:


4

管理文件权限的一种更灵活的方法是使用ACL

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个root输入13,64 Apr 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的更多信息的另一个链接


喃喃自语地以root身份运行?
2015年

1

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

并将KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"每个事件的行添加到该文件中,其中x是数字。例如,我有事件0到9,所以我个人会为每个事件做一次。关于该线程的最后一个答案建议您也可以添加KERNEL==event*(即使用通配符)。


0

我的建议是您安装应用程序input-utils

sudo -i
apt-get update
apt-get install input-utils

这是一组实用程序,在使用Linux内核(2.6版及更高版本)的输入层时很有用。其中包括实用程序,用于列出内核已知的输入设备,显示设备接收的输入事件以及查询或修改键盘映射。

感兴趣的命令是:

sudo -i 
lsinput

它转储所有输入设备以及有关该设备的相关详细信息。

通过指定第N个设备号,可以使用该命令观察输入事件:

sudo -i
input-events <device number>

然后,可以通过指定第N个设备号,使用命令转储特定事件设备的键盘映射:

sudo -i
input-kyb <device number>

使用这些工具,可以调试系统,以查看输入是否生成预期的事件代码,从而帮助解决诸如键为什么不起作用或映射不正确的问题。

Udev是Linux内核的设备管理器。它在/ dev中管理设备节点,并在添加或删除设备时处理所有用户空间操作。

Evdev是Linux内核中的通用输入事件接口,它概括了设备驱动程序中的原始输入事件,并使它们可通过/dev/input/目录中的字符设备使用。

每次设备结构发生更改时,内核都会发出一个uevent,该uevent将被udev接收。然后,udev遵循/etc/udev/rules.d、/run/udev/rules.d和/lib/udev/rules.d目录中声明的规则。

根据uevent中包含的信息,它找到需要触发的一个或多个规则并执行所需的操作。

这些操作可以是创建或删除设备文件,但也可以触发将特定固件文件加载到内核内存中。


0

在终端运行中:

须藤nano -b /etc/rc.local

向下转到“ exit 0”行,并在其上方的一行中键入:

须藤chmod a + r / dev / input / event

按Ctrl + x退出。它将询问您是否要保存。打Y。它将询问您另存为。只需按Enter。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.