En mi /dev
carpeta, me gustaría que los siguientes archivos sean legibles y escribibles por el usuario:
/dev/ttyUSB0
/dev/gpib0
¿Cómo hago esto sin usar chgrp
? Puedo editar /etc/udev/rules.d
pero no sé la sintaxis.
En mi /dev
carpeta, me gustaría que los siguientes archivos sean legibles y escribibles por el usuario:
/dev/ttyUSB0
/dev/gpib0
¿Cómo hago esto sin usar chgrp
? Puedo editar /etc/udev/rules.d
pero no sé la sintaxis.
Respuestas:
Para los dispositivos que caen en el subsistema tty, puede configurar su grupo de la siguiente manera:
SUBSYSTEM=="tty", GROUP="dialout"
Tenga en cuenta que, al igual que en la programación común, ==
es una prueba de igualdad, mientras que =
es una tarea. Por lo tanto, la declaración anterior se traduce como "si SUBSYSTEM=="tty"
luego se asigna GROUP="dialout"
. Una declaración puede tener múltiples pruebas, que se agrupan, y múltiples asignaciones.
Si desea cambiar los permisos de lectura-escritura-ejecución, asigne MODE en lugar de GROUP donde MODE sigue la notación octal Unix habitual, por ejemplo, MODE="0660"
otorga al propietario y al grupo permisos de lectura-escritura. man udev
Tiene todos los detalles.
Puede encontrar muchos ejemplos de tales reglas en /lib/udev/rules.d/91-permissions.rules
Una vez que se haya decidido cuál quiere que sea su regla, es bastante simple agregarla. En un sistema derivado de Debian, vaya al directorio /etc/udev/rules.d
y cree un archivo. Los archivos se ejecutan en orden de clasificación. Por lo tanto, para hacer que su archivo de reglas sea el último en leer, anulando las anteriores, intente con un nombre como 99-instruments.rules
. Luego ponga sus reglas en ese archivo, una por línea. (Si es necesario, las líneas se pueden extender colocando una barra diagonal inversa al final de la línea, al igual que en el shell).
Entonces, si desea cambiar el grupo y los permisos en los dispositivos tty, su archivo /etc/udev/rules.d/99-instruments.rules
podría consistir en una sola línea:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
Para asegurarse de que su nuevo archivo tenga los permisos habituales:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
Después de haber creado su archivo, udevd puede leerlo automáticamente. Si no, puede forzarlo a volver a leer sus archivos con:
udevadm control --reload-rules
Si desea obtener un control más preciso sobre qué dispositivos responden a qué reglas, puede obtener más información sobre cómo udev ve sus dispositivos examinando / sys /. En este momento, no tengo acceso a una máquina con ttyUSB o HPIB, así que hagamos un ejemplo de disco sda. Correr:
udevadm info --attribute-walk --path=/sys/block/sda
Esto proporciona mucha información similar a la siguiente:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
Todas estas líneas tienen la forma adecuada para usar como if
cláusulas en las reglas. Entonces, por ejemplo, para cambiar la propiedad en todos los dispositivos de bloque que están marcados como no extraíbles, usaríamos la regla:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
Con información de udevadm
, uno puede desarrollar reglas que pueden apuntar específicamente a los dispositivos de interés.
Creo que sugeriría que la regla sea un poco más restrictiva que la de John. Por ejemplo, cree un archivo como /etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
Puede usar udevadm
para determinar dispositivos SUBSYSTEM==
y KERNEL==
valores. Por ejemplo:
$ 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"