las reglas de udev parecen ignoradas; no puede evitar que el administrador de módem tome el dispositivo


17

Estoy tratando de evitar que el administrador de módem se ejecute cuando conecto mi teléfono celular a un puerto USB.

He intentado agregar una regla personalizada con udev, pero mis reglas personalizadas parecen ignoradas. Creé un archivo /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesque contiene

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

Y sin embargo, cuando enchufo el teléfono y reviso dmesg, esto es lo que obtengo:

[ 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

También he intentado editar, /lib/udev/rules.dev/77-mm-usb-device-blacklist.rulespero esto tampoco funcionó. ¿Qué me estoy perdiendo? ¿Cuál sería un paso útil para depurar esto?

Actualización: la ejecución udevadm info --export-dbmuestra que la regla de udev se está actualizando. El resultado relevante es:

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

Por lo tanto, el administrador del módem debería ignorar el dispositivo. Y, sin embargo, mi computadora sigue intentando inicializar una conexión de red a través de mi teléfono cada vez que lo conecto al puerto USB. ¿Hay otro programa que udev está lanzando?


1
¿Ejecutó ModemManager --debug para verificar qué estaba haciendo con el dispositivo en cuestión? También estoy un poco sorprendido de no ver ID_MM_CANDIDATE = 1 en esa entrada, ¿tal vez este es un dispositivo de escaneo de ruta de código separado en ModemManager que no respeta ese atributo?
kiko

@kiko, tengo el mismo problema que el autor de la pregunta. ID_MM_CANDIDATEno aparece en la salida del dispositivo USB, pero hay una entrada separada en la salida de la base de datos para el dispositivo TTY, y esta tiene ambos ID_MM_CANDIDATE=1y ID_MM_DEVICE_IGNORE=1. Los registros de depuración de Modem Manager muestran que efectivamente está sondeando el dispositivo.
Ian Mackinnon

Respuestas:


7

Si bien puede haber una manera de hacer esto udev, encontré una solución de trabajo mucho más simple en esta pregunta de AskUbuntu .

Para resumir, puede decirle a Network Manager que no administre ciertos dispositivos agregando una línea a su archivo .conf.

Primero, encuentre la dirección mac de su teléfono celular. Ejecute dmesgdesde el terminal después de enchufarlo; una de las impresiones debería tener la mac. La línea para mí fue:

[ 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

A continuación, abra /etc/NetworkManager/NetworkManager.confcon privilegios de superusuario y agregue la Mac de su teléfono como dispositivo no administrado. Este es mi NetworkManager.conf; Agregué las dos últimas líneas.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

6

Modem Manager se puede configurar para usar diferentes políticas de filtro , y las etiquetas udev, como las ID_MM_DEVICE_IGNOREque no tienen efecto bajo la strictpolítica de filtro.

Puede determinar qué política utiliza Modem Manager en su sistema al ver su estado:

> 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

Esto también muestra que el archivo de servicio relevante es /lib/systemd/system/ModemManager.service. Podemos editar este archivo de diferentes maneras para deshabilitar el sondeo de un dispositivo en particular.

Para usar una política diferente que haga referencia a las reglas de la lista negra de udev, podemos cambiar el comando en el servicio:

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

Las opciones son default(solo use las reglas de la lista negra) o paranoid(como strictpero también use las reglas de la lista negra). La documentación menciona que esto no se recomienda ya que el soporte para las reglas de la lista negra puede quedar obsoleto en el futuro.

Otra opción es filtrar una clase de dispositivos utilizando una de varias variables de entorno específicas de TTY . Esto se puede lograr agregando una línea a la [Service]sección del archivo de servicio. Por ejemplo, para prohibir el sondeo de dispositivos ACM TTY:

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

Después de cambiar el archivo de servicio, vuelva a cargar la systemctlconfiguración y reinicie ModemManager:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

Para fines de depuración, puede ser útil mirar los registros del administrador de módem al conectar su dispositivo. Para habilitar el registro de depuración, ejecute:

sudo mmcli -G DEBUG;

Para ver los mensajes de registro de filtro, ejecute:

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

Ahora, cuando conecte su dispositivo, debería ver líneas como:

# 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

Para devolver el registro de ModemManager a su estado anterior, ejecute:

sudo mmcli -G ERR

Si la lista negra ya no se usa, hemos tenido problemas similares con los dispositivos Arduino que MM sondeó nuevamente. He abierto algunos problemas sobre esto en MM upstream y Debian, vea gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 y bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman

0

(solo por el bien de la ciencia, ya que ya ha resuelto su problema ...)

udev lee / ejecuta sus reglas en orden alfabético [1].
Esto podría significar que su configuración debería sobrescribirse en NetworkManager, esa es su regla es inútil.

Si cambia el nombre de su regla 99-a 99999-¿Le ayuda este cambio?


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


Tuve este problema hace 5 años y ya no tengo el hardware con el que tuve el problema. Parece que recuerdo haber jugado con los nombres de archivo, pero no puedo recordar las circunstancias exactas.
Superdesk

0

Esta es una solución que me ayuda para ModemManager 1.10.0 (Ubuntu 18.04)
ModemManager -V

Puede obtener más información: Etiquetas udev comunes

Crea un archivo /etc/udev/rules.d/49-stm32.rulesy agrega esto:

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

Después de guardar el archivo y ejecutar:
sudo udevadm control --reload-rules

y (tal vez no sea necesario):
sudo systemctl restart ModemManager.service

Después de volver a conectar el dispositivo USB (físicamente, extráigalo e introdúzcalo en el puerto USB) y disfrute.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.