Estou tentando impedir que o gerenciador de modem seja executado quando conecto meu telefone celular a uma porta USB.
Tentei adicionar uma regra personalizada ao udev, mas minhas regras personalizadas parecem ignoradas. Eu criei um arquivo /etc/udev/rules.d/99-mm-usb-device-blacklist.rules
que contém
# LG Phone
ATTRS{idVendor}=="1004", ENV{ID_MM_DEVICE_IGNORE}="1"
No entanto, quando ligo o telefone e verifico o dmesg, é isso que recebo:
[ 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
Eu também tentei editar, /lib/udev/rules.dev/77-mm-usb-device-blacklist.rules
mas isso também não funcionou. o que estou perdendo? O que seria uma etapa útil na depuração disso?
Atualização: A execução udevadm info --export-db
mostra que a regra do udev está sendo atualizada. A saída relevante é:
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
Portanto, o gerenciador de modem deve estar ignorando o dispositivo. E, no entanto, meu computador continua tentando inicializar uma conexão de rede através do meu telefone sempre que eu o conecto à porta USB. Existe outro programa que o udev está iniciando?
fonte
ID_MM_CANDIDATE
não aparece na saída do dispositivo USB, mas há uma entrada separada na saída do banco de dados para o dispositivo TTY, e possui ambosID_MM_CANDIDATE=1
eID_MM_DEVICE_IGNORE=1
. Os logs de depuração do Modem Manager mostram que realmente está investigando o dispositivo.Respostas:
Embora possa haver uma maneira de fazer isso
udev
, encontrei uma solução de trabalho muito mais simples nessa pergunta do AskUbuntu .Para resumir, você pode dizer ao Network Manager para não gerenciar determinados dispositivos, adicionando uma linha ao arquivo .conf.
Primeiro, encontre o endereço mac do seu telefone celular. Execute a
dmesg
partir do terminal depois de conectá-lo; uma das impressões deve ter o mac. A linha para mim foi:Em seguida, abra
/etc/NetworkManager/NetworkManager.conf
com privilégios de superusuário e adicione o mac do seu telefone como um dispositivo não gerenciado. Este é meuNetworkManager.conf
; Eu adicionei as duas últimas linhas.fonte
O Modem Manager pode ser configurado para usar políticas de filtro diferentes , e as tags udev como
ID_MM_DEVICE_IGNORE
não têm efeito nastrict
política de filtro.Você pode determinar qual política o Modem Manager está usando no seu sistema exibindo seu status:
Isso também mostra que o arquivo de serviço relevante é
/lib/systemd/system/ModemManager.service
. Podemos editar este arquivo de diferentes maneiras para desativar a análise de um dispositivo específico.Para usar uma política diferente que se refira às regras da lista negra do udev, podemos alterar o comando no serviço:
As opções são
default
(use apenas as regras da lista negra) ouparanoid
(comostrict
mas também use as regras da lista negra). A documentação menciona que isso não é recomendado, pois o suporte a regras da lista negra pode ficar obsoleto no futuro.Outra opção é filtrar uma classe de dispositivos usando uma das várias variáveis de ambiente específicas do TTY . Isso pode ser conseguido anexando uma linha à
[Service]
seção do arquivo de serviço. Por exemplo, para proibir a detecção de dispositivos ACM TTY:Após alterar o arquivo de serviço, recarregue a
systemctl
configuração e reinicie o ModemManager:Para fins de depuração, pode ser útil observar os logs do gerenciador de modem ao conectar seu dispositivo. Para habilitar o log de depuração, execute:
Para assistir às mensagens de log do filtro, execute:
Agora, ao conectar seu dispositivo, você verá linhas como:
Para retornar o log do ModemManager ao seu estado anterior, execute:
fonte
(apenas por uma questão de ciência, já que você já resolveu seu problema ...)
O udev lê / executa suas regras na ordem alfabética [1].
Isso pode significar que suas configurações devem ser substituídas pelo NetworkManager; essa é sua regra inútil.
Se você renomear sua regra de
99-
para99999-
, essa alteração o ajudará?[1] /unix/204979/why-do-the-rules-in-udev-rules-d-have-numbers-in-front-of-them
fonte