udv नियमों की अनदेखी लगती है; मॉडेम प्रबंधक को डिवाइस को हथियाने से नहीं रोका जा सकता है


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पता चलता है कि udv नियम अपडेट किया जा रहा है। प्रासंगिक उत्पादन है:

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 पोर्ट पर जब भी प्लग करता है, अपने फोन के माध्यम से एक नेटवर्क कनेक्ट को इनिशियलाइज़ करने की कोशिश करता रहता है। क्या एक और कार्यक्रम है जो udv लॉन्च कर रहा है?


1
क्या आपने यह जांचने के लिए मॉडेममैनगर - डिबग को चलाया कि यह डिवाइस के साथ क्या कर रहा है? मुझे उस प्रविष्टि में ID_MM_CANDIDATE = 1 नहीं देखकर थोड़ा आश्चर्य हुआ - शायद यह ModemManager में एक अलग कोडपैथ स्कैनिंग डिवाइस है जो उस विशेषता का सम्मान नहीं करता है?
विडियो

@kiko, मेरे पास प्रश्न लेखक के रूप में एक ही मुद्दा है। ID_MM_CANDIDATEUSB डिवाइस उत्पादन में प्रकट नहीं होता है, लेकिन वहाँ TTY डिवाइस के लिए डेटाबेस उत्पादन में एक अलग प्रविष्टि है, और यह है दोनों ID_MM_CANDIDATE=1और ID_MM_DEVICE_IGNORE=1। मॉडेम प्रबंधक डिबग लॉग दिखाता है कि यह वास्तव में डिवाइस की जांच कर रहा है।
इयान मैकिनन

जवाबों:


7

हालांकि ऐसा करने का एक तरीका हो सकता है udev, मुझे इस AskUbuntu सवाल पर एक बहुत सरल काम करने वाला समाधान मिला ।

संक्षेप में, आप नेटवर्क प्रबंधक को अपनी .conf फ़ाइल में एक पंक्ति जोड़कर कुछ उपकरणों का प्रबंधन नहीं करने के लिए कह सकते हैं।

सबसे पहले, अपने सेल फोन के मैक पते का पता लगाएं। dmesgइसे अंदर प्लग करने के बाद टर्मिनल से चलाएँ ; प्रिंट आउट में से एक में मैक होना चाहिए। मेरे लिए लाइन थी:

[ 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सुपर उपयोगकर्ता निजीकरण के साथ खोलें , और एक अप्रबंधित डिवाइस के रूप में अपने फोन के मैक को जोड़ें। यह मेरा है NetworkManager.conf; मैंने अंतिम दो पंक्तियाँ जोड़ीं।

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

6

मॉडेम प्रबंधक को विभिन्न फ़िल्टर नीतियों का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है , और udv टैग जैसे ID_MM_DEVICE_IGNOREकि strictफ़िल्टर नीति के तहत कोई प्रभाव नहीं पड़ता है ।

आप यह निर्धारित कर सकते हैं कि आपके सिस्टम पर कौन सी नीति मॉडेम प्रबंधक अपनी स्थिति देखकर उपयोग कर रहा है:

> 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। हम किसी विशेष डिवाइस की जांच को अक्षम करने के लिए इस फ़ाइल को विभिन्न तरीकों से संपादित कर सकते हैं।

एक अलग नीति का उपयोग करने के लिए जो udv ब्लैकलिस्ट नियमों का उल्लेख करेगा हम सेवा में कमांड बदल सकते हैं:

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

विकल्प हैं default(केवल ब्लैकलिस्ट नियमों का उपयोग करें) या paranoid(जैसे strictभी ब्लैकलिस्ट नियमों का उपयोग करें)। प्रलेखन का उल्लेख है इस के रूप में काली सूची नियम के लिए समर्थन भविष्य में पुराना हो सकता है अनुशंसित नहीं है।

एक अन्य विकल्प कई TTY- विशिष्ट पर्यावरण चर में से एक का उपयोग करके उपकरणों के एक वर्ग को फ़िल्टर करना है । इसे [Service]सेवा फ़ाइल के अनुभाग में एक पंक्ति जोड़कर प्राप्त किया जा सकता है । उदाहरण के लिए, ACM TTY उपकरणों की जांच को रोकना:

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

सेवा फ़ाइल को परिवर्तित करने के बाद, systemctlकॉन्फ़िगरेशन को फिर से लोड करें और मॉडेम प्रबंधक को पुनः आरंभ करें:

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

मोडेम मैनेजर को अपनी पूर्व स्थिति में लॉगिंग करने के लिए, रन करें:

sudo mmcli -G ERR

ब्लैक लिस्ट का उपयोग नहीं किया जा रहा है, हम Arduino उपकरणों के साथ इसी तरह की समस्या रखते रहे हैं जिन्हें फिर से MM द्वारा जांचा जाता है। मैंने एमएम अपस्ट्रीम और डेबियन में इसके बारे में कुछ मुद्दे खोले हैं, gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 और bugs.debian.org/cgi-bin-bugreport.cgi?bug=930264
मत्तीज कोइजमैन

0

(सिर्फ विज्ञान के लिए, क्योंकि आप पहले से ही अपने मुद्दे को हल कर चुके हैं ...)

udev वर्णमाला क्रम [1] में अपने नियमों को पढ़ता / कार्यान्वित करता है।
इसका मतलब यह हो सकता है कि आपकी सेटिंग्स को नेटवर्क मैनर लिखा जाना चाहिए, यह आपका नियम बेकार है।

आप से अपने नियम का नाम बदलते हैं 99-करने के लिए 99999-यह परिवर्तन आपको मदद करता है?


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


मुझे 5 साल पहले यह समस्या थी, और अब मेरे पास कोई भी हार्डवेयर नहीं है जिसे मैंने इस मुद्दे के साथ अनुभव किया हो। मैं फ़ाइल नाम के साथ खिलवाड़ करना याद करता हूं, लेकिन सटीक परिस्थितियों को याद नहीं कर सकता।
सुपरडेस्क

0

यह मुझे 1.10.0 (Ubuntu 18.04)
ModemManager -V

आप और अधिक सीख सकते हैं: सामान्य udv टैग

एक फ़ाइल बनाएं /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 पोर्ट में खींच लें) और आनंद लें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.