Na minha /dev
pasta, gostaria que os seguintes arquivos fossem legíveis e graváveis pelo usuário:
/dev/ttyUSB0
/dev/gpib0
Como faço isso sem usar chgrp
? Eu posso editar, /etc/udev/rules.d
mas não conheço a sintaxe.
Na minha /dev
pasta, gostaria que os seguintes arquivos fossem legíveis e graváveis pelo usuário:
/dev/ttyUSB0
/dev/gpib0
Como faço isso sem usar chgrp
? Eu posso editar, /etc/udev/rules.d
mas não conheço a sintaxe.
Respostas:
Para dispositivos que se enquadram no subsistema tty, você pode definir o grupo deles da seguinte maneira:
SUBSYSTEM=="tty", GROUP="dialout"
Observe que, assim como na programação comum, ==
é um teste de igualdade enquanto =
é uma atribuição. Portanto, a instrução acima se traduz em "se for SUBSYSTEM=="tty"
atribuída GROUP="dialout"
. Uma instrução pode ter vários testes, que são editados juntos e várias atribuições.
Se você quiser alterar as permissões de leitura-gravação-execução, atribua MODE em vez de GROUP, onde MODE segue a notação octal usual do Unix, por exemplo, MODE="0660"
concede permissões de leitura e gravação ao proprietário e ao grupo. man udev
tem todos os detalhes.
Você pode encontrar muitos exemplos dessas regras em /lib/udev/rules.d/91-permissions.rules
Depois de decidir o que você deseja que sua regra seja, é simples o suficiente adicioná-la. Em um sistema derivado do debian, vá para o diretório /etc/udev/rules.d
e crie um arquivo. Os arquivos são executados em ordem de classificação. Portanto, para tornar seu arquivo de regras o último a ser lido, substituindo os anteriores, tente um nome como 99-instruments.rules
. Em seguida, coloque suas regras nesse arquivo, uma por linha. (Se necessário, as linhas podem ser estendidas colocando uma barra invertida no final da linha, como no shell.)
Portanto, se você deseja alterar o grupo e as permissões em dispositivos tty, seu arquivo /etc/udev/rules.d/99-instruments.rules
pode consistir na única linha:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
Para garantir que seu novo arquivo tenha as permissões usuais:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
Depois de criar seu arquivo, o udevd poderá lê-lo automaticamente. Caso contrário, você pode forçá-lo a reler seus arquivos com:
udevadm control --reload-rules
Se você deseja obter um controle mais preciso sobre quais dispositivos respondem a quais regras, pode aprender mais sobre como o udev vê seus dispositivos lendo / sys /. No momento, não tenho acesso a uma máquina com um ttyUSB ou um HPIB, então vamos fazer um exemplo de sda de disco. Corre:
udevadm info --attribute-walk --path=/sys/block/sda
Isso fornece muitas informações parecidas com:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
Essas linhas estão todas na forma adequada para usar como if
cláusulas nas regras. Portanto, por exemplo, para alterar a propriedade em todos os dispositivos de bloco marcados como não removíveis, usaríamos a regra:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
Com as informações de udevadm
, é possível desenvolver regras que podem direcionar especificamente os dispositivos de interesse.
Acho que sugiro tornar a regra um pouco mais restritiva que a de John. Por exemplo, crie um arquivo como /etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
Você pode usar udevadm
para determinar dispositivos SUBSYSTEM==
e KERNEL==
valores. Por exemplo:
$ 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"