le regole di udev sembrano ignorate; non può impedire a modem manager di afferrare il dispositivo


17

Sto cercando di impedire l'esecuzione del modem manager quando collego il mio cellulare a una porta USB.

Ho provato ad aggiungere una regola personalizzata con udev, ma le mie regole personalizzate sembrano ignorate. Ho creato un file /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesche contiene

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

Eppure quando collego il telefono e controllo dmesg, questo è quello che ottengo:

[ 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

Ho anche provato a modificare /lib/udev/rules.dev/77-mm-usb-device-blacklist.rulesma anche questo non ha funzionato. Cosa mi sto perdendo? Quale sarebbe un passo utile nel debug di questo?

Aggiornamento: In esecuzione udevadm info --export-dbmostra che la regola udev è in fase di aggiornamento. L'output rilevante è:

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

Quindi il modem manager dovrebbe ignorare il dispositivo. Eppure il mio computer continua a provare a inizializzare una connessione di rete tramite il mio telefono ogni volta che lo collego alla porta USB. Esiste un altro programma che udev sta lanciando?


1
Hai eseguito ModemManager --debug per verificare cosa stava facendo con il dispositivo in questione? Sono anche leggermente sorpreso di non vedere ID_MM_CANDIDATE = 1 in quella voce - forse questo è un dispositivo di scansione codepath separato in ModemManager che non rispetta quell'attributo?
Kiko,

@kiko, ho lo stesso problema dell'autore della domanda. ID_MM_CANDIDATEnon viene visualizzato nell'output del dispositivo USB, ma esiste una voce separata nell'output del database per il dispositivo TTY e questo ha entrambi ID_MM_CANDIDATE=1e ID_MM_DEVICE_IGNORE=1. I registri di debug di Gestione modem mostrano che sta effettivamente sondando il dispositivo.
Ian Mackinnon,

Risposte:


7

Anche se potrebbe esserci un modo per farlo udev, ho trovato una soluzione di lavoro molto più semplice in questa domanda di AskUbuntu .

Per riassumere, puoi dire a Network Manager di non gestire determinati dispositivi aggiungendo una linea al suo file .conf.

Innanzitutto, trova l'indirizzo mac del tuo cellulare. Esegui dmesgdal terminale dopo averlo collegato; una delle stampe dovrebbe avere il mac. La linea per me era:

[ 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

Quindi, apri /etc/NetworkManager/NetworkManager.confcon privilegi di superutente e aggiungi il mac di un telefono come dispositivo non gestito. Questo è mio NetworkManager.conf; Ho aggiunto le ultime due righe.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

6

Modem Manager può essere configurato per utilizzare diversi criteri di filtro e i tag udev come ID_MM_DEVICE_IGNOREnon hanno alcun effetto sotto il strictcriterio di filtro.

È possibile determinare quale criterio Modem Manager sta utilizzando sul proprio sistema visualizzando il suo stato:

> 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

Questo dimostra anche che il file di servizio pertinente è /lib/systemd/system/ModemManager.service. È possibile modificare questo file in diversi modi per disabilitare il sondaggio di un determinato dispositivo.

Per utilizzare una politica diversa che farà riferimento alle regole della blacklist udev, è possibile modificare il comando nel servizio:

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

Le opzioni sono default(basta usare le regole della lista nera) o paranoid(come strictma anche usare le regole della lista nera). La documentazione menziona questo non è raccomandato poiché il supporto per le regole della lista nera potrebbe essere obsoleto in futuro.

Un'altra opzione è quella di filtrare una classe di dispositivi utilizzando una delle numerose variabili d'ambiente specifiche TTY . Ciò può essere ottenuto aggiungendo una riga alla [Service]sezione del file di servizio. Ad esempio, per vietare il sondaggio dei dispositivi ACM TTY:

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

Dopo aver modificato il file di servizio, ricaricare la systemctlconfigurazione e riavviare ModemManager:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

Ai fini del debug può essere utile guardare i registri del modem manager quando si collega il dispositivo. Per abilitare la registrazione debug, eseguire:

sudo mmcli -G DEBUG;

Per guardare i messaggi del registro filtri, eseguire:

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

Ora quando colleghi il tuo dispositivo dovresti vedere linee come:

# 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

Per riportare la registrazione di ModemManager al suo stato precedente, eseguire:

sudo mmcli -G ERR

Se la blacklist non è più utilizzata, abbiamo riscontrato problemi simili con i dispositivi Arduino che vengono nuovamente analizzati da MM. Ho sollevato alcuni problemi al riguardo su MM upstream e Debian, vedere gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 e bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman,

0

(solo per motivi scientifici, dal momento che hai già risolto il problema ...)

udev legge / esegue le sue regole in ordine alfabetico [1].
Ciò potrebbe significare che le tue impostazioni devono essere sovrascritte in NetworkManager, che la tua regola è inutile.

Se rinomini la tua regola da 99-a 99999-questa modifica ti aiuta?


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


Ho avuto questo problema 5 anni fa e non ho più alcun hardware con cui ho riscontrato il problema. Mi sembra di ricordare di aver scherzato con i nomi dei file, ma non riesco a ricordare le circostanze esatte.
Superdesk,

0

Questa è la soluzione che mi aiuta per ModemManager 1.10.0 (Ubuntu 18.04)
ModemManager -V

Puoi saperne di più: Tag udev comuni

Crea un file /etc/udev/rules.d/49-stm32.rulese aggiungi questo:

# 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"

Dopo aver salvato il file ed eseguirlo:
sudo udevadm control --reload-rules

e (forse non è necessario):
sudo systemctl restart ModemManager.service

Dopo aver ricollegato il dispositivo USB (estrarre fisicamente e inserirlo nella porta USB) e divertiti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.