이상한 udev 규칙 동작

이상한 udev 규칙 동작

udev 규칙이 어떻게 해석되는지 이해하려고 노력 중입니다. 컨텍스트: 루트가 아닌 사용자로 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"

이 두 버전은 확실히 논리적으로 동일합니까? 왜 더 우아한 첫 번째 버전이 작동하지 않는지 이해할 수 없습니다. 어떤 아이디어가 있나요?

답변1

머리카락을 너무 많이 뽑은 후에 알아 냈습니다.

내 스캐너의 하위 시스템은 실제로 이었습니다 usb. 따라서 규칙의 첫 번째 버전(우아한 버전)이 실패했습니다. SUBSYSTEM이 와 같지 않기 때문입니다 usb_device.

두 번째 버전은 작동하지만 이유가 모두 잘못되었습니다. 코딩 분야에 종사하는 사람이라면 누구나 이 교활한 자해 실수에 익숙할 것입니다. Udev는 지정된 조건에 AND 논리를 적용합니다. 이는 다음을 의미합니다.누구나조건이 False로 평가되면 GOTO가 실행되지 않고 규칙의 핵심 내용이 실행됩니다. 부정 조건과 AND 논리를 혼합하는 것은 짜증나는 일입니다.

어쨌든, 이제 첫 번째 버전을 수정했으므로 예상대로 정확하게 작동합니다.

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="04a9", ATTR{idProduct}=="190d", SYMLINK+="scan-canon", MODE="0666", OWNER="misha", GROUP="scanner"

편집하다:~처럼이크라베두 원본 버전은 결코 논리적으로 동일하지 않다는 점을 지적하십시오.

관련 정보