udev, como evitar que mais regras sejam executadas?

4

É possível (e se sim como) dizer ao udev para parar de executar outras regras para um determinado dispositivo?

Eu sei que existe uma ordem / sequência de regras pela nomenclatura alfabética dos arquivos do udev. Portanto, parece lógico que antes *.rules possa querer impedir que outras (que estão na ordem posterior das regras) sejam executadas.

Vamos supor que eu tenha uma mídia usb-memory que é via udev e seu script RUN + já montado, eu não gostaria que qualquer outra regra no sistema tentasse (e provavelmente falhasse) montar novamente o dispositivo!

Para facilitar a resposta, gostaria de incluir também um exemplo: Deixe a regra ser assim:

# in file 30.myusb.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN+="/bin/mount.30.1f75.0902.sh"

agora quero que esta regra mais (por causa de 31 > 30) não aconteça

# in file 31.myusb.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN+="/bin/mount.31.1f75.0902.sh"

o "filtro" usado para tornar udev capaz de dizer se a regra se aplica é o mesmo para ambas as regras, mas eu desejei que a regra 31.myusb.rules nunca acontecesse.

Por isso, estou procurando uma maneira de tweek 30.myusb.rules em uma maneira sugerida por pseudo-código

# in file 30.myusb.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN+="/bin/mount.30.1f75.0902.sh"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", STOP_FURTHER_RULES_WITH_THIS_FILTER
    
por humanityANDpeace 18.05.2014 / 10:42

2 respostas

4

Você deve usar : = em vez de + = .

# in file 30.myusb.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN:="/bin/mount.30.1f75.0902.sh"

Da página man ,

   "="
       Assign a value to a key. Keys that represent a list are reset and
       only this single value is assigned.

   "+="
       Add the value to a key that holds a list of entries.

   ":="
       Assign a value to a key finally; disallow any later changes.
    
por 18.05.2014 / 16:48
3

Você pode usar GOTO em uma regra para pular para um rótulo assim que a regra for aplicada. Se o rótulo estiver no final das regras, todas as regras subsequentes serão ignoradas.

Então, em 30.myusb.rules :

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN+="/bin/mount.30.1f75.0902.sh", GOTO="myusb_end"

E no final de 31.myusb.rules :

LABEL="myusb_end"

Ou use GOTO="very_end" e coloque LABEL="very_end" em um arquivo carregado por último ( /etc/udev/rules.d/zzzzzzzz.rules ).

    
por 19.05.2014 / 04:21