Dans mon /dev
dossier, j'aimerais que les fichiers suivants soient lisibles et inscriptibles par l'utilisateur:
/dev/ttyUSB0
/dev/gpib0
Comment faire sans utiliser chgrp
? Je peux éditer /etc/udev/rules.d
mais je ne connais pas la syntaxe.
Dans mon /dev
dossier, j'aimerais que les fichiers suivants soient lisibles et inscriptibles par l'utilisateur:
/dev/ttyUSB0
/dev/gpib0
Comment faire sans utiliser chgrp
? Je peux éditer /etc/udev/rules.d
mais je ne connais pas la syntaxe.
Réponses:
Pour les périphériques entrant dans le sous-système tty, vous pouvez définir leur groupe comme suit:
SUBSYSTEM=="tty", GROUP="dialout"
Notez que, tout comme dans la programmation courante, ==
est un test d'égalité tandis =
qu'une assignation. Ainsi, l'instruction ci-dessus se traduit par "si SUBSYSTEM=="tty"
alors affectez GROUP="dialout"
. Une instruction peut avoir plusieurs tests, qui sont édités ensemble et plusieurs affectations.
Si vous souhaitez modifier les autorisations de lecture-écriture-exécution, affectez alors MODE au lieu de GROUP où MODE suit la notation octale Unix habituelle, par exemple MODE="0660"
donne au propriétaire et au groupe les autorisations de lecture-écriture. man udev
a tous les détails.
Vous pouvez trouver de nombreux exemples de telles règles dans /lib/udev/rules.d/91-permissions.rules
Une fois que vous avez déterminé ce que vous voulez que votre règle soit, il est assez simple de l'ajouter. Sur un système dérivé de Debian, accédez au répertoire /etc/udev/rules.d
et créez un fichier. Les fichiers sont exécutés dans l'ordre de tri. Donc, pour que votre fichier de règles soit le dernier à être lu, en remplaçant les précédents, essayez un nom comme 99-instruments.rules
. Mettez ensuite vos règles dans ce fichier, une par ligne. (Si nécessaire, les lignes peuvent être étendues en mettant une barre oblique inversée à la fin de la ligne, tout comme dans le shell.)
Donc, si vous souhaitez modifier le groupe et les autorisations sur les périphériques tty, votre fichier /etc/udev/rules.d/99-instruments.rules
peut être composé d'une seule ligne:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
Pour vous assurer que votre nouveau fichier lui-même dispose des autorisations habituelles:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
Après avoir créé votre fichier, udevd peut le lire automatiquement. Sinon, vous pouvez le forcer à relire ses fichiers avec:
udevadm control --reload-rules
Si vous souhaitez obtenir un contrôle plus fin sur les appareils qui répondent à quelles règles, vous pouvez en savoir plus sur la façon dont udev voit vos appareils en lisant / sys /. Pour le moment, je n'ai pas accès à une machine avec un ttyUSB ou un HPIB, alors faisons un exemple de disque sda. Courir:
udevadm info --attribute-walk --path=/sys/block/sda
Cela donne beaucoup d'informations qui ressemblent à:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
Ces lignes sont toutes sous la forme appropriée pour être utilisées comme if
clauses dans les règles. Ainsi, par exemple, pour modifier la propriété de tous les périphériques de bloc marqués comme non amovibles, nous utiliserions la règle:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
Avec des informations provenant de udevadm
, on peut développer des règles qui peuvent cibler spécifiquement les appareils d'intérêt.
Je pense que je suggérerais de rendre la règle un peu plus restrictive que celle de John. Par exemple, créez un fichier tel que /etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
Vous pouvez utiliser udevadm
pour déterminer un périphérique SUBSYSTEM==
et des KERNEL==
valeurs. Par exemple:
$ 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"