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.rules
que 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.rules
pero 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-db
muestra 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?
fuente
ID_MM_CANDIDATE
no 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 ambosID_MM_CANDIDATE=1
yID_MM_DEVICE_IGNORE=1
. Los registros de depuración de Modem Manager muestran que efectivamente está sondeando el dispositivo.Respuestas:
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
dmesg
desde el terminal después de enchufarlo; una de las impresiones debería tener la mac. La línea para mí fue:A continuación, abra
/etc/NetworkManager/NetworkManager.conf
con privilegios de superusuario y agregue la Mac de su teléfono como dispositivo no administrado. Este es miNetworkManager.conf
; Agregué las dos últimas líneas.fuente
Modem Manager se puede configurar para usar diferentes políticas de filtro , y las etiquetas udev, como las
ID_MM_DEVICE_IGNORE
que no tienen efecto bajo lastrict
política de filtro.Puede determinar qué política utiliza Modem Manager en su sistema al ver su estado:
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:
Las opciones son
default
(solo use las reglas de la lista negra) oparanoid
(comostrict
pero 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:Después de cambiar el archivo de servicio, vuelva a cargar la
systemctl
configuración y reinicie 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:
Para ver los mensajes de registro de filtro, ejecute:
Ahora, cuando conecte su dispositivo, debería ver líneas como:
Para devolver el registro de ModemManager a su estado anterior, ejecute:
fuente
(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-
a99999-
¿Le ayuda este cambio?[1] /unix/204979/why-do-the-rules-in-udev-rules-d-have-numbers-in-front-of-them
fuente
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.rules
y agrega esto: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.
fuente