udev-Regeln scheinen ignoriert zu werden; kann nicht verhindern, dass der Modem-Manager das Gerät greift


17

Ich versuche zu verhindern, dass der Modem-Manager ausgeführt wird, wenn ich mein Handy an einen USB-Anschluss anschließe.

Ich habe versucht, mit udev eine benutzerdefinierte Regel hinzuzufügen, aber meine benutzerdefinierten Regeln scheinen ignoriert zu werden. Ich habe eine Datei erstellt, /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesdie enthält

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

Und doch, wenn ich das Telefon einstecke und dmesg überprüfe, bekomme ich Folgendes:

[ 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

Ich habe auch versucht zu bearbeiten /lib/udev/rules.dev/77-mm-usb-device-blacklist.rules aber das hat auch nicht funktioniert. Was vermisse ich? Was wäre ein hilfreicher Schritt beim Debuggen?

Update: Beim Ausführen udevadm info --export-dbwird angezeigt, dass die udev-Regel aktualisiert wird. Die relevante Ausgabe ist:

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

Der Modem-Manager sollte das Gerät also ignorieren. Trotzdem versucht mein Computer immer wieder, eine Netzwerkverbindung über mein Telefon herzustellen, wenn ich es an den USB-Anschluss anschließe. Gibt es ein anderes Programm, das udev startet?


1
Haben Sie ModemManager --debug ausgeführt, um zu überprüfen, was mit dem betreffenden Gerät geschehen ist? Ich bin auch ein wenig überrascht, dass in diesem Eintrag nicht ID_MM_CANDIDATE = 1 angezeigt wird. Ist dies möglicherweise ein separates Codepath-Scan-Gerät in ModemManager, das dieses Attribut nicht berücksichtigt?
kiko

@kiko, ich habe das gleiche Problem wie der Frageautor. ID_MM_CANDIDATEwird in der USB-Geräteausgabe nicht angezeigt, es gibt jedoch einen separaten Eintrag in der Datenbankausgabe für das TTY-Gerät, und dieser hat sowohl ID_MM_CANDIDATE=1als auch ID_MM_DEVICE_IGNORE=1. Modem Manager-Debugprotokolle zeigen, dass das Gerät tatsächlich überprüft wird.
Ian Mackinnon

Antworten:


7

Obwohl es einen Weg gibt, dies zu tun udev, habe ich bei dieser AskUbuntu- Frage eine viel einfachere Lösung gefunden .

Zusammenfassend können Sie Network Manager anweisen, bestimmte Geräte nicht zu verwalten, indem Sie der CONF-Datei eine Zeile hinzufügen.

Ermitteln Sie zunächst die MAC-Adresse Ihres Mobiltelefons. Führen Sie dmesgdas Terminal aus, nachdem Sie es angeschlossen haben. Einer der Ausdrucke sollte den Mac haben. Die Linie für mich war:

[ 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

Öffnen Sie anschließend /etc/NetworkManager/NetworkManager.confmit Superuser-Berechtigungen und fügen Sie den Mac Ihres Telefons als nicht verwaltetes Gerät hinzu. Das ist mein NetworkManager.conf; Ich habe die letzten beiden Zeilen hinzugefügt.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

6

Modem Manager kann so konfiguriert werden, dass unterschiedliche Filterrichtlinien verwendet werden , und die udev-Tags, z. B., ID_MM_DEVICE_IGNOREhaben unter dem keine Auswirkungstrict Filterrichtlinie.

Sie können bestimmen, welche Richtlinie Modem Manager auf Ihrem System verwendet, indem Sie den Status anzeigen:

> 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

Dies zeigt auch, dass die relevante Servicedatei ist /lib/systemd/system/ModemManager.service. Wir können diese Datei auf verschiedene Arten bearbeiten, um die Überprüfung eines bestimmten Geräts zu deaktivieren.

Um eine andere Richtlinie zu verwenden, die sich auf die Regeln der udev-Blacklist bezieht, können wir den Befehl im Service ändern:

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

Optionen sind default(benutze einfach die Blacklist-Regeln) oder paranoid( strictbenutze aber auch die Blacklist-Regeln). Das Dokumentation wird darauf hingewiesen, dass dies nicht empfohlen wird, da die Unterstützung für Regeln für schwarze Listen in Zukunft möglicherweise veraltet sein wird.

Eine andere Option ist das Filtern einer Geräteklasse mithilfe einer von mehreren TTY-spezifischen Umgebungsvariablen . Dies kann erreicht werden, indem eine Zeile an den [Service]Abschnitt der Servicedatei angehängt wird. So verhindern Sie beispielsweise das Testen von ACM TTY-Geräten:

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

Laden Sie nach dem Ändern der Servicedatei die systemctlKonfiguration neu und starten Sie den ModemManager neu:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

Zu Debugging-Zwecken kann es nützlich sein, Modem-Manager-Protokolle zu überwachen, wenn Sie Ihr Gerät anschließen. Führen Sie Folgendes aus, um die Debugprotokollierung zu aktivieren:

sudo mmcli -G DEBUG;

Führen Sie zum Anzeigen der Filterprotokollnachrichten Folgendes aus:

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

Wenn Sie jetzt Ihr Gerät anschließen, sollten folgende Zeilen angezeigt werden:

# 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

Führen Sie Folgendes aus, um die ModemManager-Protokollierung auf den vorherigen Status zurückzusetzen:

sudo mmcli -G ERR

Da die Blacklist nicht mehr verwendet wird, haben wir ähnliche Probleme mit Arduino-Geräten, die erneut von MM geprüft werden. Ich habe einige Probleme in MM upstream und Debian aufgedeckt , siehe gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 und bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman

0

(Nur aus Gründen der Wissenschaft, da Sie Ihr Problem bereits gelöst haben ...)

udev liest / führt seine Regeln in alphabetischer Reihenfolge aus [1].
Dies könnte bedeuten, dass Ihre Einstellungen in NetworkManager überschrieben werden sollten. Das ist Ihre Regel, die unbrauchbar ist.

Wenn Sie Ihre Regel von 99-in umbenennen99999- , hilft Ihnen diese Änderung?


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


Ich hatte dieses Problem vor 5 Jahren und habe keine Hardware mehr, mit der ich das Problem hatte. Ich erinnere mich an das Durcheinander mit den Dateinamen, kann mich aber nicht an die genauen Umstände erinnern.
Superdesk
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.