les règles udev semblent ignorées; ne peut pas empêcher le gestionnaire de modem de saisir le périphérique

17

J'essaie d'empêcher le gestionnaire de modem de fonctionner lorsque je branche mon téléphone portable sur un port USB.

J'ai essayé d'ajouter une règle personnalisée avec udev, mais mes règles personnalisées semblent ignorées. J'ai créé un fichier /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesqui contient

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

Et pourtant, lorsque je branche le téléphone et vérifie dmesg, voici ce que j'obtiens:

[ 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

J'ai également essayé l'édition, /lib/udev/rules.dev/77-mm-usb-device-blacklist.rulesmais cela n'a pas fonctionné non plus. Qu'est-ce que je rate? Quelle serait une étape utile pour déboguer cela?

Mise à jour: l'exécution udevadm info --export-dbmontre que la règle udev est en cours de mise à jour. La sortie pertinente est:

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

Le gestionnaire de modem doit donc ignorer le périphérique. Et pourtant, mon ordinateur continue d'essayer d'initialiser une connexion réseau via mon téléphone chaque fois que je le branche sur le port USB. Y a-t-il un autre programme que udev lance?

superdesk
la source
1
Avez-vous exécuté ModemManager --debug pour vérifier ce qu'il faisait avec le périphérique en question? Je suis également légèrement surpris de ne pas voir ID_MM_CANDIDATE = 1 dans cette entrée - peut-être qu'il s'agit d'un périphérique de balayage de chemin de code distinct dans ModemManager qui ne respecte pas cet attribut?
kiko
@kiko, j'ai le même problème que l'auteur de la question. ID_MM_CANDIDATEn'apparaît pas dans la sortie du périphérique USB, mais il existe une entrée distincte dans la sortie de la base de données pour le périphérique TTY, et elle contient les deux ID_MM_CANDIDATE=1et ID_MM_DEVICE_IGNORE=1. Les journaux de débogage de Modem Manager montrent qu'il teste bien le périphérique.
Ian Mackinnon

Réponses:

7

Bien qu'il puisse y avoir un moyen de le faire udev, j'ai trouvé une solution de travail beaucoup plus simple à cette question AskUbuntu .

Pour résumer, vous pouvez dire à Network Manager de ne pas gérer certains périphériques en ajoutant une ligne à son fichier .conf.

Tout d'abord, recherchez l'adresse mac de votre téléphone portable. Exécutez à dmesgpartir du terminal après l'avoir branché; l'une des impressions devrait avoir le mac. La ligne pour moi était:

[ 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

Ensuite, ouvrez /etc/NetworkManager/NetworkManager.confavec des privilèges de super utilisateur et ajoutez le mac de votre téléphone en tant qu'appareil non géré. Ceci est mon NetworkManager.conf; J'ai ajouté les deux dernières lignes.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

Modem Manager peut être configuré pour utiliser différentes politiques de filtrage , et les balises udev comme celles-ci ID_MM_DEVICE_IGNOREn'ont aucun effet sous la strictpolitique de filtrage.

Vous pouvez déterminer la stratégie que Modem Manager utilise sur votre système en affichant son état:

> 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

Cela montre également que le fichier de service correspondant est /lib/systemd/system/ModemManager.service. Nous pouvons modifier ce fichier de différentes manières pour désactiver la vérification d'un périphérique particulier.

Pour utiliser une politique différente qui fera référence aux règles de la liste noire udev, nous pouvons changer la commande dans le service:

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

Les options sont default(utilisez simplement les règles de la liste noire) ou paranoid(comme strictmais utilisez également les règles de la liste noire). La documentation mentionne que cela n'est pas recommandé car la prise en charge des règles de liste noire pourrait être obsolète à l'avenir.

Une autre option consiste à filtrer une classe de périphériques à l'aide de plusieurs variables d'environnement spécifiques à TTY . Cela peut être réalisé en ajoutant une ligne à la [Service]section du fichier de service. Par exemple, pour interdire le sondage des appareils ACM TTY:

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

Après avoir modifié le fichier de service, rechargez la systemctlconfiguration et redémarrez ModemManager:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

À des fins de débogage, il peut être utile de regarder les journaux du gestionnaire de modem lors de la connexion de votre appareil. Pour activer la journalisation du débogage, exécutez:

sudo mmcli -G DEBUG;

Pour regarder les messages du journal de filtrage, exécutez:

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

Maintenant, lorsque vous connectez votre appareil, vous devriez voir des lignes comme:

# 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

Pour remettre la journalisation ModemManager à son état antérieur, exécutez:

sudo mmcli -G ERR
Ian Mackinnon
la source
Alors que la liste noire n'est plus utilisée, nous avons eu des problèmes similaires avec des appareils Arduino qui sont à nouveau sondés par MM. J'ai ouvert quelques problèmes à ce sujet chez MM en amont et Debian, voir gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 et bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman
0

(juste pour la science, puisque vous avez déjà résolu votre problème ...)

udev lit / exécute ses règles dans l'ordre alphabétique [1].
Cela pourrait signifier que vos paramètres doivent être remplacés par NetworkManager, c'est votre règle est inutile.

Si vous renommez votre règle de 99-à, 99999-ce changement vous aide-t-il?


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

mattia.b89
la source
J'ai eu ce problème il y a 5 ans et je n'ai plus de matériel avec lequel j'ai rencontré le problème. Il me semble me souvenir d'avoir joué avec les noms de fichiers, mais je ne me souviens pas des circonstances exactes.
superdesk
0

Cette solution m'aide pour ModemManager 1.10.0 (Ubuntu 18.04)
ModemManager -V

Pour en savoir plus: balises udev courantes

Créez un fichier /etc/udev/rules.d/49-stm32.ruleset ajoutez ceci:

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

Après avoir enregistré le fichier et exécuté:
sudo udevadm control --reload-rules

et (peut-être que ce n'est pas nécessaire):
sudo systemctl restart ModemManager.service

Après avoir reconnecté le périphérique USB (retirez-le physiquement et insérez-le dans le port USB) et profitez-en.

Антон К
la source