Sua configuração deve funcionar basicamente, mas eu gostaria de fazer algumas sugestões:
Primeiro, acho que você quer usar ATTR
, não ATTRS
. ATTRS
pesquisa a árvore inteira do dispositivo para um dispositivo correspondente (pai). Isso provavelmente não é o que você pretende. Com o uso de ATTR
, o dispositivo realmente acionando o evento precisa ter o atributo especificado.
Segundo, como criar links simbólicos para nós de dispositivos é uma tarefa bastante comum, há uma instrução dedicada para isso, ou seja, SYMLINK+="newname"
. Desta forma, você não será dependente de comandos "externos". Ainda mais importante, ao usar essa diretiva, você só precisa coincidir com o evento "adicionar", pois udevd
removerá automaticamente os links simbólicos associados quando um dispositivo desaparecer.
Assim, suas regras devem ser
ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"
Por último, sugeriria restringir a correspondência adicionando outra restrição SUBSYSTEM, ou seja, adicionando SUBSYSTEM=="usb"
. Como os IDs de dispositivo e fornecedor são apenas (espero) exclusivos em seu escopo, omitir a correspondência do subsistema pode resultar em suas regras correspondentes em outras classes de dispositivo, como dispositivos PCI. Mesmo que isso seja improvável, é comumente visto como um bom estilo nas regras do udev:
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"