Удев, як не допустити запуску подальших правил?


4

Чи можна (і якщо так, як) сказати udev припинити виконання подальших правил для певного пристрою?

Я знаю, що існує порядок / послідовність правил за алфавітом іменування файлів udev. Тому здається логічним, що раніше, *.rulesможливо, захочеться запобігти виконанню подальших правил (тобто в порядку, що пізніше виникають правила).

Припустимо, у мене є носій USB-пам’яті, який використовується через udev, і його сценарій RUN + вже встановлений, я б не любив зараз, коли будь-яке інше правило в системі намагається (і, ймовірно, не вдається) знову встановити пристрій!

Для полегшення відповіді я хочу також включити приклад: Нехай правило буде таким:

# у файлі 30.myusb.rules
ACTION == "add", SUBSYSTEM == "usb", ATTRS {idVendor} == "1f75", ATTRS {idProduct} == "0902", RUN + = "/ bin / mount.30.1f75.0902.sh"

тепер я хочу, щоб це подальше (через 31> 30) правило не відбулося

# у файлі 31.myusb.rules
ДІЯ == "додати", SUBSYSTEM == "usb", ATTRS {idVendor} == "1f75", ATTRS {idProduct} == "0902", RUN + = "/ bin / mount.31.1f75.0902.sh"

"фільтр", який використовується для того, щоб udev зміг визначити, чи застосовується правило, однакове для обох правил, але я хотів, щоб правило 31.myusb.rules ніколи не траплялося.

Тому я шукаю спосіб налаштувати 30.myusb.rulesтакий пропонований псевдо-код

# у файлі 30.myusb.rules
ACTION == "add", SUBSYSTEM == "usb", ATTRS {idVendor} == "1f75", ATTRS {idProduct} == "0902", RUN + = "/ bin / mount.30.1f75.0902.sh"
ACTION == "додати", SUBSYSTEM == "usb", ATTRS {idVendor} == "1f75", ATTRS {idProduct} == "0902", STOP_FURTHER_RULES_WITH_THIS_FILTER

Відповіді:


5

Ви можете використовувати GOTOправило, щоб перейти до мітки, як тільки правило було застосовано. Якщо мітка знаходиться в самому кінці правил, то всі наступні правила пропускаються.

Так у 30.myusb.rules:

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

І наприкінці 31.myusb.rules:

LABEL="myusb_end"

Або скористайтеся GOTO="very_end"і вставте LABEL="very_end"у файл, завантажений останнім ( /etc/udev/rules.d/zzzzzzzz.rules).


4

Ви повинні використовувати : = замість + = .

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

З чоловічої сторінки

   "="
       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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.