web-dev-qa-db-fra.com

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

J'essaie d'empêcher le gestionnaire de modem de s'exécuter lorsque je connecte mon téléphone portable à 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.rules qui contient

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

Et pourtant, quand je branche le téléphone et vérifie dmesg, voici ce que je reçois:

[ 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é de modifier /lib/udev/rules.dev/77-mm-usb-device-blacklist.rules mais cela ne fonctionnait pas non plus. Qu'est-ce que je rate? Quelle serait une étape utile dans le débogage de ceci?

Mise à jour: l'exécution de udevadm info --export-db indique 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

Donc, le gestionnaire de modem devrait ignorer le périphérique. Et pourtant, mon ordinateur continue d’essayer d’initialiser un réseau et de se connecter via mon téléphone chaque fois que je le branche au port USB. Existe-t-il un autre programme lancé par udev?

14
superdesk

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

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 dmesg à partir du terminal après l'avoir branché; l'un des imprimés 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.conf avec les privilèges des super-utilisateurs, puis ajoutez le Mac de votre téléphone en tant que périphérique non géré. C'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
6
superdesk

Modem Manager peut être configuré pour utiliser différentes stratégies de filtre , et les balises udev telles que ID_MM_DEVICE_IGNORE n'ont aucun effet sous la variable strict. politique de filtrage.

Vous pouvez déterminer la stratégie utilisée par Modem Manager sur votre système en affichant son statut:

> 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 éditer ce fichier de différentes manières pour désactiver l'analyse d'un périphérique particulier.

Pour utiliser une politique différente faisant référence aux règles de la liste noire udev, vous pouvez modifier 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 strict, mais 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 l'une des nombreuses variables d'environnement spécifiques à TTY . Cela peut être réalisé en ajoutant une ligne à la section [Service] du fichier de service. Par exemple, pour interdire la vérification des appareils ACM TTY:

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

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

Sudo systemctl daemon-reload
Sudo systemctl restart ModemManager

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

Sudo mmcli -G DEBUG;

Pour regarder les messages du journal des filtres, 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 ramener la journalisation de ModemManager à son état antérieur, exécutez:

Sudo mmcli -G ERR
4
Ian Mackinnon

(juste pour des raisons scientifiques, 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 écrasés sous NetworkManager, votre règle est donc inutile.

Si vous renommez votre règle de 99- en 99999- cette modification vous aide-t-elle?


[1] https://unix.stackexchange.com/questions/204979/why-do-the-rules-in-udev-rules-d-have-numbers-in-front-of-them =

0
mattia.b89