Answers:
对于属于子系统tty的设备,可以如下设置其组:
SUBSYSTEM=="tty", GROUP="dialout"
请注意,就像在普通编程中一样,==
它是对相等性的测试,=
而是赋值。因此,以上语句转换为“如果SUBSYSTEM=="tty"
则赋值GROUP="dialout"
。”一条语句可能具有多个测试,这些测试与和在一起,并且具有多个赋值。
如果要更改读写执行权限,请分配MODE而不是GROUP,其中MODE遵循通常的Unix八进制表示法,例如,MODE="0660"
授予所有者和组读写权限。 man udev
有所有的细节。
您可以在以下位置找到许多此类规则的示例 /lib/udev/rules.d/91-permissions.rules
一旦确定了您想要的规则,添加它就很简单。在基于debian的系统上,转到目录/etc/udev/rules.d
并创建一个文件。文件按排序顺序运行。因此,要使您的规则文件成为最后一个要读取的,覆盖较早的规则文件,请尝试使用类似的名称99-instruments.rules
。然后将您的规则放在该文件中,每行一个。(如果需要,可以像在shell中一样,通过在行的末尾添加反斜杠来扩展行。)
因此,如果要更改tty设备上的组和权限,则文件/etc/udev/rules.d/99-instruments.rules
可以由单行组成:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
为确保新文件本身具有通常的权限,请执行以下操作:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
创建文件后,udevd可能会自动读取它。如果没有,您可以使用以下命令强制其重新读取文件:
udevadm control --reload-rules
如果要更好地控制哪些设备响应哪些规则,可以通过细读/ sys /了解有关udev如何查看设备的更多信息。目前,我无法访问带有ttyUSB或HPIB的计算机,因此让我们以磁盘sda为例。跑:
udevadm info --attribute-walk --path=/sys/block/sda
这给出了很多信息,如下所示:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
这些行的格式均适用if
于规则中的as 子句。因此,例如,要更改所有标记为不可移动的块设备的所有权,我们将使用以下规则:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
利用的信息udevadm
,可以开发出可以针对特定目标设备的规则。
我认为我建议使该规则比约翰的规则更具限制性。例如,创建一个文件,例如/etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
您可以udevadm
用来确定设备SUBSYSTEM==
和KERNEL==
值。例如:
$ udevadm info -a -n /dev/tty0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/tty/tty0':
KERNEL=="tty0"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{active}=="tty1"