В моей /dev
папке я хотел бы, чтобы следующие файлы были доступны для чтения и записи для пользователя:
/dev/ttyUSB0
/dev/gpib0
Как мне сделать это без использования chgrp
? Я могу редактировать, /etc/udev/rules.d
но я не знаю синтаксис.
В моей /dev
папке я хотел бы, чтобы следующие файлы были доступны для чтения и записи для пользователя:
/dev/ttyUSB0
/dev/gpib0
Как мне сделать это без использования chgrp
? Я могу редактировать, /etc/udev/rules.d
но я не знаю синтаксис.
Ответы:
Для устройств, попадающих в подсистему 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
Если вы хотите лучше контролировать, какие устройства реагируют на какие правила, вы можете узнать больше о том, как udev видит ваши устройства, просматривая / sys /. На данный момент у меня нет доступа к машине с 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
положений в правилах. Так, например, чтобы изменить владельца на всех блочных устройствах, помеченных как несъемные, мы бы использовали правило:
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"