udev 규칙은 무시 된 것 같습니다. 모뎀 관리자가 장치를 잡는 것을 막을 수 없습니다 LG Phone ATTRS{idVendor}==”1004″, ENV{ID_MM_DEVICE_IGNORE}=”1″ 그러나 전화를

휴대폰을 USB 포트에 꽂을 때 모뎀 관리자가 실행되는 것을 막으려 고합니다.

udev로 사용자 정의 규칙을 추가하려고 시도했지만 사용자 정의 규칙이 무시 된 것 같습니다. 나는 /etc/udev/rules.d/99-mm-usb-device-blacklist.rules포함 하는 파일 을 만들었습니다

# LG Phone
ATTRS{idVendor}=="1004", ENV{ID_MM_DEVICE_IGNORE}="1"

그러나 전화를 연결하고 dmesg를 확인할 때 이것이 내가 얻는 것입니다.

[ 1809.761940] usb 3-1: new high-speed USB device number 11 using xhci_hcd
[ 1809.778662] usb 3-1: New USB device found, idVendor=1004, idProduct=61fc
[ 1809.778670] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1809.778674] usb 3-1: Product: B Project USB Device
[ 1809.778677] usb 3-1: Manufacturer: LG Electronics. Inc
[ 1809.778680] usb 3-1: SerialNumber: XXXXXXXXXXXXXXXXX
[ 1809.779501] cdc_acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 1809.779584] cdc_acm 3-1:1.0: ttyACM0: USB ACM device
[ 1809.780899] cdc_ether 3-1:1.3 usb0: register 'cdc_ether' at usb-0000:00:14.0-1, CDC Ethernet Device, 6e:34:73:4f:68:4c
[ 1809.781454] scsi8 : usb-storage 3-1:1.5
[ 1809.807331] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
[ 1809.816566] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
[ 1809.816759] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready

나는 또한 편집을 시도 /lib/udev/rules.dev/77-mm-usb-device-blacklist.rules했지만 이것도 작동하지 않았다. 내가 무엇을 놓치고 있습니까? 이것을 디버깅하는 데 도움이되는 단계는 무엇입니까?

업데이트 : Running udevadm info --export-db은 udev 규칙이 업데이트되고 있음을 나타냅니다. 관련 출력은 다음과 같습니다.

P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7
N: bus/usb/002/012
E: BUSNUM=002
E: DEVNAME=/dev/bus/usb/002/012
E: DEVNUM=012
E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
E: ID_MM_DEVICE_IGNORE=1
E: ID_MODEL=B_Project_USB_Device
E: ID_MODEL_ENC=B\x20Project\x20USB\x20Device
E: ID_MODEL_ID=61fc
E: ID_REVISION=0216
E: ID_SERIAL=LG_Electronics._Inc_B_Project_USB_Device_XXXXXXXXXXXXX
E: ID_SERIAL_SHORT=XXXXXXXXXXXX
E: ID_USB_INTERFACES=:020201:0a0000:ffffff:020600:080650:
E: ID_VENDOR=LG_Electronics._Inc
E: ID_VENDOR_ENC=LG\x20Electronics.\x20Inc
E: ID_VENDOR_ID=1004
E: MAJOR=189
E: MINOR=139
E: PRODUCT=1004/61fc/216
E: SUBSYSTEM=usb
E: TYPE=239/2/1
E: UDEV_LOG=7
E: USEC_INITIALIZED=5987581808

따라서 모뎀 관리자는 장치를 무시해야합니다. 그러나 내 컴퓨터는 USB 포트에 연결할 때마다 휴대 전화를 통해 네트워크 연결을 계속 초기화하려고합니다. udev가 시작하는 다른 프로그램이 있습니까?



답변

이 작업을 수행하는 방법이있을 수 있지만 udev이 AskUbuntu 질문 에서 훨씬 간단한 작업 솔루션을 찾았습니다 .

요약하면 .conf 파일에 줄을 추가하여 특정 장치를 관리하지 않도록 Network Manager에 지시 할 수 있습니다.

먼저 휴대 전화의 mac 주소를 찾으십시오. dmesg플러그를 꽂은 후 터미널에서 실행하십시오 . 인쇄물 중 하나에 mac이 있어야합니다. 나를위한 라인은 :

[ 4691.112016] cdc_ether 3-1:1.3 usb0: register 'cdc_ether' at usb-0000:00:14.0-1, CDC Ethernet Device, de:1a:28:c7:db:e6

