udevルールがどのように解釈されるかを理解しようとしています。コンテキスト:root以外のユーザーとしてUSBスキャナーにアクセスできるようにします(私はscanner
グループのメンバーです)。
次のルールはいいえ働く:
SUBSYSTEM=="usb_device", ACTION=="add", ATTR{idVendor}=="04a9", ATTR{idProduct}=="190d", SYMLINK+="scan-canon", MODE="0666", OWNER="misha", GROUP="scanner"
ただし、次の規則が適用されます。
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="canon_rules_end"
ATTR{idVendor}=="04a9", ATTR{idProduct}=="190d", SYMLINK+="scan-canon", MODE="0666", OWNER="misha", GROUP="scanner"
LABEL="canon_rules_end"
これらの2つのバージョンは確かに論理的に同じですか?なぜよりエレガントな最初のバージョンが動作しないのか理解できません。どんなアイデアがありますか?
答え1
髪を抜きすぎた後に見つけました。
私のスキャナーのサブシステムは実際にありましたusb
。そのため、ルールの最初のバージョン(エレガントなバージョン)が失敗しました。 SUBSYSTEMが同じではないからですusb_device
。
2番目のバージョンは動作しますが、理由はすべて間違っています。コーディング分野に従事している人なら誰でもこの狡猾な自害の間違いに慣れるでしょう。 Udevは指定された条件にAND論理を適用します。これは次のことを意味します。誰でも条件がFalseと評価されると、GOTOは実行されず、ルールのコアコンテンツが実行されます。否定条件とANDロジックを混在させるのは面倒です。
とにかく、私は最初のバージョンを修正したので、期待どおりに正しく動作します。
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="04a9", ATTR{idProduct}=="190d", SYMLINK+="scan-canon", MODE="0666", OWNER="misha", GROUP="scanner"
編集する:〜のようにイクラベ両方の元のバージョンは決して論理的に同じではないことを指摘してください。