ดูเหมือนว่ากฎ udev จะถูกเพิกเฉย ไม่สามารถป้องกันตัวจัดการโมเด็มจากอุปกรณ์ที่กำลังจับ


17

ฉันพยายามป้องกันไม่ให้ตัวจัดการโมเด็มทำงานเมื่อฉันเสียบโทรศัพท์มือถือเข้ากับพอร์ต 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แต่มันก็ไม่ได้ผลเหมือนกัน ฉันพลาดอะไรไป อะไรจะเป็นขั้นตอนที่มีประโยชน์ในการแก้ไขข้อบกพร่องนี้

อัปเดต: การรัน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 กำลังเปิดตัวหรือไม่?


1
คุณรัน ModemManager --debug เพื่อตรวจสอบว่ามันทำอะไรกับอุปกรณ์ที่เป็นปัญหาหรือไม่? ฉันก็ประหลาดใจเล็กน้อยที่ไม่เห็น ID_MM_CANDIDATE = 1 ในรายการนั้น - บางทีนี่อาจเป็นอุปกรณ์สแกน codepath แยกต่างหากใน ModemManager ซึ่งไม่เคารพคุณลักษณะนั้น
kiko

@kiko ฉันมีปัญหาเช่นเดียวกับผู้เขียนคำถาม ID_MM_CANDIDATEไม่ปรากฏในการส่งออกอุปกรณ์ USB แต่มีรายการแยกต่างหากในการส่งออกฐานข้อมูลสำหรับอุปกรณ์ TTY และนี้มีทั้งและID_MM_CANDIDATE=1 ID_MM_DEVICE_IGNORE=1บันทึกการแก้ไขข้อบกพร่องของ Modem Manager แสดงว่ามันเป็นอุปกรณ์จริง
Ian Mackinnon

คำตอบ:


7

ในขณะที่อาจมีวิธีการทำเช่นนี้udevฉันพบวิธีแก้ปัญหาการทำงานที่ง่ายกว่ามากสำหรับคำถาม AskUbuntu นี้

เพื่อสรุปคุณสามารถบอกผู้จัดการเครือข่ายไม่ให้จัดการอุปกรณ์บางอย่างได้โดยเพิ่มบรรทัดลงในไฟล์. conf

ก่อนอื่นค้นหาที่อยู่ 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

6

Modem Manager สามารถกำหนดค่าให้ใช้นโยบายตัวกรองที่แตกต่างกันและแท็ก udev เช่นID_MM_DEVICE_IGNOREไม่มีผลภายใต้strictนโยบายตัวกรอง

คุณสามารถกำหนดนโยบายที่ 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 blacklist เราสามารถเปลี่ยนคำสั่งในบริการ:

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

ตัวเลือกคือdefault(ใช้กฎของบัญชีดำ) หรือparanoid(เช่นstrictแต่ใช้กฎของบัญชีดำด้วย) เอกสารกล่าวถึงนี้ไม่แนะนำการสนับสนุนสำหรับกฎบัญชีดำอาจจะจำหน่ายแล้วในอนาคต

อีกตัวเลือกหนึ่งคือการกรองระดับของอุปกรณ์ที่ใช้หนึ่งใน TTY เฉพาะหลายตัวแปรสภาพแวดล้อม สิ่งนี้สามารถทำได้โดยการเพิ่มบรรทัดไปยัง[Service]ส่วนของไฟล์บริการ ตัวอย่างเช่นหากต้องการห้ามการ probing ของอุปกรณ์ 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

หากบัญชีดำไม่ได้ใช้งานอีกต่อไปเราพบปัญหาคล้ายกันกับอุปกรณ์ Arduino ที่ถูกตรวจสอบโดย MM อีกครั้ง ฉันเปิดประเด็นบางอย่างเกี่ยวกับเรื่องนี้ที่ MM upstream และ Debian โปรดดูgitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127และbugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman

0

(เพียงเพื่อประโยชน์ของวิทยาศาสตร์เนื่องจากคุณได้แก้ไขปัญหาของคุณแล้ว ... )

udev อ่าน / ดำเนินการกฎของมันตามลำดับตัวอักษร [1]
นี่อาจหมายความว่าการตั้งค่าของคุณควรเขียนทับเป็น NetworkManager นั่นเป็นกฎของคุณที่ไร้ประโยชน์

หากคุณเปลี่ยนชื่อกฎจาก99-เป็นการ99999-เปลี่ยนแปลงนี้จะช่วยคุณได้หรือไม่


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


ฉันมีปัญหานี้เมื่อ 5 ปีที่แล้วและไม่มีฮาร์ดแวร์ใด ๆ ที่ฉันประสบปัญหาอีกต่อไป ฉันดูเหมือนจะจำได้ว่าสับสนกับชื่อไฟล์ แต่ไม่สามารถจำสถานการณ์ที่แน่นอน
superdesk

0

นี่คือวิธีแก้ไขปัญหาช่วยฉันสำหรับ 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) แล้วเพลิดเพลิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.