그런 다음 /etc/NetworkManager/NetworkManager.conf슈퍼 사용자 권한으로 열고 전화기의 Mac을 관리되지 않는 장치로 추가하십시오. 이것은 내 NetworkManager.conf; 마지막 두 줄을 추가했습니다.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=mac:de:1a:28:c7:db:e6

답변

모뎀 관리자는 다른 필터 정책 을 사용하도록 구성 할 수 있으며 udev 태그 ID_MM_DEVICE_IGNOREstrict필터 정책에 영향을 미치지 않습니다 .

상태를보고 시스템에서 Modem Manager가 사용중인 정책을 확인할 수 있습니다.

> sudo systemctl status ModemManager
● ModemManager.service - Modem Manager
   Loaded: loaded (/lib/systemd/system/ModemManager.service...
   Active: active (running) since ...
   ...
   CGroup: /system.slice/ModemManager.service
           └─644 /usr/sbin/ModemManager --filter-policy=strict

또한 관련 서비스 파일이 /lib/systemd/system/ModemManager.service입니다. 특정 장치의 프로빙을 비활성화하기 위해이 파일을 다른 방법으로 편집 할 수 있습니다.

udev 블랙리스트 규칙을 참조하는 다른 정책을 사용하려면 서비스에서 명령을 변경할 수 있습니다.

ExecStart=/usr/sbin/ModemManager --filter-policy=default

옵션은 default(블랙리스트 규칙 만 사용) 또는 paranoid( strict블랙리스트 규칙을 사용하지만 마찬가지로)입니다. 문서는 이 블랙리스트 규칙에 대한 지원은 향후 폐기 될 수 있으므로 사용하지 않는 것이 좋습니다 언급하고있다.

다른 옵션은 여러 TTY 관련 환경 변수 중 하나를 사용하여 장치 클래스를 필터링하는 것입니다 . [Service]서비스 파일 섹션에 줄을 추가하면 됩니다. 예를 들어 ACM TTY 장치의 프로빙을 금지하려면

[Service]
...
Environment="MM_FILTER_RULE_TTY_ACM_INTERFACE=0"

서비스 파일을 변경 한 후 systemctl구성을 다시 로드하고 ModemManager를 다시 시작하십시오.

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

디버깅 목적으로 장치를 연결할 때 모뎀 관리자 로그를 보는 것이 유용 할 수 있습니다. 디버그 로깅을 사용하려면 다음을 실행하십시오.

sudo mmcli -G DEBUG;

필터 로그 메시지를 보려면 다음을 실행하십시오.

journalctl -f | grep "ModemManager.*\[filter\]"

이제 장치를 연결하면 다음과 같은 줄이 나타납니다.

# Device allowed with strict filter policy
[filter] (tty/...): port allowed:...

# Device filtered with default filter policy and udev tags
[filter] (tty/...): port filtered: device is blacklisted

# Device filtered with strict filter policy and environment variables
[filter] (tty/...) port filtered: forbidden

ModemManager 로깅을 이전 상태로 되돌리려면 다음을 실행하십시오.

sudo mmcli -G ERR

답변

(당신은 이미 문제를 해결했기 때문에 과학을 위해서만 …)

udev는 알파벳 순서대로 규칙을 읽고 실행합니다 [1].
이는 NetworkManager로 설정을 덮어 써야한다는 의미 일 수 있습니다.

규칙 이름을에서 (으) 99-99999-변경하면이 변경이 도움이됩니까?


[1] /unix/204979/why-do-the-rules-in-udev-rules-d-have-numbers-in-front-of-them


답변

이것은 ModemManager 1.10.0 (Ubuntu 18.04)에 도움이되는 솔루션입니다.
ModemManager -V

더 많은 것을 배울 수 있습니다 : 일반적인 udev 태그

파일을 작성 /etc/udev/rules.d/49-stm32.rules하고 다음을 추가하십시오.

# 0483:5740 - STM32 in USB Serial Mode (CN5)
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_BLACKLIST}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{MTP_NO_PROBE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_PORT_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_MANUAL_SCAN_ONLY}="1"

파일을 저장하고 실행 한 후 :
sudo udevadm control --reload-rules

(필요하지 않을 수도 있음) :
sudo systemctl restart ModemManager.service

USB 장치를 다시 연결 한 후 (물리적으로 USB 포트로 잡아 당겨 당겨) 즐기십시오.